双曲型方程最简差分格式

系列文章目录

1.二阶椭圆型方程的五点差分格式-MATLAB实现
2.抛物线型方程的向前差分格式
3.双曲型方程最简差分格式



前言

本文主要介绍求解抛物型方程的最简差分格式(explicit format),包括其理论基础及相应的MATLAB代码实现。


一、问题介绍

本文主要介绍如下双曲型方程的最简差分格式以及其数值解的求解:
∂ 2 u ∂ t 2 − a ∂ 2 u ∂ x 2 = 0 , ( x , t ) ∈ Ω , Ω = { ( x , t ) , 0 < x < 1 , 0 < t < 1 ) } \frac{\partial^2u}{\partial t^2}-a\frac{\partial ^2u}{\partial x^2}=0,(x,t)\in\Omega,\Omega=\begin{Bmatrix} {(x,t),0<x<1,0<t<1)} \end{Bmatrix} t22uax22u=0,(x,t)Ω,Ω={(x,t),0<x<1,0<t<1)}
相应的初边值条件为:
{ u ( x , 0 ) = φ ( x ) , ∂ ∂ t u ( x , 0 ) = ψ ( x ) , 0 ⩽ x ⩽ 1 u ( 0 , t ) = a ( t ) , u ( 1 , t ) = β ( t ) , 0 ⩽ t ⩽ 1 \left\{\begin{matrix} u(x,0)=\varphi (x),\frac{\partial }{\partial t}u(x,0)=\psi (x),0\leqslant x\leqslant 1& \\ u(0,t)=a(t),u(1,t)=\beta(t),0\leqslant t\leqslant 1& \end{matrix}\right. {u(x,0)=φ(x),tu(x,0)=ψ(x),0x1u(0,t)=a(t),u(1,t)=β(t),0t1

二、最简差分格式

1.网格剖分

对区域 Ω \Omega Ω进行矩形网格剖分:用平行直线族 x = j h ( j = 0 , 1 , 2 , … , M ) , y = k t ( k = 0 , 1 , 2 , … , N ) x=jh(j=0,1,2,…,M),y=kt(k=0,1,2,…,N) x=jh(j=0,1,2,,M),y=kt(k=0,1,2,,N)对区域 Ω \Omega Ω作矩形网格剖分,网点 ( x j , t k ) 简记为 ( j , k ) (x_{j},t_{k})简记为(j,k) (xj,tk)简记为(j,k),其中 t 和 h t和h th为正常数,分别成为时间步长和空间步长,且 h = 1 M , t = 1 N h=\frac{1}{M},t=\frac{1}{N} h=M1,t=N1

2.差商代替导数

将上述方程利用的二阶偏导数,用二阶中心差商去代替,可以得到如下的最简差分格式:
u j k + 1 = r 2 ( u j − 1 k + u j + 1 k ) + 2 ( 1 − r 2 ) u j k − u j k − 1 u_{j}^{k+1}=r^2(u_{j-1}^k+u_{j+1}^{k})+2(1-r^2)u_{j}^{k}-u_{j}^{k-1} ujk+1=r2(uj1k+uj+1k)+2(1r2)ujkujk1

3.初值条件的处理

对于上述给出的初值条件: { u ( x , 0 ) = φ ( x ) ∂ ∂ t u ( x , 0 ) = ψ ( x ) \left\{\begin{matrix} u(x,0)=\varphi (x) & \\ \frac{\partial }{\partial t}u(x,0)=\psi (x)& \end{matrix}\right. {u(x,0)=φ(x)tu(x,0)=ψ(x)
我们将其进行如下处理:
{ u j 0 = φ j u j 1 = r 2 2 [ φ j − 1 + φ j + 1 ] + ( 1 − r 2 ) φ j + t ψ j \left\{\begin{matrix} u_{j}^{0}=\varphi _j & \\ u_{j}^1=\frac{r^2}{2}[\varphi_{j-1}+\varphi_{j+1}]+(1-r^2)\varphi_{j}+t\psi _{j}& \end{matrix}\right. {uj0=φjuj1=2r2[φj1+φj+1]+(1r2)φj+tψj

4.稳定性及收敛性

最简差分格式稳定的充要条件是 r < 1 r<1 r<1,Courant条件为 r ⩽ 1 r\leqslant1 r1,局部截断的的收敛阶为 R j k = O ( h 2 + t 2 ) R_{j}^{k}=O(h^2+t^2) Rjk=O(h2+t2)

三.实例及MATLAB代码

例题:
∂ 2 u ∂ t 2 − ∂ 2 u ∂ x 2 = 0 , ( x , t ) ∈ Ω , Ω = { ( x , t ) , 0 < x < 1 , 0 < t < 1 ) } \frac{\partial^2u}{\partial t^2}-\frac{\partial ^2u}{\partial x^2}=0,(x,t)\in\Omega,\Omega=\begin{Bmatrix} {(x,t),0<x<1,0<t<1)} \end{Bmatrix} t22ux22u=0,(x,t)Ω,Ω={(x,t),0<x<1,0<t<1)}
相应的初边值条件为:
{ u ( x , 0 ) = s i n ( π x ) , ∂ ∂ t u ( x , 0 ) = 0 , 0 ⩽ x ⩽ 1 u ( 0 , t ) = u ( 1 , t ) = 0 , 0 ⩽ t ⩽ 1 \left\{\begin{matrix} u(x,0)=sin(\pi x),\frac{\partial }{\partial t}u(x,0)=0,0\leqslant x\leqslant 1& \\ u(0,t)=u(1,t)=0,0\leqslant t\leqslant 1& \end{matrix}\right. {u(x,0)=sin(πx),tu(x,0)=0,0x1u(0,t)=u(1,t)=0,0t1
对于此问题的数值解的求解方法,本文用MATLAB实现如下:

function [Uh,e]=format(M,N,a,b,c,d,k,c1,c2)
%向前差分格式
%M,N分别为x轴和t轴方向的剖分份数
%对应的区域为[a,b]×[c,d]
%k为方程中对应的常数a
%c1,c2为对应的边值条件
%Uh为数值解,e为误差,r为网比,uh为精确解
%步长
h=(b-a)/M; 
t=(d-c)/N;
r=sqrt(k)*t/h;%网比
if r>=1
     error("网比大于1不稳定")
end
Uh=zeros(N+1,M+1);%数值解
uh=zeros(N+1,M+1);%精确解
%计算精确解uh
for i=1:N+1
    for j=1:M+1
        uh(i,j)=cos(pi*(i-1)*t)*sin(pi*(j-1)*h);%问题一
    end 
end
%赋边界条件
Uh(2:N+1,1)=c1;
Uh(2:N+1,M+1)=c2;
%赋初始条件
Uh(1,1:M+1)=fg1(a:h:b);
Uh(2,1:M+1)=fg2(a:h:b,r,h,t);
%计算内点上的数值解Uh
for i=3:N+1
    for j=2:M
        Uh(i,j)=(r^2)*(Uh(i-1,j-1)+Uh(i-1,j+1))+2*(1-r^2)*Uh(i-1,j)-Uh(i-2,j);
    end
end
e=norm(Uh-uh);%误差

初值计算函数:

function y=fg1(x)%初值条件的处理
 y=sin(pi*x);%问题一
end
function y=fg2(x,r,h,t)%初值条件的处理
y=((r^2)/2)*(sin((x-h)*pi)+sin((x+h)*pi))+(1-r^2)*sin(x*pi);%问题一
end

对于数值解的图像绘制可以使用如下代码:

x=a:h:b;
y=c:t:d;
[X,Y]=meshgrid(x,y);
surf(X,Y,Uh);

由于本人水平有限,如有错误敬请批评指正!

You can also refer to my know-it-all blog链接: link

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LWJANDYS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值