如何定义微分方程组?

How to define system of differential equations?

我在 MATLAB 工作,我对微分方程组有疑问。我的系统是 dvdt = (-2*T)-4*vdTdt = 6*T+v,我想使用四阶 Runge-Kutta 来解决它。我写了下面的代码:

如果我 运行 只有函数 odefun,我的代码可以工作!但是如果我 运行 完整的程序,我的代码就无法工作:

clear all

yy=@(t,y)[dvdt;dTdt]
[t,y]= ode45(@(t,y)yy,[0 1.5],[1 1/2 ]);



function res = odefun(t , y )
% i define two variable i will use: v and TT
v = y(1,:);
T = y(2,:);

% i define the two partial derivative:

res(1,:) = dvdt
res(2,:) = dTdt

dvdt = (-2*T)-4*v
dTdt = 6*T+v;

end

这是我的结果。我不知道写一个正确长度的向量:

Error using odearguments (line 95) @(T,Y)YY returns a vector of length 1, but the length of initial conditions vector is 2. The vector returned by @(T,Y)YY and the initial conditions vector must have the same number of elements.

Error in ode45 (line 115) odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);

Error in sys_ode (line 4) [t,y]= ode45(@(t,y)yy,[0 1.5],[1 1/2 ]);

y 从 ode45 传递到 odefun 是一个平面的一维数组。您处理二维数组时的变量赋值毫无意义。应该是 v=y(1); T=y(2);.

在代码块中,您需要观察因果关系。您需要先 declare/define 一个变量,然后才能在另一行代码中使用它。

如果不调用 odefun,您将不会收到错误,因为 odefun 中的每一行在语法上都是正确的。但是,由于语义错误,您在执行时会遇到错误。

尝试

clear all

[t,y]= ode45(odefun,[0 1.5],[1 1/2 ]);

function res = odefun(t , y )
    % i define two variable i will use: v and T
    v = y(1);
    T = y(2);

    % i define the two derivatives:
    dvdt = (-2*T)-4*v
    dTdt = 6*T+v;

    res = [ dvdt  dTdt ]
end