Wolfram mathematica Mathematica';NDSolve是一个非常快速地找到一个刚性系统,试图解决一大组微分方程

Wolfram mathematica Mathematica';NDSolve是一个非常快速地找到一个刚性系统,试图解决一大组微分方程,wolfram-mathematica,Wolfram Mathematica,我是一名物理学博士生,负责求解与圆柱形像素中二元液滴蒸发相关的润滑方程(非线性偏微分方程),以模拟形状演变。因此,我将系统分成N个节点,每个节点代表I点的高度演化(dh/dt),以有限差分的形式写入,并使用NDSolve同时求解。对于单个液滴,这种方法效果很好,液滴可以干净地蒸发 然而,对于二元液滴,我在每一点包括N个额外的ODE,用于成分分数演变(dX/dt)。这也为dh/dt方程增加了一个新项(marangoni应力)。他马上说: 当t==0.00029140763302667777`时,步

我是一名物理学博士生,负责求解与圆柱形像素中二元液滴蒸发相关的润滑方程(非线性偏微分方程),以模拟形状演变。因此,我将系统分成N个节点,每个节点代表I点的高度演化(dh/dt),以有限差分的形式写入,并使用NDSolve同时求解。对于单个液滴,这种方法效果很好,液滴可以干净地蒸发

然而,对于二元液滴,我在每一点包括N个额外的ODE,用于成分分数演变(dX/dt)。这也为dh/dt方程增加了一个新项(marangoni应力)。他马上说:

当t==0.00029140763302667777`时,步长实际上为零
怀疑奇异或僵硬的系统

我绘制了该t值处的液滴高度,它在原点处显示了一个窄尖峰(明显爆炸,因此刚度);绘制成分图显示原点处有一个狭窄的垂直线(也在爆炸,只是负值。此外,物理学显然不允许成分分数低于0)

最后,这两组方程都有依赖于dX/dr(成分梯度)的项。如果将其设置为零,并且我也将蒸发相互作用设置为零(意味着两种液体以相同的速率蒸发,并且不存在X梯度),那么X在任何地方都应该没有变化,并且应该减少到单一液体的情况(dX/dt=0,dh/dt不再依赖于X)。然而,这个过程在X上引入了一些小的梯度,它会爆炸并导致同样的数值不稳定性

我的问题是:NDSolve是否有可能导致这种情况?我已经对方程和离散化做了一百次了,我确信它是正确的。我也查阅了NDSolve的文档,但没有找到任何对我有帮助的东西。它是否会在成分梯度中引入一个小的数值误差

我可以在下面发布一个MRE代码,但它非常密集,显然是用mathematica代码编写的(不能很好地转换到现实世界中…),所以我不知道它会有多大帮助。无论如何,谢谢你阅读这篇文章