利用中心差分格式求解一阶波动方程(附Matlab代码)

利用中心差分格式求解一阶波动方程(附Matlab代码)

∂ 2 u ∂ t 2 − ∂ 2 u ∂ x 2 = 0 , 0 < x < 1 , t > 0 , \frac{\partial^2u}{\partial t^2}-\frac{\partial^2u}{\partial x^2}=0,0<x<1,t>0, t22ux22u=0,0<x<1,t>0,
初始边值条件为:
u ( 0 , x ) = 2 s i n ( π x ) , u\left(0,x\right)=2sin\left(\pi x\right), u(0,x)=2sin(πx),
u t ( 0 , x ) = 0 , 0 < x < 1 , u_t\left(0,x\right)=0,0<x<1, ut(0,x)=0,0<x<1,
u ( t , 0 ) = u ( t , 1 ) = 0 , t ≥ 0. u\left(t,0\right)=u\left(t,1\right)=0,t\geq0. u(t,0)=u(t,1)=0,t0.
精确解: u = s i n ( π ( x − t ) ) + s i n ( π ( x + t ) ) 。 u=sin\left(\pi\left(x-t\right)\right)+sin\left(\pi\left(x+t\right)\right)。 u=sin(π(xt))+sin(π(x+t))
(1) 取 τ \tau τ=0.05,h=0.1计算 t = 0.5,1.0,1.5,2.0 的解。
(2) 取 τ \tau τ=h=0.1,计算 t = 0.5,1.0,1.5,2.0 的解。

解:

(1)问题分析

Step 1:网格剖分

取时间步长 τ = T N \tau=\frac{T}{N} τ=NT和空间步长 h = l J h=\frac{l}{J} h=Jl,记矩形区域 G = 0 ≤ t ≤ T , 0 ≤ x ≤ l G = {0 \le t \le T, 0 \le x \le l} G=0tT,0xl。用两族平行直线把这个区域 G 分割成矩形网格。网格节点用坐标点来 ( t n , x j ) \left(t_n,x_j\right) (tn,xj)表示。 G h G_h Gh表示网格内点的集合。 Γ h = G / G h = G − G h \Gamma_h=G/G_h=G-G_h Γh=G/Gh=GGh表示界点的集合。用 u ( t n , x j ) u\left(t_n,x_j\right) u(tn,xj)表示真解, u j n u_j^n ujn表示在 ( t n , x j ) \left(t_n,x_j\right) (tn,xj)处的近似值。定义网比 r 2 = τ 2 h 2 r^2=\frac{\tau^2}{h^2} r2=h2τ2

Step 2:差分方程,中心差分格式

u j n + 1 − 2 u j n + u j n − 1 = r 2 ( u j + 1 n − 2 u j n + u j − 1 n ) u_j^{n+1}-2u_j^n+u_j^{n-1}=r^2\left(u_{j+1}^n-2u_j^n+u_{j-1}^n\right) ujn+12ujn+ujn1=r2(uj+1n2ujn+uj1n)
⇒ u j n + 1 = r 2 ( u j − 1 n + u j + 1 n ) + 2 ( 1 − r 2 ) u j n − u j n − 1                   ( 1 ) \Rightarrow u_j^{n+1}=r^2\left(u_{j-1}^n+u_{j+1}^n\right)+2\left(1-r^2\right)u_j^n-u_j^{n-1} \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (1) ujn+1=r2(uj1n+uj+1n)+2(1r2)ujnujn1                 (1)
由初值条件得: u j 0 = s i n ( π x j ) , u j 1 − u j − 1 2 τ = 0. u_j^0=sin\left(\pi x_j\right),\frac{u_j^1-u_j^{-1}}{2\tau}=0. uj0=sin(πxj),2τuj1uj1=0.
(1)式中令n=0, 得: u j 1 = r 2 ( u j − 1 0 + u j + 1 0 ) + 2 ( 1 − r 2 ) u j 0 − u j − 1 ,消去 u j − 1 u_j^1=r^2\left(u_{j-1}^0+u_{j+1}^0\right)+2\left(1-r^2\right)u_j^0-u_j^{-1},消去u_j^{-1} uj1=r2(uj10+uj+10)+2(1r2)uj0uj1,消去uj1,得:
u j 1 = r 2 ( s i n ( π x j − 1 ) + s i n ( π x j + 1 ) ) + ( 1 − r 2 ) s i n ( π x j ) . u_j^1=r^2\left(sin\left(\pi x_{j-1}\right)+sin\left(\pi x_{j+1}\right)\right)+\left(1-r^2\right)sin\left(\pi x_j\right). uj1=r2(sin(πxj1)+sin(πxj+1))+(1r2)sin(πxj).
  U n = ( u 1 n , u 2 n , ⋯   , u J − 1 n ) T , {\ U}^n=\left(u_1^n,u_2^n,\cdots,u_{J-1}^n\right)^T,  Un=(u1n,u2n,,uJ1n)T, A = [ 2 ( 1 − r 2 ) r 2 0 ⋯ 0 0 0 r 2 2 ( 1 − r 2 ) r 2 ⋯ 0 0 0 ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ 0 0 0 0 ⋯ r 2 2 ( 1 − r 2 ) r 2 0 0 0 ⋯ 0 r 2 2 ( 1 − r 2 ) ] A=\left[\begin{matrix}2\left(1-r^2\right)&r^2&0&\cdots&0&0&0\\r^2&2\left(1-r^2\right)&r^2&\cdots&0&0&0\\\cdots&\cdots&\cdots&\cdots&\cdots&\cdots&0\\0&0&0&\cdots&r^2&2\left(1-r^2\right)&r^2\\0&0&0&\cdots&0&r^2&2\left(1-r^2\right)\\\end{matrix}\right] A= 2(1r2)r200r22(1r2)000r20000r20002(1r2)r2000r22(1r2) 为一个 J − 1 × J − 1 J-1×J-1 J1×J1,的单位矩阵,特别地,   U 0 = ( 2 s i n ( π x 1 ) , 2 s i n ( π x 2 ) , ⋯   , 2 s i n ( π x J − 1 ) ) T ,   U 1 = ( u 1 1 , u 2 1 , ⋯   , u J − 1 1 ) T . {\ U}^0=\left(2sin\left(\pi x_1\right),2sin\left(\pi x_2\right),\cdots,2sin\left(\pi x_{J-1}\right)\right)^T,{\ U}^1=\left(u_1^1,u_2^1,\cdots,u_{J-1}^1\right)^T.  U0=(2sin(πx1),2sin(πx2),,2sin(πxJ1))T, U1=(u11,u21,,uJ11)T.

(2)上机程序

function [U1,E]=shuangqv(J,N)
x0=0;xJ=1;h=(xJ-x0)/J;x=[x0:h:xJ]';
t0=0;tN=2;tau=(tN-t0)/N;t=[t0:tau:tN]';
r=tau^2/h^2;
u(:,1)=2*sin(pi*x(2:J,1));
for j=1:J-1
    u(j,2)=r*(sin(pi*x(j))+sin(pi*x(j+2)))+(1-r)*2*sin(pi*x(j+1));
end
U(:,1)=[u(:,2);u(:,1)];
A=diag(ones(1,J-1))*(2-2*r)+(diag(ones(1,J-2),1)+diag(ones(1,J-2),-1))*r;
E=diag(ones(1,J-1));
B=[A,-E;E,zeros(J-1,J-1)];
for n=2:N+1
    U(:,n)=B*U(:,n-1);
end
U1=U(J:2*(J-1),:);
U1=[zeros(1,N+1);U1;zeros(1,N+1)];
for j=1:J+1
    for n=1:N+1
        V(j,n)=sin(pi*(x(j)-t(n)))+sin(pi*(x(j)+t(n)));
    end
end
E=max(max(abs(U1-V)));
end
 %调试
clear all;clc;close  all;
[U1,E1]=shuangqv(10,40);
[U2,E2]=shuangqv(10,20);

(3)问题结果

在这里插入图片描述( τ \tau τ=h=0.1时,解析解与数值解图像)
由图像可以看出,解析解与数值解的图像高度吻合。接着我们看一下两种情况下的最大误差:

最大误差
τ \tau τ=0.05,h=0.1 0.029747384249724
τ \tau τ=0.1,h=0.1 1.665334536937735e-15

( τ \tau τ=0.05,h=0.1时对应时间对应的数值解)
在这里插入图片描述
( τ \tau τ=0.1,h=0.1时对应时间对应的数值解)

猜你喜欢

转载自blog.csdn.net/Sophiayinqianbao/article/details/130296943
今日推荐