“тупая” версия метода Эйлера с использованием Matlab

#matlab #numerical-methods

#matlab #численные методы

Вопрос:

Я пытался написать «тупую» версию метода Эйлера, используя Matlab, но у меня всегда ничего не получалось. Мой код был мусором 🙁

Смотрите этот псевдокод для этого метода :

 ‘set integration range
xi = 0
xf = 0
‘initialize variables
x = xi
y = 1
‘set step size and determine
‘number of calculation steps
dx = 0.5
nc = (xf – xi) / dx
‘ output initial condition
PRINT x, y
‘Loop to implement Euler’s method
‘and display results
DOFOR I = 1, nc
dydx = -(2X**3)   (12X**2) - (20X)   8.5
y = y   dydx . dx
x = x   dx
PRINT x, y
END DO
  

Я почти уверен, что этот псевдокод — это то, что мне нужно реализовать, но мне не удалось преобразовать его в код Matlab.
Любая помощь, пожалуйста?

Комментарии:

1. DOFOR I = 1, nc , все же nc = (xf – xi) / dx , где xi = 0 и xf = 0 … «нуфф сказал

2. Почему вы не показываете свой код Matlab? Если это домашнее задание, пометьте его как таковое. Спасибо

3. Так что же не удалось? Вы даже не удосужились попробовать? Покажите какой-нибудь код, так как в противном случае вам, вероятно, не удастся найти кого-то, кто сделает всю вашу работу за вас.

4. Спасибо Расману. Проблема была в псевдокоде, а не в коде Matlab. Я думал, у меня проблема с циклом for. Теперь понятно

Ответ №1:

Я не уверен, где вы терпите неудачу, это действительно помогло бы узнать, как вы терпите неудачу или в чем сложность. В противном случае это просто похоже на выполнение домашней работы.

Вот моя попытка использовать код MATLAB. (Примечание: у меня нет MATLAB на этом компьютере, и я его не тестировал)

 i = 0;
stepsize = .1; % Define as what you want it to be
y = 1; % Initial value condition given 
t = 0; % Initial time value
yout = [zeros(1,20)]; % Assuming you want 20 outputs, can change
fvec = [zeros(1,20)];

for i = 1:20 % Time range, can change to correspond to what you want
fvec(i) = 2 - exp(-4*t) - 2*yout(i); % Just loops calculating based on Euler's method
yout(i 1) = yout(i)   stepsize*fvec(i)
t = t stepsize % Time has passed, increment the time.
end
  

Я не совсем уверен в этом коде, но он должен дать вам пример того, как это сделать. Пожалуйста, прокомментируйте, если что-то не так.

Комментарии:

1. Спасибо за попытку. Я предполагаю, что моя проблема была с псевдокодом, а не с кодом Matlab. Теперь это работает нормально. Я думаю, ваш код также справится с этой задачей. Спасибо