matlab метод Эйлера для решения диф уравнения
Реализовал метод Эйлера, который работает для дифференциального уравнения номер 1, а для второго выдает ошибку, помогите, пожалуйста
]2
clear all
clc
fun='t.^2*cos(t)+2/t';
fun=inline(fun);
t(1)=0.1;
h=0.03;
for i=1:50;
t(i+1)=t(i)+h*fun(t(i));
if t(i+1)-t(i)<0.01
break
end
i=i+1;
end
plot(t)
grid on;[![для этого уравнения все работает][1]][1]
Пытаюсь сделать для уравнения номер 2 и выдает ошибку :
Error using inline/subsref (line 12)
Not enough inputs to inline function.
Error in LR_1_1 (line 11)
t(i+1)=t(i)+h*fun(t(i));
clear all
clc
fun = 't*sin(t)+sin(t)*cos(t)*exp.^(-cos(t))';
fun=inline(fun);
t(1)=0.1;
h=0.03;
for i=1:50;
t(i+1)=t(i)+h*fun(t(i));
if t(i+1)-t(i)<0.01
break
end
i=i+1;
end
plot(t)
grid on;
Ответы (1 шт):
Автор решения: AVK
→ Ссылка
Ошибка на самом деле здесь:
fun = 't*sin(t)+sin(t)*cos(t)*exp.^(-cos(t))';
Матлаб думает, что exp это имя аргумента, а не функции, и ждёт, что в fun будет передано 2 аргумента. Правильно так:
fun = 't*sin(t)+sin(t)*cos(t)*exp(-cos(t))';
А вообще объекты inline лучше не использовать, в том числе из-за возможности возникновения вот такой вот ситуации. Тем более, что им есть замена - анонимные функции.
