这里我们介绍了使用 Mathematica 和 Matlab 来解偏微分方程数值解。我们会同时使用两个软件来做,我本人来说的话是更偏向与 Mathematica 的。下面开始教程。
知识点 -- 关于三类边界条件
- 第一类边界是给定边界上待求变量的分布;
- 第二类边界是给定边界上待求变量的梯度值;
- 第三类边界是待求变量与梯度值之间的函数关系;
在数学物理方程与特殊函数中,对于定解问题求解中边界条件分为第一类,第二类,第三类边界条件。
例如,弦振动问题中,其端点(以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}]
参考链接
- 微信公众号
- 关注微信公众号
-
- QQ群
- 我们的QQ群号
-












评论