Mathematica中用有限元方法解不规则区域上的波动方程

背景

通常数值解微分方程、微分方程组(常微分、偏微分方程),人们言必称“Matlab”,COMSOL,实际上,微分方程求解有两大强手被人忽视:(1)符号求解独孤求败:Maple; (2)数值求解Mathematica更为好用而且强大。

拿个例子来练习和学习偏微分方程求解solver的用法。这里先看看Mathematica的有限元方法数值求解“波动方程”类型的偏微分方程的初边值问题。

问题

学软件最方便的是看文档,大部分情况下,没有比软件自带文档更权威的教材了。我这个例子是从文档偷出来的。

偏微分方程

2u(x,y,t)t2=2u(x,y,t)x2+2u(x,y,t)y2(1)

求解所在的区间

求解该函数 u 所在的 xoy 平面上的区域为非普通矩形的不规则区域(差分法常用的矩形网格无法使用):

Mathematica中用有限元方法解不规则区域上的波动方程_第1张图片

初边值条件

未知函数 u(x,y,t) 二阶,而且有三个变量,经验判断初边值条件要有“四个”;左边界、右边界,0阶和一阶初值条件。

第一类边界条件,内边界和外边界上函数值都为0,

u(x,y,t)|(x,y)=0(2)

用代码表示为:

DirichletCondition[u[x,y,t]==0,True]

这个实际包含了内部的圆和外部的圆两个边界条件,“一个顶两个”;

一阶和0阶初始条件:

u(x,y,0)=e5((x0.2)2+y2)(3)

u(x,y,0t)t|t=0=0(4)

求解利用FEM包载入即可。

波动方程解一个周期的可视化

Mathematica中用有限元方法解不规则区域上的波动方程_第2张图片

求解的方法和代码还可以参考这里

跟COMSOL的对比

COMSOL是Matlab中pdetool相关代码至少早期版本的实际开发者。所以,使用Matlab的pdetool的图形用户界面时,会发现跟COMSOL中“数学形式的PDE”的Physics部分的界面非常类似、简直就是雷同。

不过我用COMSOL求解同一问题,发现效果很不理想,难道因为我是新手,COMSOL就特别歧视我吗?

我开始怀疑COMSOL计算的精度是不是总是这么低,总能导致一些因为误差而产生的虚假的波动?
Mathematica中用有限元方法解不规则区域上的波动方程_第3张图片

你可能感兴趣的:(Mathematica,偏微分方程)