中心差分法を使用して 1 次波動方程式を解きます (Matlab コードを使用)

中心差分法を使用して 1 次波動方程式を解きます (Matlab コードを使用)

∂ 2 u ∂ t 2 − ∂ 2 u ∂ x 2 = 0 , 0 < x < 1 , t > 0 , \frac{\partial^2u}{\partial t^2}-\frac{\partial^2u} {\部分 x^2}=0,0<x<1,t>0,∂t _22×22=0 0<バツ<1 t>0
初期境界値条件は次のとおりです:
u ( 0 , x ) = 2 sin ( π x ) 、 u\left(0,x\right)=2sin\left(\pi x\right)、あなた( 0 ,× =2以内( π x ),
ut ( 0 , x ) = 0 , 0 < x < 1 , u_t\left(0,x\right)=0,0<x<1,あなた( 0 ,× =0 0<バツ<1
u ( t , 0 ) = u ( t , 1 ) = 0 、 t ≥ 0。 u\left(t,0\right)=u\left(t,1\right)=0,t\geq0。あなた( t 0 )=あなた( t 1 )=0 t0.
精解:u = sin ( π ( x − t ) ) + sin ( π ( x + t ) ) 。 u=sin\left(\pi\left(xt\right)\right)+sin\left( \pi\left(x+t\right)\right)。あなた=いる( p( ×+いる( p( ×+
(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) 問題分析

ステップ 1: メッシュ作成

時間ステップτ = TN \tau=\frac{T}{N} を計算します。t=NTおよび空間ステップ サイズh = l J h=\frac{l}{J}h=J、長方形領域に注意してくださいG = 0 ≤ t ≤ T , 0 ≤ x ≤ l G = {0 \let t \le T, 0 \le x \le l}G=0t0バツl平行な直線の 2 つのファミリーを使用して、この領域 G を長方形のグリッドに分割します。グリッド ノードは座標点(tn, xj) \left(t_n,x_j\right)( tバツjという意味です。G h G_hGグリッド内の点のセットを表します。Γ h = G / G h = G − G h \Gamma_h=G/G_h=G-G_hC=G / G=GG境界点のセットを表します。u (tn, xj) u\left(t_n,x_j\right) を使用します。あなた( tバツj)真の解を表します、ujn u_j^nあなたj(tn, xj) \left(t_n,x_j\right)で表されます。( tバツjはおおよその値です。ネットワーク比r 2 = τ 2 h 2 r^2=\frac{\tau^2}{h^2} をr2=h2t2

ステップ 2: 差分方程式、中心差分形式

ujn + 1 − 2 ujn + ujn − 1 = r 2 ( uj + 1 n − 2 ujn + uj − 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)あなたjn + 12j+あなたjn 1=r2(あなたj + 12j+あなたj 1)
⇒ ujn + 1 = r 2 ( uj − 1 n + uj + 1 n ) + 2 ( 1 − r 2 ) ujn − ujn − 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)あなたjn + 1=r2(あなたj 1+あなたj + 1)+2( 1r2 )あなたjあなたjn 1                 ( 1 )
による初值实作得:uj 0 = sin ( π xj ) , uj 1 − uj − 1 2 τ = 0. u_j^0=sin\left(\pi x_j\right),\frac{u_j^ 1 -u_j^{-1}}{2\タウ}=0。あなたj0=いる( π xj)2平方メートルあなたj1j 1=0.
(1)式中令n=0、得られる:uj 1 = r 2 ( uj − 1 0 + uj + 1 0 ) + 2 ( 1 − r 2 ) uj 0 − uj − 1 、キャンセル uj − 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}あなたj1=r2(あなたj 10+あなたj + 10)+2( 1r2 )あなたj0あなたj 1,消去uj 1,得:
uj 1 = r 2 ( sin ( π xj − 1 ) + sin ( π xj + 1 ) ) + ( 1 − r 2 ) sin ( π xj ) 。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)。あなたj1=r2(ある( π xj 1)+いる( π xj + 1) )+( 1r2 )いる( π 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=(あなた1あなた2あなたJ 1)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{行列}\right]= 2( 1r2 )r200r22( 1r2 )000r20000r20002( 1r2 )r2000r22( 1r2 ) J − 1 × J − 1 J-1×J-1J1×J1の单位ベクトル阵、特に、   U 0 = ( 2 sin ( π x 1 ) , 2 sin ( π x 2 ) , ⋯ , 2 sin ( π 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=( 2以内( π x1)2以内( π x2)2以内( π xJ 1) )T U1=(あなた11あなた21あなたJ 11)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) 質問結果

ここに画像の説明を挿入します( τ \年τ =h=0.1 の場合、解析解と数値解の画像)
この画像から、解析解と数値解の画像は非常に一致していることがわかります。次に、2 つの場合の最大誤差を調べます。

最大誤差
τ \年τ =0.05、h=0.1 0.029747384249724
τ \年τ =0.1、h=0.1 1.665334536937735e-15

( τ \年τ =0.05、h=0.1の場合の対応する時間に対応する数値解
ここに画像の説明を挿入します
(τ \tauτ =0.1,h=0.1の場合の対応する時間に対応する数値解

おすすめ

転載: blog.csdn.net/Sophiayinqianbao/article/details/130296943
おすすめ