数学建模社区-数学中国
标题:
偏微分方程的数值解(六): 偏微分方程的 pdetool 解法
[打印本页]
作者:
浅夏110
时间:
2020-6-10 10:34
标题:
偏微分方程的数值解(六): 偏微分方程的 pdetool 解法
1 图形界面解法简介
: \2 T4 g' B8 {6 c4 d6 ]; o/ k' v
对于一般的区域,任意边界条件的偏微分方程,我们可以利用 MATLAB 中 pdetool 提供的偏微分方程用户图形界面解法。 图形界面解法步骤大致上为:
+ e8 }- |4 B" W) u# V- z. e8 }4 a2 c
) L) v8 K9 d9 r- |
(1)定义 PDE 问题,包括二维空间范围,边界条件以及 PDE 系数等。
! R$ q/ o& S/ [; q+ {$ h+ h5 w
# [/ G' t) ]: e
(2)产生离散化之点,并将原 PDE 方程式离散化。
5 M# s8 e1 V! v
|# c; V/ d s; U
(3)利用有限元素法(finite element method;FEM)求解并显示答案。
; b8 T1 ^/ F' Q$ \- h0 S
|, [+ T1 F& j: Q
在说明此解法工具之前,先介绍此 PDE 图形界面的菜单下方的功能图标(icon)按 钮。
g B# |' Q" K; a) w: P9 X
* _& u( }5 A# i$ Z+ [
" ~& g: B# @1 m& i; b: a! h+ F: H) [
" d6 k X& A7 P' p
2 图形界面解法的使用步骤
+ G/ q6 G3 }; I( n) v% ]
要利用 pdetool 接口求解之前,需先定义 PDE 问题,其包含三大部份:
. r. U; I4 J1 F M$ I& ^
* y& i% [# X- [9 G$ z. g
(1)利用绘图(draw)模式,定义 需要求解的问题的空间范围(domain)Ω 。
/ t' x3 c$ W9 L' P
8 Q+ S+ E; ^5 R, L; G
(2)利用 boundary 模式,指定边界条件。
2 ]6 y6 G" n7 k+ e+ l: M
+ |% e" k0 K( \% [0 {
(3)利用 PDE 模式,指定 PDE 系数,即输入 c,a,f 和 d 等 PDE 模式中的系数。
+ L8 P7 w0 H- J( d
7 K0 G Q; Z+ l7 v
在定义 PDE 问题之后,可依以下两个步骤求解
, h, ^% o, B9 |; ~, y
: \7 J/ |' A0 m9 M, h4 N1 ]% c
(1)在 mesh 模式下,产生 mesh 点,以便将原问题离散化。
, S6 Q* n& ~% m- h
7 [: \& [3 q4 p, e4 ^0 Q
(2)在 solve 模式下,求解。
0 \! y1 ?: }9 ?4 O
" P" L, l$ h) }) s# N, X
(3)最后,在 Plot 模式下,显示答案。
: C$ O6 Q+ u( A) C
( f! I N7 {, Z6 g
- _6 [: j6 m; Q/ I$ C
9 l# Q! W9 @8 a, M% t/ K
% E. i! [$ ^2 C; W
0 Y5 q4 {) P5 e* ~, Q6 Q: m K
2 E/ h3 P/ E# F
9 M" D: C- }' _
+ {5 l- Q1 T- d/ z
% z2 g3 |: M5 i6 \
% e; G& E. k, s) n8 D( z @
注意:
; w L6 J- a5 w0 ~" z
7 r K' P, I: T4 L
1. MATLAB 会以图形的方式展示结果,使用者亦可点选 plot 下之“parameters”功 能,选择适当的方式显示图形及数据。例如用 3D 方式显示求解结果。参数设置见图 10, 显示结果见图 11。
0 b9 Q& d* W# g2 Y; R
& c( k- [3 K, D& r0 Q7 l
8 g u6 j: \7 M* v6 y' Q9 \& Q
+ n5 S2 |$ M' u* P+ S
2. 另外,若使用者欲将结果输出到命令窗口中,以供后续处理,可利用 solve 功能 项下之“export solution”指定变量名称来完成。
8 V0 h R0 N6 V* a8 F
1 V! f' g3 G# T/ X. G
3. 如果求抛物型或双曲型方程的数值解,还需要通过“solve”菜单下的 “parameters…”选项设置初值条件。
" v( N0 n- m: V, `% l7 ~* B
) |4 c) H/ `4 { @2 u/ @
4. 在上面定义边界条件和初始条件时,可以使用一些内置变量。
- _' O8 c$ {2 I" j# K
( U! f: `" c& _9 |9 d! Q6 T: `
(1)在边界条件输入框中,可以使用如下变量: 二维坐标 x 和 y,边界线段长度参数(s s 是以箭头的方向沿边界线段从 0 增加到 1), 外法向矢量的分量 nx 和 ny(如果需要边界的切线方向,可以通过 tx=-ny 和 ty=nx 表示), 解 u。
7 R. C3 Y5 e0 U
; @0 Q6 S% t8 w: i+ @
(2)在初值条件的输入框中,也可以输入用户定义的 MATLAB 可接受变量(p, e,t,x,y)的函数。
0 _: C: E/ ]5 \+ o. c4 Q" p: h
0 {$ }3 _2 U' ^/ G$ s7 E
例 11 使用 PDETOOL 重新求例 8 的数值解。
. f; ^- F9 z0 @- w+ O$ ~/ O' E# ?
U* w( b0 L' b( M* [
例8 求解正方形区域{(x, y) | −1 ≤ x, y ≤ 1}上的热传导方程
1 C' K5 P1 F: w6 `5 I
$ _+ ]; t2 c/ y6 r" i1 {4 L
# T/ h7 ^+ f/ I0 a
; [2 r [2 b0 L) e. I
边界条件为Dirichlet条件u = 0。
: X$ p9 |: B; p7 b! m9 j
) D. @ D g' v. h1 {
解 这里是抛物型方程,其中c = 1, a = 0, f = 0, d = 1。
' \) m+ {& ?5 q ~- k9 J
P% `2 Y3 D" H1 c
1)定义 PDE 问题,包括二维空间范围,边界条件以及 PDE 系数等。我们这里就 省略了。
+ H# X2 p. Y( T% o* R/ B( |9 ?2 }
& y9 W, C3 a! { Y# ]+ Y; T
2)区域剖分以后,通过“Mesh”菜单下的“Export Mesh…”选项可以把 p,e,t 三个参数分别输出到工作间。
0 H% Q3 U- e# c9 a* N' t6 [9 w
) k. x+ \ y: E$ L( ?
3)然后编写函数 fun1(x,y)如下:
3 o2 o% q1 }; M( u
4 ^+ T6 s Z" n; @( b
function f=fun1(x,y);
% d9 C, g8 I+ T8 B3 K' h/ {: ~; V
f=zeros(length(x),1);
: [; j% ?8 | U+ Q
ix=find(x.^2+y.^2<0.16);
% t+ i% d ]# E8 ?
f(ix)=1;
# o- Q( C* R R5 u! D: D+ p. W7 k
; o- g9 ?/ N7 l- Z6 @
其中的变量 x,y 是 MATLAB 可接受的内置变量。 设置“solve”菜单下的“parameters…”选项如下:
; w& B; I! N& V4 m5 @1 f7 z3 E3 R
6 }5 Y( g' ~; R
时间框中输入:linspace(0,0.1,20);
- C) t6 {- U- ]' k
) v7 v7 f7 z7 d4 a Y: I' F0 Q6 g3 X
初值框中输入:fun1。
8 A/ S1 R, m, k6 w
7 @. r* o, f4 d) V& ]4 I
4)设置“plot"菜单下的“parameters…”选项如下:选择 Height(3-D plot) 和 Animation 两项。
1 z, k2 p: h; j5 l6 W8 g# Y9 ~& ?( K/ @
2 j& H) y, ~1 a9 u* U2 ~
5)用鼠标点一下工具栏上的“=”按钮,就可以画出数值解的 3-D 图形。
! |8 d9 s4 P" X2 M
' C3 Y( F1 u. ?3 m O0 d/ |: L& o
& `! A& h% t% b: V9 u5 ]
————————————————
, ?, |: i2 B5 d: U, I5 L1 d
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
* [ J# R2 X' d1 j, J+ n
原文链接:https://blog.csdn.net/qq_29831163/article/details/89712663
@; e) N; d4 [
E& C5 i0 u4 j
% E" w1 g+ l5 ~; S: T$ ^0 U8 D, f
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5