我在两个.m文件中的两个函数中创建了ode。我正在尝试将两个函数的ode组合起来,并同时运行它。
以下是的功能
主函数:runtoy-使用ODE45两次来分别解决名为toyyot的两个函数中存在的ode。
function runtoy()
%% toy
Nnodes = 5;
vc = 50;
vz0 = [280 100 150 180 110];
vz = vz0(2:4)';
tspan = [0 2];
[tz,dvzdt] = ode45(@(t,y) toy(t,y,vc), tspan,vz)
plot(tz,dvzdt)
hold all
plot(tz,vc,'*')
%% yot
[tc,dvcdt] = ode45(@(t,z) yot(t,z,vz(2)), tspan,vc)
hold all
plot(tc,dvcdt)
hold all
plot(tc,vz(2),'o')
legend({'toy-vz1','toy-vz2','toy-vz3','toy-vc','yot-vc','yot-vz2'})
%%EDIT
init = [vz' vc];
Combined = ode45(@(t,v) combined_ODEs(t,v), tspan ,init')
end
函数toy中存在的第一组ODE
function dvz = toy(t,y,vc)
vz = y;
Matrix = [-2 0 0;1 -3 1;0 -4 1];
Connect = [0;conn(vz(1),vc);0];
dvz = Matrix*vz -Connect;
end
ODE存在于函数yot中
function dvc=yot(t,z,vz)
dvc = conn(vz,z);
end
函数yot和toy内调用的函数conn
function c= conn(vz,vc)
c = vz - vc/3;
end
有人能就如何同时解决两个函数中的ode问题提出建议吗?我可以在一个文件中拥有这些功能。但是,我将此作为一个测试用例来实现我的真实系统。
编辑:评论中建议的方法的试验
function dV = combined_ODEs(t,V)
vz = V(1:3);
vc = V(4);
dV(1:3,1) = toy(t,vz,vc);
dV(4,1) = yot(t,vc,vz(2)); % not sure what z is here??
end
由于两个ODE是成对的,我的建议是编写(另一个(另一个函数,引用定义ODE的两个(或多个(函数,并解决它,例如:
function dV = combined_ODEs(t,V)
vz = V(1);
vc = V(2);
dV(1) = toy(t,vz,vc);
dV(2) = yot(t,z,vz); % not sure what z is here??
end