【问题标题】:Run ODE's from multiple MATLAB files simultaneously同时从多个 MATLAB 文件运行 ODE
【发布时间】:2018-10-30 11:55:21
【问题描述】:

我在两个 .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

函数 yottoy

中调用的函数 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

【问题讨论】:

    标签: matlab function ode


    【解决方案1】:

    由于这两个 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
    

    【讨论】:

    • 能否请您告诉组合后应该如何调用ode45? z 是 vc。另外,我们可以直接将 toy(t,vz,vc) 赋值给 dV(1) 吗?函数 toy 有 3 个微分方程(dvz 是一个矩阵)。在玩具中求解dvz的具有初始条件的向量vz有3个值。您能澄清一下吗?
    • 我创建了新函数Combined_ODEs。你能看看吗?
    • 看起来不错。你试过了吗?您需要使用 4 个初始条件的向量来调用它,它应该可以工作。确保所有函数都在您的 MATLAB 路径上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多