非负ODE解
本主题演示如何将ODE的解约束为非负的。强加非负性并不总是微不足道的,但有时由于方程的物理解释或由于解的性质,它是必要的。您应该只在必要时对解决方案施加此约束,例如在没有它的情况下集成失败,或者解决方案不适用的情况下。
如果溶液的某些组分必须是非负的,则使用odeset
设置非负
选项的索引。此选项不能用于ode23s
,ode15i
,或用于隐式求解器(ode15s
,ode23t
,ode23tb
)应用于质量矩阵问题。特别地,你不能对DAE问题施加非负约束,因为它必须有一个奇异质量矩阵。
示例:绝对值函数
考虑初值问题
在区间上求解
在初始条件下
.这个ODE的解衰减为零。如果求解器产生一个负的解值,那么它开始通过这个值跟踪ODE的解,计算最终失败,因为计算的解发散到
.使用非负
选项可防止此集成失败。
比较的解析解
到ODE使用的一个解决方案数值
没有额外的选择,和一个有非负
选项设置。
Ode = @(t,y) -abs(y);标准溶液|ode45|option1 = odeset(“完善”1);[t0,y0] = ode45(ode,[0 40],1, option1);具有非负约束的解option2 = odeset(option1,非负的1);[t1,y1] = ode45(ode,[0 40],1,options2);解析解T = linspace(0,40,1000);Y = exp(-t);
画出三个解进行比较。万博 尤文图斯施加非负性是防止解决方案偏离的关键 .
情节(t y“b -”t0, y0,“罗”t1, y1,“k *’);传奇(精确解的,“没有限制”,“Nonnegativity”,...“位置”,“西南”)
例子:膝盖问题
另一个需要非负解的例子是膝盖问题编码在示例文件中kneeode
.方程是
在区间上求解 在初始条件下 .的参数 一般是拿来满足的 ,这个问题用 .这个ODE的解接近于 为 而且 为 .然而,计算默认公差的数值解表明,解遵循 等斜线对整个积分区间。施加非负性约束可以得到正确的解。
在有无非负性约束条件下解决膝盖问题。
= 1e-6;Y0 = 1;Xspan = [0 2];Odefcn = @(x,y,) ((1-x)*y - y^2)/;不加约束地解决问题(x1, y1) = ode15s (@ (x, y) odefcn (x, y,ε)xspan, y0);施加一个非负性约束选项= odeset(非负的1);[x2,y2] = ode15s(@(x,y) odefcn(x,y,epsilon), xspan, y0, options);
画出解以作比较。万博 尤文图斯
情节(x1, y1,“罗”x2, y2," b *’轴([0,2,-1,1])“膝盖问题”)传说(“没有限制”,“Non-negativity”)包含(“x”) ylabel (“y”)
参考文献
[1]香皮恩,L.F, S.汤普森,J.A. Kierzenka和G.D. Byrne,“ode的非负解,”万博 尤文图斯应用数学与计算2005年第170卷第556-569页。