Я читаю «Численные методы для инженеров» Чапры и Канале. В нем они предоставили псевдокод для реализации метода Эйлера (для решения обыкновенных дифференциальных уравнений). Вот псевдокод:
Псевдок для реализации метода Эйлера
Я пытался реализовать этот код в GNU Octave, но в зависимости от входных значений я получаю одно из двух ошибки:
- Программа вообще не выдает никаких результатов. Я должен нажать 'Ctrl + C', чтобы прервать выполнение.
- Программа выдает следующее сообщение:
error: 'ynew' undefined near line 5 column 21
error: called from
Integrator at line 5 column 9
main at line 18 column 7
Я был бы очень признателен, если бы вы могли получить эта программа для меня. Я на самом деле любитель в GNU Octave. Спасибо.
Редактировать 1 : Вот мой код. Для main.m:
%prompt user
y = input('Initial value of y:');
xi = input('Initial value of x:');
xf = input('Final value of x:');
dx = input('Step size:');
xout = input('Output interval:');
x = xi;
m = 0;
xpm = x;
ypm = y;
while(1)
xend = x + xout;
if xend > xf
xend = xf;
h = dx;
Integrator(x,y,h,xend);
m = m + 1;
xpm = x;
ypm = y;
if x >= xf
break;
endif
endif
end
Для Integrator.m:
function Integrator(x,y,h,xend)
while(1)
if xend - x < h
h = xend - x;
Euler(x,y,h,ynew);
y = ynew;
if x >= xend
break;
endif
endif
end
endfunction
Для Euler.m:
function Euler(x,y,h,ynew)
Derivs(x,y,dydx);
ynew = y + dydx * h;
x = x + h;
endfunction
Для Derivs.m:
function Derivs(x,y,dydx)
dydx = -2 * x^3 + 12 * x^2 - 20 * x + 8.5;
endfunction
Редактировать 2 : Я должен упомянуть, что дифференциальное уравнение, которое Чапра и Канале привели в качестве примера:
y '(x) = -2 * x ^ 3 + 12 * x ^ 2 - 20 * x + 8,5
Именно поэтому скрипт Derivs.m показывает, что dydx является именно этим полиномом.