想通过matlab求解一个微分方程,但是被报错了:
错误使用 odearguments (line 113)
输入必须为单精度或双精度浮点值。
% odefun.m
function dy = odefun(t,y)
dy = sym(zeros(3,1)); % a column vector
u = 1;
P = 1;
Q = 1;
a = 1;
syms m n p;
E = 0.5 * ((10 - 4 * m - 0.5 * n^2)^2 + ( m - 3 * n - 2 * p - 0.5 * n * p)^2 +(10 + 2 * n - 6 * p - 0.5 * p^2)^2) + 0.5 * a *(P + Q)
x(1) = diff(E * m, m)
x(2) = diff(E * n, n)
x(3) = diff(E * p, p)
dy(1) = -u * x(1);
dy(2) = -u * x(2);
dy(3) = -u * x(3);
end
函数文件求梯度运行成功了,但是命令文件运行时报了错
% testode45.m
clear
clc
% 时间跨度取0-12
tspan = [0,12];
% 初始值
y0 = [0,1,1];
% 调用语句
[T,Y] = ode45( @odefun, tspan, y0 );
% 绘图
plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')
legend('x','y','z')
请问这应该怎么修改呢?