«глупая» версия метода Эйлера с использованием 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. Любая помощь, пожалуйста?


person iTurki    schedule 03.06.2011    source источник
comment
DOFOR I = 1, nc, но nc = (xf – xi) / dx, где xi = 0 и xf = 0... 'нафф сказал   -  person Rasman    schedule 03.06.2011
comment
Почему бы вам не показать свой код Matlab? Если это домашнее задание, отметьте его как таковое. Спасибо   -  person eat    schedule 03.06.2011
comment
Так что не удалось? Вы даже не удосужились попробовать? Покажите какой-нибудь код, иначе вы, вероятно, не найдете того, кто сделает всю вашу работу за вас.   -  person    schedule 03.06.2011
comment
Спасибо Расман. Проблема была с псевдокодом, а не с кодом Matlab. Я думал, что у меня проблема с циклом for. Теперь ясно   -  person iTurki    schedule 05.06.2011


Ответы (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

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

person Eugene K    schedule 03.06.2011
comment
Спасибо за попытку. Я предполагаю, что моя проблема была с псевдокодом, а не с кодом Matlab. Теперь он работает нормально. Я думаю, ваш код тоже сработает. Спасибо - person iTurki; 05.06.2011