如何定义微分方程组?
How to define system of differential equations?
我在 MATLAB 工作,我对微分方程组有疑问。我的系统是 dvdt = (-2*T)-4*v
和 dTdt = 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
我在 MATLAB 工作,我对微分方程组有疑问。我的系统是 dvdt = (-2*T)-4*v
和 dTdt = 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