求解超越存在的 ODE。发生了什么?

计算科学
2021-11-28 15:16:30

作为 ODE 课程的示例,我使用了 ODE

y=yx+1cos(yx)
来说明存在的领域。标准替代z=y/x将方程变为
z=1xcos(z)
可以通过分离变量得到解
ϕ(x)=xarcsin(ln(x/x0)sin(y0/x0))
有初始值ϕ(x0)=y0 (并且解决方案不再存在于x=x0exp(1sin(y0/x0)))。

为了检查我的解决方案是否正确,我将解决方案与一些数值求解器(ode45来自 MATLAB)的输出进行了比较。由于我懒得找出解决方案不再存在的精确上限,所以我只是插入了一些上限并查看了结果。正如所料,奇怪的事情发生在存在点之外。然而,当比较数值解和计算的解时(顺便说一句,这是正确的),我注意到一些奇怪的事情:虽然由精确公式计算的解有问题(当arcsin变得大于 1 并且从那时开始在 MATLAB 上绘制实部并忽略解的虚部),“错误的精确解”以一种非常粗略、奇怪但不可否认的方式以某种方式遵循“错误的数值解”。这是情节x0=1,y0=0

在此处输入图像描述

(红色是情节ϕ蓝色是ode45) 的输出。

这是为什么?超越存在的 ODE 求解器发生了什么?为什么它遵循不存在的复杂解决方案的真实部分?

1个回答

我会说关键是当你说“解决方案ϕ(x)",因为解决方案 (x0=1,y0=0)

sin(y/x)=logx
是其中之一
y=x(arcsinlogx+2πk),y=x(πarcsinlogx+2πk)
对于适当的整数k. ODE 本身在奇点位置之外得到了很好的定义,这与从(1,0).

首先,步进函数有一个小错误——它应该能够正确检测到奇点,但事实并非如此。相反,它只是越过了奇点。

二、ODE 中的奇异点(x,y)-平面定义为cos(y/x)=0,所以在这种情况下,它是线y=π2x这很重要。当 ODE 求解器逐步“通过”一个奇点时,它最终会达到某个值,即x~就在奇点位置之后xsing,并且在y~就在奇异值的上方(另一侧)π2x~.

它遵循“复杂解决方案的真实部分”是不正确的。有一个定义明确的真实解决方案,从初始条件开始(x~,y~),并上升(如arcsin上)当y~<π2x~,并且下降(如πarcsin上)当y~>π2x~. 这就是为什么情节一次又一次地越过奇异线的原因。

情节跟踪线的方式y=π2x由单独的弧组成,这些弧本身就是 ODE 解。这些弧的位置是随机的,因为它们取决于 ODE 求解器中的数值误差。

它的绘制方式可能还有一个单独的问题,因为绘图有时不会像预期的那样越过红线。可能是绘图功能没有足够频繁地对解决方案进行采样,但我无法仅从绘图中分辨出来。另一方面,解决方案可能只是在一些中间求解器步骤中越界。