Matlab:求解你吨= f(你)你x x+克(你)你X+ h (你)你ut=f(u)uxx+g(u)ux+h(u)u

计算科学 pde matlab
2021-12-02 05:27:08

我正在尝试以数字方式求解以下方程:

ut=3xx(xx(ν(u,u2,,uk)ux))

以扩展形式表示,它是:

ut=3ν(u,u2,)uxx+(6νx(u,u2,)+3ν(u,u2,)2x)ux+(νx(u,u2,)(3+12x)+3ν(u,u2,)x)

在哪里u是一个函数u=u(t,x).  νa 是一个非线性函数u和另一个变量,但对于给定的u我可以得到它。

就稳定性、性能和准确性而言,解决此问题的最佳方法是什么?我在 MATLAB 中尝试线的方法,但我一直没有取得任何进展。

2个回答

如果您确定您的 PDE 姿势正确,那么我建议您执行以下操作:

  1. 首先尝试使用显式有限差分格式进行离散化。

  2. 如果您发现您得到不合理/不稳定的解决方案,请尝试使您的时间步长与您的空间步长相比非常小(几个数量级)。

  3. 如果这仍然不起作用,请尝试使用隐式有限差分方案。由于您的方程是非线性的,因此最好使用牛顿法求解。

  4. 如果所有其他方法都失败了,请检查您的问题是否恰当。您可能想尝试证明/反驳您的问题的解决方案存在并且对于您施加的初始/边界条件是唯一的。

在不知道你的情况下很难给出具体的建议ν(u,u2,)确实看起来,但是如果您在 Matlab 中,您可能想尝试Chebfun系统,该系统使用搭配谱方法和自动微分来求解线性和非线性 ODE,在某些情况下,还可以求解 PDE。

如果您安装 Chebfun,尝试您的示例的最快方法是启动chebguiODE 和 PDE 的图形用户界面,查看一些 PDE 示例并根据您自己的功能修改它们。

免责声明:我是 Chebfun 开发团队的一员 :)

更新

按照 Aron Ahmadia 的要求,我编写了一个小例子来展示如何计算u/t为了ν(u)=u+u2有边界条件u(1)=u(2)=1

% 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);

使用 Chebfun 生成的解决方案

语法可能有点神秘,但是,我还是建议您看一下chebgui,它具有更直观的语法并且更容易(也更有趣)玩。