ode45 for third order differential

12 次查看(过去 30 天)
I am trying to solve a third order differential equation by representing it as a set of first order diff equations. The constants are user input arguments.
A=str2double(get(handles.Avalue, 'string'));
B=str2double(get(handles.Bvalue, 'string'));
C=str2double(get(handles.Cvalue, 'string'));
E=str2double(get(handles.Evalue, 'string'));
F=str2double(get(handles.Fvalue, 'string'));
t=str2double(get(handles.tvalue, 'string'));
xinitial=0;
where t is the final value on the x axis
[T,X] = ode45(@funsys, [0 t], [0 0 0 0]);
plot(T, X(:,1), 'Parent', handles.axes1)
plot(T, X(:,2), 'Parent', handles.axes2)
plot(T, X(:,3), 'Parent', handles.axes3)
plot3(X(:,1),X(:,2),X(:,3), 'Parent', handles.axes4)
I am using the following function stored in a separate m file
function diff_f=funsys(t,x,A,B,C,E,F)
diff_f=zeros(4,1);
diff_f(1)=x(2);
diff_f(2)=x(3);
diff_f(3)=x(4);
diff_f(4)=(F*exp(-0.1*t)*cos(t)+B*x(4)-C*t*x(3)+E*x(2))/A;
end
Whenever I run it I receive an error message:
Not enough input arguments.
Error in funsys (line 7)
diff_f(4)=(F*exp(-0.1*t)*cos(t)+B*x(4)-C*t*x(3)+E*x(2))/A;
I tried using syms x to see if x is the problem, otherwise all other arguments are present.

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Ordinary Differential Equations 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by