当前位置: 首页 > 知识库问答 >
问题:

Matlab中ODE直到平衡的求解系统

周峻
2023-03-14
function [t,N] = SI1(s0,i0,Tmax,b,d,<more parameters>)

% Initial conditions
y0 = [s0 i0];

% parameters
P(1) = b;      
P(2) = d;      
P(3) = ... etc

% time steps
time = [0 Tmax];

% solve ODE system
[t,N] = ode45(@(t,Y) SI1ode(t,Y,P), time, y0);

end


function Y = SI1ode(t,x,P)

%parameters
b = P(1);      
d = P(2);      
...etc

%State variables
S = x(1);
I = x(2);

Y(1) = equation 1;
Y(2) = equation 2;
Y=Y';   %make column vector
end

而我的行书是:

Tmax = 100;
s0 = 100;
i0 = 1e-2;

b = 2;      
...etc

D = [0 .01 0.05 0.1 0.15 0.2 0.3 0.4 0.5 .6 .7 .8 .9 1];

for j=1:length(D)

    d = D(j);
    [t,N] = SI1(s0,i0,Tmax,b,d,<more parameters>);
    result(j) = N(end,2)/(N(end,1)+N(end,2));

end

共有1个答案

姬宝
2023-03-14

可以通过使用输出函数或事件来中断集成。如果您更喜欢一个事件,您应该编写类似于If equality,isterminal(1)=1;end,而对于输出函数,如果平衡,status=1,则代码将变为;结束

关于如何测试平衡条件,您应该将解的前一个值与当前值进行比较,这是一个可以逐个组件进行的操作,也可以使用规范标准进行操作。在这两种情况下,这都类似于用有限差分计算解的导数。

此操作意味着您必须有权访问在前面的时间步骤中计算出的解决方案。可以使用output函数将这些值保存在全局变量中。

 类似资料:
  • 所以,我正在用ODE45在MATLAB中求解一些ODE。它们和代码没有什么特别复杂的,但是每个ODE解决方案需要20-30分钟来获得,我需要获得大约10分钟。(这是一个参数扫描。) 当我坐在那里等待解的到来时,我发现自己希望有一种方法可以在解诗的时候看着解画出来,这样既可以让自己确信正在取得进展,也可以在解似乎有问题的时候结束解。 有没有一种方法从ode45返回当前的(不完整的)解,并在解的时候实

  • 我正在使用一个僵硬的求解器(ode15s)对一个颂歌系统进行时间积分。它在起作用,但我想加快速度。 方程组以状态空间形式给出: 这里的诀窍部分是强迫函数F,它是高度非线性的,依赖于x和t参数。它利用x参数求解Poisson型二维方程(用有限体积法)。力F与泊松方程解成正比。 用迭代法求解泊松方程需要一个初始条件,我把它设为零()。我想我可以通过提供一个更好的场的初始估计来提高计算速度(一个更好的初

  • 我在MATLAB中有一个ode求解器的问题。我使用了所有的ode求解器,如ode23s、ode23、ode15s、ode45等等。我的代码无法计算,因为错误警告: 警告:在t=8.190397E+01时失败。在时间t时,步长不减小到允许的最小值(2.273737E-13)以下,就无法满足积分公差。 我想计算它,请帮助我直接在我的代码。谢谢你。 第一个脚本: 谢谢你。

  • 我已经广泛地搜索了,并认为我不会是唯一一个有这个问题的人,但看起来似乎我是。 有人有什么想法吗?提前向大家表示感谢,祝大家假期愉快!

  • 我正在使用一个Spark内燃机模型,由于某些原因,我正在使用python对燃烧进行建模。我试着使用颂歌的解算器,但结果完全不符合实际。我发现圆柱体体积的积分是错误的。我已经尝试使用“odeint”和“ode”解算器,但结果是一样的。代码显示体积与θ的导数,并进行积分以找到体积。我把分析方程式拿来比较。 OBS:我在使用Matlab时也遇到过类似的问题,但当我尝试在三角函数中使用度时就遇到了。当我改