我需要使用ode45函数来解决以下符号ODE:
function ydot=App1(~,y)
% clc;
% clear;
% close all;
syms x [1 4] real;
syms vv [1 2] real;
syms u [1 4] real;
f=sum(x.^2)-2*x(1)-3*x(2);
g1=-x(1);
g2=-x(2);
g3=-x(3);
g4=-x(4);
g=[g1 g2 g3 g4]';
h=[2*x(1)+x(2)+x(3)+4*x(4)-7;
x(1)+x(2)+2*x(3)+x(4)-6];
Psi=[-(gradient(f)+diff(g,'x1').*max(u'+g,0)+...
diff(g,'x2').*max(u'+g,0)+...
diff(g,'x3').*max(u'+g,0)+...
diff(g,'x4').*max(u'+g,0)+...
gradient(h(1))*vv(1)+...
gradient(h(2))*vv(2));
max(u'+g,0)-u';
h;
];
% syms y [1 size(symvar(Psi),2)];
ydot=subs(Psi,[x1, x2, x3, x4, u1, u2, u3, u4, vv1, vv2],sym('y',[1 10]));
我知道我需要将其转换为function_handler:
aa=matlabFunction(App1);
但是我不知道如何在ode45函数内部使用:
a = unifrnd(-3 , 3 , [1,10]);
[t,y]=ode45(@aa,[0,200],a);
MATLAB出现此错误:
Not enough input arguments.
编辑: 我真正的问题是包含具有许多参数的各种函数(应该通过ODE45函数获得),我正在寻找一种自动的方法来计算梯度并将其应用于ODE45。