Mathematica与数学[1]–偏微分方程数值解(PDE)

  • A+
所属分类:Wolfram语言与数学
摘要现在好像搜索使用matlab解偏微分方程的会比较多,那么我这里就写一篇使用mathematica来做pde的文章,希望大家能有收获。

 

这里我们介绍了使用Mathematica和Matlab来解偏微分方程数值解。我们会同时使用两个软件来做,我本人来说的话是更偏向与Mathematica的。下面开始教程。

 

 

知识点 -- 关于三类边界条件

 

  1. 第一类边界是给定边界上待求变量的分布

  2. 第二类边界是给定边界上待求变量的梯度值

  3. 第三类边界是待求变量与梯度值之间的函数关系

在数学物理方程与特殊函数中,对于定解问题求解中边界条件分为第一类,第二类,第三类边界条件。

例如,弦振动问题中,其端点(以x=a表示这个端点)所受的约束情况,通常有三种类型: 第一,固定端,即弦在振动过程中这个端点始终不动,对应于这种状态的边界条件为u(a,t)=0 第二,自由端,即弦在这个端点不受位移方向的外力,从而在这个端点在位移方向的张力为零,此时边界条件为 ux(a,t)=0 第三,弹性支承端,即弦在这个端点被某个弹性体所支承,设弹性支承原来的位置为u=0,则u|x=a就表示弹性支承的应变,由虎克(Hooke)定律可知,这时弦在x=a处沿位移方向的张力可得出(∂u/∂x+σu)|x=a=0

 

第一题

 

题目要求

 

 

matlab解决方法

  • 设置方程的边界条件

  • 设置要求解的方程

  • 查看解出的答案

 

 

mathematica解决方法

 

具体方法可以查看函数NeumannValue的帮助文档来进行了解。

 

(*首先给出边界区域*)
boundaries = Rectangle[{-1, -1}, {1, 1}];
RegionPlot[boundaries]
(*利用上面区域,利用DirichletCondition来规定第一类边界*)
sol = NDSolveValue[
{-(D[u[x, y], {x, 2}] + D[u[x, y], {y, 2}]) == -2 x^2 - 2 y^2 + 4,
DirichletCondition[u[x, -1] == 0, -1 < x < 1],
DirichletCondition[u[x, 1] == 0, -1 < x < 1],
DirichletCondition[u[1, y] == 0, -1 < y < 1],
DirichletCondition[u[-1, y] == 0, -1 < y < 1]
}, u, {x, y} \[Element] boundaries]
(*绘制解出的图像*)
Plot3D[sol[x, y], {x, y} \[Element] boundaries,
ColorFunction -> "SolarColors", PlotLegends -> Automatic]

 

将上面的三部分分别展示

 

  • 首先画出区域

 

 

  • 再求解方程

 

 

  • 画出图像

 

 

精确解的图像

Plot3D[(x^2 - 1) (y^2 - 1), {x, -1, 1}, {y, -1, 1}, BoxRatios -> {1, 1, 1}]

 

 


第二题

 

题目要求

 

 

matlab解决方法

 

  • 设置边界条件

 

 

  • 求解结果画图显示

 

 

mathematica解决方法

 

(*首先给出边界区域*)
boundaries =
ImplicitRegion[ {-3 <= x <= 3 && -3 <= y <= 3 && !x^2 + 4 y^2 < 4}, {x, y}];
RegionPlot[boundaries]
(*利用上面区域,利用DirichletCondition来规定第一类边界*)
sol = NDSolveValue[
{-(D[u[x, y], {x, 2}] + D[u[x, y], {y, 2}]) == -10,
u[-3, y] == 4*y^2 + 5,
u[3, y] == 4*y^2 + 5,
u[x, -3] == x^2 + 32,
u[x, 3] == x^2 + 32,
DirichletCondition[u[x, y] == 0, x^2 + 4*y^2 == 4] },
u, {x, y} \[Element] boundaries]
(*绘制解出的图像*)
Plot3D[sol[x, y], {x, y} \[Element] boundaries,
ColorFunction -> "SolarColors", PlotLegends -> Automatic]

 

将上面的三部分分别展示

 

  • 首先画出区域

 

 

  • 再求解方程

 

 

  • 画出图像

 

 

精确解的图像

Plot3D[
Piecewise[{{x^2 + 4*y^2 - 4, x^2 + 4 y^2 > 4}, {None, x^2 + 4 y^2 <= 4}}],
{x, -3, 3}, {y, -3, 3},
PlotRange -> {{-3, 3}, {-3, 3}, {0, 40}}, BoxRatios -> {1, 1, 1}]

 

参考链接

http://reference.wolfram.com/language/tutorial/NDSolvePDE.html.zh:偏微分方程的数值解

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: