0

我需要使用 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 中的方法。

4

0 回答 0