偏微分方程的数值解(五): 二维状态空间的偏微分方程的 MATLAB 解法

偏微分方程的数值解系列博文:

偏微分方程的数值解(一):定解问题 & 差分解法

偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法

偏微分方程的数值解(三): 化工应用实例 ----------触煤反应装置内温度及转换率的分布

偏微分方程的数值解(四): 化工应用————扩散系统之浓度分布

偏微分方程的数值解(五): 二维状态空间的偏微分方程的 MATLAB 解法

偏微分方程的数值解(六): 偏微分方程的 pdetool 解法


目录

1 方程类型

(i)椭圆型偏微分方程                                 (ii)抛物型偏微分方程          

(iii)双曲型偏微分方程                                (iv)特征值问题

(v)非线性椭圆偏微分方程                         (vi)方程组

2 边界条件

(i)Dirichlet 条件:​                     (ii)Neumann 条件: ​      

(iii)对于偏微分方程组,混合边界条件为

3 求解偏微分方程

例 6 求解泊松方程                                                                 例7 考虑最小表面问题

例8 求解正方形区域上的热传导方程                                  例9 求解正方形区域上的波方程

例 10  求解泊松方程                                                           习题


MATLAB 中的偏微分方程(PDE)工具箱是用有限元法寻求典型偏微分方程的数 值近似解,该工具箱求解偏微分方程具体步骤与用有限元方法求解偏微分方程的过程是 一致的,包括几个步骤,即几何描述、边界条件描述、偏微分方程类型选择、有限元划 分计算网格、初始化条件输入,最后给出偏微分方程的数值解(包括画图)。 下面我们讨论的方程是定义在平面上的有界区域Ω 上,区域的边界记作∂Ω 。

1 方程类型

MATLAB 工具箱可以解决下列类型的偏微分方程:

(i)椭圆型偏微分方程

其中c, a, f 和未知的u 可以是Ω 上的复值函数。

(ii)抛物型偏微分方程

其中c,a, f ,d 可以依赖于时间t 。

(iii)双曲型偏微分方程

(iv)特征值问题

其中λ 是未知的特征值,d 是Ω 上的复值函数。

(v)非线性椭圆偏微分方程

其中c, a, f 可以是u 的函数。

(vi)方程组

2 边界条件

边界条件有如下三种:

(i)Dirichlet 条件:

(ii)Neumann 条件:

这里 \overrightarrow{n} 为区域的单位外法线,h,r, q, g 是定义在∂Ω 上的复值函数。

对于二维方程组情形,Dirichlet 边界条件为    

Neumann 边界条件为:

(iii)对于偏微分方程组,混合边界条件为

这里 μ 的计算是使得满足 Dirichlet 边界条件。

3 求解偏微分方程

例 6 求解泊松方程 

                      求解区域为单位圆盘,边界条件为在圆盘边界上u = 0。

解 它的精确解为

下面求它的数值解,编写程序如下:

%(1)问题定义
g='circleg'; %单位圆
b='circleb1'; %边界上为零条件
c=1;a=0;f=1;
%(2)产生初始的三角形网格
[p,e,t]=initmesh(g);
%(3)迭代直至得到误差允许范围内的合格解
error=[]; err=1;
while err > 0.01,
[p,e,t]=refinemesh(g,p,e,t);
u=assempde(b,p,e,t,c,a,f); %求得数值解
exact=(1-p(1,:).^2-p(2,:).^2)/4;
err=norm(u-exact',inf);
error=[error err];
end
%结果显示
subplot(2,2,1),pdemesh(p,e,t);
subplot(2,2,2),pdesurf(p,t,u)
subplot(2,2,3),pdesurf(p,t,u-exact')

例7 考虑最小表面问题

g='circleg';
b='circleb2';
c='1./sqrt(1+ux.^2+uy.^2)';
rtol=1e-3;
[p,e,t]=initmesh(g);
[p,e,t]=refinemesh(g,p,e,t);
u=pdenonlin(b,p,e,t,c,0,0,'Tol',rtol);
pdesurf(p,t,u) 

例8 求解正方形区域上的热传导方程

求解正方形区域{(x, y) | −1 ≤ x, y ≤ 1}上的热传导方程

边界条件为Dirichlet条件u = 0。

解 这里是抛物型方程,其中c = 1, a = 0, f = 0, d = 1。编写程序如下:

%(1)问题定义
g='squareg'; %定义正方形区域
b='squareb1'; %边界上为零条件
c=1;a=0;f=0;d=1;
%(2)产生初始的三角形网格
[p,e,t]=initmesh(g);
%(3)定义初始条件
u0=zeros(size(p,2),1);
ix=find(sqrt(p(1,:).^2+p(2,:).^2)<0.4);
u0(ix)=1
%(4)在时间段为0到0.1的20个点上求解
nframe=20;
tlist=linspace(0,0.1,nframe);
u1=parabolic(u0,tlist,b,p,e,t,c,a,f,d);
%(5)动画图示结果
for j=1:nframe
 pdesurf(p,t,u1(:,j));
 mv(j)=getframe;
end
movie(mv,10) 

例9 求解正方形区域上的波方程

              求解正方形区域{(x, y) | −1 ≤ x, y ≤ 1}上的波方程

解 这里是双曲型方程,其中 c = 1, a = 0, f = 0, d = 1。编写程序如下:

%(1)问题定义
g='squareg'; %定义正方形区域
b='squareb3'; %定义边界
c=1;a=0;f=0;d=1;
%(2)产生初始的三角形网格
[p,e,t]=initmesh(g);
%(3)定义初始条件
x=p(1,:)';y=p(2,:)';
u0=atan(cos(pi*x));
ut0=3*sin(pi*x).*exp(cos(pi*y));
%(4)在时间段为0到5的31个点上求解
n=31;
tlist=linspace(0,5,n);
uu=hyperbolic(u0,ut0,tlist,b,p,e,t,c,a,f,d);
%(5)动画图示结果
for j=1:n
 pdesurf(p,t,uu(:,j));
 mv(j)=getframe;
end
movie(mv,10) 

例 10  求解泊松方程

求解区域为单位圆盘,边界条件为在圆盘边界上u = 0。

解 它的精确解为

下面求它的数值解,编写程序如下:

g='circleg';
b='circleb1';
c=1;a=0;f='circlef';
[p,e,t]=initmesh(g);
[p,e,t]=refinemesh(g,p,e,t);
u=assempde(b,p,e,t,c,a,f);
exact=-1/(2*pi)*log(sqrt(p(1,:).^2+p(2,:).^2));
subplot(2,2,1),pdemesh(p,e,t);
subplot(2,2,2),pdesurf(p,t,u)
subplot(2,2,3),pdesurf(p,t,u-exact') 

习题

1. 求二维拉普拉斯方程

2. 求初边值问题

在0 ≤ t ≤ 3范围内的数值解。

3. 求热传导方程初边值问题


偏微分方程的数值解系列博文:

偏微分方程的数值解(一):定解问题 & 差分解法

偏微分方程的数值解(二): 一维状态空间的偏微分方程的 MATLAB 解法

偏微分方程的数值解(三): 化工应用实例 ----------触煤反应装置内温度及转换率的分布

偏微分方程的数值解(四): 化工应用————扩散系统之浓度分布

偏微分方程的数值解(五): 二维状态空间的偏微分方程的 MATLAB 解法

偏微分方程的数值解(六): 偏微分方程的 pdetool 解法

  • 23
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
偏微分方程数值解法Matlab源码可以包含以下几个步骤: 1. 网格生成:首先需要生成一个合适的网格来表示空间域。使用函数`meshgrid`可以生成一个二维网格。例如,可以使用下面的语句生成一个大小为`N`的网格: ```matlab [x, y] = meshgrid(linspace(0, 1, N), linspace(0, 1, N)); ``` 2. 边界条件的初始化:根据问题的边界条件,需要初始化网格边界上的数值。例如,可以使用如下语句初始化边界条件: ```matlab u = zeros(N, N); u(:, 1) = g1(x(:, 1), y(:, 1)); u(:, N) = g2(x(:, N), y(:, N)); u(1, :) = g3(x(1, :), y(1, :)); u(N, :) = g4(x(N, :), y(N, :)); ``` 其中`g1`、`g2`、`g3`和`g4`是边界条件的函数。这些函数会根据输入的坐标生成相应的边界条件数值。 3. 算法迭代:根据所选择的偏微分方程数值方法进行迭代计算。这里以有限差分法为例,计算过程中需要使用迭代步长`dt`和空间步长`dx`。例如,可以使用以下语句进行迭代计算: ```matlab for i = 2:N-1 for j = 2:N-1 u(i, j) = u(i, j) + dt/(dx^2) * (u(i+1, j) + u(i-1, j) + u(i, j+1) + u(i, j-1) - 4*u(i, j)); end end ``` 这个嵌套循环会对内部网格点进行更新,其中的迭代公式根据数值解法不同而有所差异。 4. 结果可视化:最后,使用Matlab的绘图功能将计算结果可视化。例如,可以使用下面的语句绘制计算得到的的三维图形: ```matlab surf(x, y, u); ``` 或者使用以下语句绘制等高线图: ```matlab contourf(x, y, u); ``` 这些语句会根据给定的网格和计算结果绘制相应的图形。 以上是一个简单的演示偏微分方程数值解法Matlab源码。实际上,根据具体的偏微分方程数值解法不同,源码会有所差异。因此,这只是一个基本的框架,具体实现需要根据问题而定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值