我正在尝试以数字方式求解以下方程:
以扩展形式表示,它是:
在哪里是一个函数. a 是一个非线性函数和另一个变量,但对于给定的我可以得到它。
就稳定性、性能和准确性而言,解决此问题的最佳方法是什么?我在 MATLAB 中尝试线的方法,但我一直没有取得任何进展。
我正在尝试以数字方式求解以下方程:
以扩展形式表示,它是:
在哪里是一个函数. a 是一个非线性函数和另一个变量,但对于给定的我可以得到它。
就稳定性、性能和准确性而言,解决此问题的最佳方法是什么?我在 MATLAB 中尝试线的方法,但我一直没有取得任何进展。
如果您确定您的 PDE 姿势正确,那么我建议您执行以下操作:
首先尝试使用显式有限差分格式进行离散化。
如果您发现您得到不合理/不稳定的解决方案,请尝试使您的时间步长与您的空间步长相比非常小(几个数量级)。
如果这仍然不起作用,请尝试使用隐式有限差分方案。由于您的方程是非线性的,因此最好使用牛顿法求解。
如果所有其他方法都失败了,请检查您的问题是否恰当。您可能想尝试证明/反驳您的问题的解决方案存在并且对于您施加的初始/边界条件是唯一的。
在不知道你的情况下很难给出具体的建议确实看起来,但是如果您在 Matlab 中,您可能想尝试Chebfun系统,该系统使用搭配谱方法和自动微分来求解线性和非线性 ODE,在某些情况下,还可以求解 PDE。
如果您安装 Chebfun,尝试您的示例的最快方法是启动chebgui
ODE 和 PDE 的图形用户界面,查看一些 PDE 示例并根据您自己的功能修改它们。
免责声明:我是 Chebfun 开发团队的一员 :)
更新
按照 Aron Ahmadia 的要求,我编写了一个小例子来展示如何计算为了有边界条件:
% Make some (any) nu(u)
nu = @(u) u + u.^2;
% Set-up the differential equation for dudt
dudt = @(x,u) 3./x.*diff( sqrt(x) .* diff( nu(u).*u.*sqrt(x) ) );
% Create a chebop with that operator on [1,2]
N = chebop( dudt , [1,2] );
% Set some arbitrary boundary conditions
N.lbc = 1;
N.rbc = 1;
% Solve for some righ-hand side
u = N \ 1;
plot(u);
语法可能有点神秘,但是,我还是建议您看一下chebgui
,它具有更直观的语法并且更容易(也更有趣)玩。