如何在ODE求解器中使用符号表达式

时间:2019-08-04 11:24:47

标签: matlab ode ode45

我需要使用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。

0 个答案:

没有答案