Использование Matlab для решения системы ОДУ по методу Эйлера - PullRequest
2 голосов
/ 21 апреля 2020

Я создал функцию Euler.m для решения системы ОДУ с использованием метода Эйлера. Я sh буду использовать эту функцию для решения системы ОДУ, определенной анонимной функцией func=@(t) ([x(t)+4*y(t)-exp(t);x(t)+y(t)+2*exp(t)]) с начальными условиями, заданными y0.

func=@(t) ([x(t)+4*y(t)-exp(t);x(t)+y(t)+2*exp(t)]);
y0=[4;5/4];
y_exact=@(t) [4*exp(3*t)+2*exp(-t)-2*exp(t);2*exp(3*t)-exp(-t)+exp(t)/4]; %exact solution of ODEs
a=0; % such that 
b=1; % a<t<b
N=120;
[t,y] = Euler(func,a,b,y0,N)

Однако отображается следующая ошибка:

"Ошибка при использовании решения> @ (t) ([x (t) + 4 * y (t) -exp (t); x (t) + y (t) + 2 * exp (t)] ) Слишком много входных аргументов.

Ошибка в решении (строка 7) [t, y] = Эйлер (fun c, a, b, y0, N) ".

Почему эта ошибка отображается?

1 Ответ

2 голосов
/ 21 апреля 2020

Вы делаете вид, что уже знаете, когда пишете функцию ODE func, каковы решения x(t),y(t). Тогда вы собираетесь вычислить решения приближений для него. Это совершенно неверный путь.

Функция для правой стороны предназначена только для точки в фазовом пространстве, поэтому вам нужно

func=@(t,y) ([y(1)+4*y(2)-exp(t);y(1)+y(2)+2*exp(t)]);

, где вход y является двухкомпонентным вектором.

...