如何求解二阶耦合非线性微分方程

计算科学 数字 边界条件 微分方程
2021-12-26 01:02:11

对于我正在做的一个项目,我必须使用我自己的代码以数值方式求解以下微分方程组:

x2K=KH2+K(K21)
并且,
x2H=2K2H+αH(H2x2)
这里,KH是因变量,而α是一个参数,我必须从 0 变化到无穷大。解析解只存在于α=0的情况。边界条件是,
K(ϵ)=1H(ϵ)=0
并且,
K(ϵ¯)=0H(ϵ¯)=ϵ¯
这里,ϵ是一个任意小的数字,(比如 0.0001),而ϵ¯是一个任意大的数字,(比如 400)。

简而言之,边界条件是K趋于 0 而H趋于x

我试过的:

对于解析案例,我尝试过 RK4、RKF(Fehlberg)、RK4 based Shooting 和 scipy 的solve_ivp。然而,所有人都遇到同样的问题,它们在 10 左右偏离解析解(见附图,第一个是与解析相比的两个函数,第二个是导数)。

我也尝试过迭代有限差分逼近,因为我有初步的猜测,它遇到了同样的问题。

唯一有效的内置函数是solve_bvp。谁能建议我为这个系统提供两种或三种数值方法,用于任意,以解决 bvp 并为这些方法指出一些好的资源?我所拥有的是对解决方案的初步良好猜测,这是情况的解析解决方案。 αα=0K和H 导数图

编辑:这可能会有所帮助。解析案例的解决方案是,

K=xsinh(x)
Edit2:另外,我什至尝试引入新变量,其中: Trial1:取出 x 的幂,即并且对于也是如此。Trial2:取出渐近行为,即 and
H=xtanh(x)1
khK=xkHK=exkH=xh

我重铸了方程,结果还是一样。

更新:所以我尝试了更多方法并实现了solve_bvp的残差控制方法。根据@superbee 的建议,我使用 Newton Ralphson 技术实现了有限差分法并且它有效!简而言之,我通过给出初始猜测和有限差分近似,生成了一个非线性代数方程组。我找到了雅可比行列式,并找到了一个更新的猜测:

y(i+1)=y(i)J1F

2个回答

您可以使用离散化方法(例如有限元或有限差分法)和线性化技术(例如 Picard 或 Newton 方法)来解决此问题。一个类似的问题是this

这些解决技术的主要思想如下:

  • 为解决方案选择一个初始猜测。
  • 线性化您的方程并根据先前的解决方案编写更新的解决方案。
  • 解决一系列线性问题,直到达到某个收敛标准。

我建议您检查以下参考资料,其中逐步解释了这一点。

你确定你有正确的边界条件吗?我认为您为分析情况陈述的方程与边界条件不兼容,其中很大。行为不正确的原因

H=x/tanh(x)1
H(ϵ¯)=ϵ¯ϵ¯x

我尝试用固定的 BC情况求解你的方程,并且能够使用牛顿高斯找到与解析解的良好一致性-Seidel 松弛法。α=0H(ϵ¯)=ϵ¯1