一维非齐次热传导方程的紧致差分格式(附Matlab代码)

一维非齐次热传导方程的紧致差分格式(附Matlab代码)

考虑一维非齐次热传导方程 D i r i c h l e t Dirichlet Dirichlet初边值问题(第一类边界值问题):

{ ∂ u ∂ t = ∂ 2 u ∂ x 2 , 0 ≤ x ≤ 1 , 0 ≤ t ≤ 1 u ( x , 0 ) = e x , 0 ≤ x ≤ 1 u ( 0 , t ) = e t , u ( 1 , t ) = e 1 + t , , 0 ≤ t ≤ 1 \left\{ \begin{array}{lcl} \dfrac{\partial{u}}{\partial{t}}=\dfrac{\partial^{2}{u}}{\partial{x}^{2}} &,&0 \leq x \leq 1,0 \leq t \leq 1 \\ u(x,0)=e^x &, & 0 \leq x \leq 1 \\ u(0,t)=e^t,u(1,t)=e^{1+t},&, &0 \leq t \leq 1 \end{array} \right. tu=x22uu(x,0)=exu(0,t)=et,u(1,t)=e1+t,,,,0x1,0t10x10t1

该问题的精确解为 u ( x , t ) = e x + t u(x,t)=e^{x+t} u(x,t)=ex+t.

定义误差为 E ∞ ( h , τ ) = max ⁡ 1 ≤ i ≤ m − 1 1 ≤ k ≤ n ∣ u ( x i , t k ) − u k k ) ∣ E_{\infty}(h,\tau)=\max \limits_{1 \leq i \leq m-1 \atop 1 \leq k \leq n } |u(x_{i},t_{k})-u_{k}^k)| E(h,τ)=1kn1im1maxu(xi,tk)ukk)

针对以上定解问题建立一个具有 O ( τ 2 + h 4 ) O(\tau^2+h^4) O(τ2+h4)精度的无条件稳定的紧致差分格式,求上述问题的数值解并对数值解、精度和误差阶进行相应的数值分析.

建立差分格式

x x x进行 m m m等分,将 t t t进行 n n n等分, 记 h = 1 m , τ = 1 n h=\dfrac{1}{m},\tau=\dfrac{1}{n} h=m1,τ=n1.

x i = i h , 0 ≤ i ≤ m x_i=ih,0 \leq i \leq m xi=ih,0im

t k = k τ , 0 ≤ k ≤ n t_k=k \tau,0 \leq k \leq n tk=kτ,0kn

w = { w i ∣ 0 ⩽ i ⩽ m } ∈ V h . w=\left\{w_{i} \mid 0 \leqslant i \leqslant m\right\} \in V_{h}. w={wi0im}Vh. 定义算子
( A w ) i = { 1 12 ( w i − 1 + 10 w i + w i + 1 ) , 1 ⩽ i ⩽ m − 1 w i , i = 0 , m (\mathcal{A} w)_{i}=\left\{\begin{array}{ll} \frac{1}{12}\left(w_{i-1}+10 w_{i}+w_{i+1}\right), & 1 \leqslant i \leqslant m-1 \\ w_{i}, & i=0, m \end{array}\right. (Aw)i={121(wi1+10wi+wi+1),wi,1im1i=0,m
通过泰勒展式等一系列高端操作,得到如下差分格式
{ A δ t u i k + 1 2 − a δ x 2 u i k + 1 2 = A f ( x i , t k + 1 2 ) , 1 ⩽ i ⩽ m − 1 , 0 ⩽ k ⩽ n − 1 u i 0 = φ ( x i ) , 0 ⩽ i ⩽ m u 0 k = α ( t k ) , u m k = β ( t k ) , 1 ⩽ k ⩽ n \left\{ \begin{array}{l} \mathcal{A} \delta_{t} u_{i}^{k+\frac{1}{2}}-a \delta_{x}^{2} u_{i}^{k+\frac{1}{2}}=\mathcal{A} f\left(x_{i}, t_{k+\frac{1}{2}}\right), \quad 1 \leqslant i \leqslant m-1, \quad 0 \leqslant k \leqslant n-1 \\ u_{i}^{0}=\varphi\left(x_{i}\right), \quad 0 \leqslant i \leqslant m \\ u_{0}^{k}=\alpha\left(t_{k}\right), \quad u_{m}^{k}=\beta\left(t_{k}\right), \quad 1 \leqslant k \leqslant n \end{array} \right. Aδtuik+21aδx2uik+21=Af(xi,tk+21),1im1,0kn1ui0=φ(xi),0imu0k=α(tk),umk=β(tk),1kn

u k = ( u 0 k , u 1 k , ⋯   , u m − 1 k , u m k ) u^{k}=\left(u_{0}^{k}, u_{1}^{k}, \cdots, u_{m-1}^{k}, u_{m}^{k}\right) uk=(u0k,u1k,,um1k,umk)
由初值条件知第 0 层上的值 u 0 u^{0} u0 已知. 设已确定出了第 k k k 层的值 u k u^{k} uk. 则关于第 k + 1 k+1 k+1 层 值的差分格式为
A δ t u i k + 1 2 − a δ x 2 u i k + 1 2 = A f ( x i , t k + 1 2 ) , 1 ⩽ i ⩽ m − 1 u 0 k + 1 = α ( t k + 1 ) , u m k + 1 = β ( t k + 1 ) \begin{array}{l} \mathcal{A} \delta_{t} u_{i}^{k+\frac{1}{2}}-a \delta_{x}^{2} u_{i}^{k+\frac{1}{2}}=\mathcal{A} f\left(x_{i}, t_{k+\frac{1}{2}}\right), \quad 1 \leqslant i \leqslant m-1 \\ u_{0}^{k+1}=\alpha\left(t_{k+1}\right), \quad u_{m}^{k+1}=\beta\left(t_{k+1}\right) \end{array} Aδtuik+21aδx2uik+21=Af(xi,tk+21),1im1u0k+1=α(tk+1),umk+1=β(tk+1)
写成如下矩阵形式
( 5 6 + r 1 12 − 1 2 r 1 12 − 1 2 r 5 6 + r 1 12 − 1 2 r ⋱ ⋱ ⋱ 1 12 − 1 2 r 5 6 + r 1 12 − 1 2 r 1 12 − 1 2 r 5 6 + r ) ( u 1 k + 1 u 2 k + 1 ⋮ u m − 2 k + 1 u m − 1 k + 1 ) = ( 5 6 − r 1 12 + 1 2 r 1 12 + 1 2 r 5 6 − r 1 12 + 1 2 r ⋱ ⋱ ⋱ 1 12 + 1 2 r 5 6 − r 1 12 + 1 2 r 1 12 + 1 2 r 5 6 − r ) ( u 1 k u 2 k ⋮ u m − 2 k u m − 1 k ) + ( ( 1 12 + 1 2 r ) u 0 k − ( 1 12 − 1 2 r ) u 0 k + 1 + τ A f ( x 1 , t k + 1 2 ) τ A f ( x 2 , t k + 1 2 ) ⋮ ( 1 12 + 1 2 r ) u m k − ( 1 12 − 1 2 r ) u m k + 1 + τ A f ( x m − 1 , t k + 1 2 ) ) \begin{array}{l} \left(\begin{array}{ccccc} \frac{5}{6}+r & \frac{1}{12}-\frac{1}{2} r & & \\ \frac{1}{12}-\frac{1}{2} r & \frac{5}{6}+r & \frac{1}{12}-\frac{1}{2} r & & \\ & \ddots & \ddots & \ddots & \\ & & \frac{1}{12}-\frac{1}{2} r & \frac{5}{6}+r & \frac{1}{12}-\frac{1}{2} r \\ & & & \frac{1}{12}-\frac{1}{2} r & \frac{5}{6}+r \end{array}\right)\left(\begin{array}{c} u_{1}^{k+1} \\ u_{2}^{k+1} \\ \vdots \\ u_{m-2}^{k+1} \\ u_{m-1}^{k+1} \end{array}\right)\\ \\ =\left(\begin{array}{ccccc} \frac{5}{6}-r & \frac{1}{12}+\frac{1}{2} r & & & \\ \frac{1}{12}+\frac{1}{2} r & \frac{5}{6}-r & \frac{1}{12}+\frac{1}{2} r \\ & \ddots & \ddots & \ddots & \\ & & \frac{1}{12}+\frac{1}{2} r & \frac{5}{6}-r & \frac{1}{12}+\frac{1}{2} r \\ & & \frac{1}{12}+\frac{1}{2} r & \frac{5}{6}-r \end{array}\right)\left(\begin{array}{c} u_{1}^{k} \\ u_{2}^{k} \\ \vdots \\ u_{m-2}^{k} \\ u_{m-1}^{k} \end{array}\right)\\ \\ +\left(\begin{array}{c} \left(\frac{1}{12}+\frac{1}{2} r\right) u_{0}^{k}-\left(\frac{1}{12}-\frac{1}{2} r\right) u_{0}^{k+1}+\tau \mathcal{A} f\left(x_{1}, t_{k+\frac{1}{2}}\right) \\ \tau \mathcal{A} f\left(x_{2}, t_{k+\frac{1}{2}}\right) \\ \vdots \\ \left(\frac{1}{12}+\frac{1}{2} r\right) u_{m}^{k}-\left(\frac{1}{12}-\frac{1}{2} r\right) u_{m}^{k+1}+\tau \mathcal{A} f\left(x_{m-1}, t_{k+\frac{1}{2}}\right) \end{array}\right) \end{array} 65+r12121r12121r65+r12121r12121r65+r12121r12121r65+r u1k+1u2k+1um2k+1um1k+1 = 65r121+21r121+21r65r121+21r121+21r121+21r65r65r121+21r u1ku2kum2kum1k + (121+21r)u0k(12121r)u0k+1+τAf(x1,tk+21)τAf(x2,tk+21)(121+21r)umk(12121r)umk+1+τAf(xm1,tk+21)
其中, 1 ≤ i ≤ m − 1 ,   1 ≤ k ≤ n ,   γ = τ h 2 ,   f ( x i , t k ) = 0. 1 \leq i \leq m-1,\ 1 \leq k \leq n,\ \gamma=\dfrac{\tau}{h^2},\ f(x_i,t_k)=0. 1im1, 1kn, γ=h2τ, f(xi,tk)=0.

求解程序基于Matlab R2019b

主程序源代码

% 开发者: 图灵的猫
% 邮箱: turingscat@126.com
function [t,x,u] = fsolve(tau,h)
%   用紧致差分格式解求数值解
%   @t 时间向量
%   @x 空间向量
%   @tau 时间步长
%   @h 空间步长
%   @u 数值解
    N=1/tau;%t被分割的区间数
    M=1/h;%x被分割的区间数
    t=0:tau:1;
    x=0:h:1;
    u=ones(N+1,M+1);
    u(1,:)=exp(x);%初值
    %边值
    u(:,1)=exp(t);
    u(:,M+1)=exp(1+t);

    r=tau/h^2;%步长系数
    a1=ones(M-2,1)*(1/12-r/2);%下对角线
    b1=ones(M-1,1)*(5/6+r);%主对角线
    c1=ones(M-2,1)*(1/12-r/2);%上对角线
    A1=diag(b1,0)+diag(a1,-1)+diag(c1,1);%系数矩阵
    
    a2=ones(M-2,1)*(1/12+r/2);%下对角线
    b2=ones(M-1,1)*(5/6-r);%主对角线
    c2=ones(M-2,1)*(1/12+r/2);%上对角线
    A2=diag(b2,0)+diag(a2,-1)+diag(c2,1);%系数矩阵
%     for k=2:N+1
%         %右端项
%         f=A2*u(k-1,2:M)';
%         f(1)=f(1)+r/2*(u(k,1)+u(k-1,1));
%         f(M-1)=f(M-1)+r/2*(u(k,M+1)+u(k-1,M+1));
%         u(k,2:M)=(A1\f)';%由k-1层求第k层的值
%     end
    for k=2:N+1
        %右端项
        f=zeros(M-1,1);
        f(1)=(1/12+r/2)*u(k-1,1)-(1/12-r/2)*u(k,1);
        f(M-1)=(1/12+r/2)*u(k-1,M+1)-(1/12-r/2)*u(k,M+1);
        
        u(k,2:M)=(A1\(A2*u(k-1,2:M)'))'+(A1\f)';%由k-1层求第k层的值
    end
end

程序运行结果

τ = 1 10 , h = 1 100 \tau=\frac{1}{10},h=\frac{1}{100} τ=101,h=1001时,t=1处的数值解和精确解见下图,从图像上看很接近.

t=1处的数值解()和精确解

τ = 1 10 ,   h = 1 10 \tau=\frac{1}{10},\ h=\frac{1}{10} τ=101, h=101时,取 x = 0.5 x=0.5 x=0.5, 不同 t t t处的值见下表,
当层数越深时,误差越大,这是因为,每一次由 k k k层求解 k + 1 k+1 k+1层时都有误差,随着 t t t的增大,误差不断累积,越来越大,到t=1处误差变得最大.

x=0.5时,不同t处的数值解、精确解和误差

取不同 τ \tau τ h h h时,t=1处的误差曲线见下图,步长越小,误差也越小.

不同步长下的误差

分别用向后Euler格式和紧致差分格式,取不同步长时最大误差和最大误差的比值见下表.
可知,用向后Euler格式, τ \tau τ缩小为原来的 1 4 \frac{1}{4} 41 h h h缩小为原来的 1 2 \frac{1}{2} 21,误差会缩小为原来的 1 4 \frac{1}{4} 41,符合 O ( τ + h 2 ) O(\tau+h^2) O(τ+h2)的截断误差; 而紧致差分格式, τ \tau τ缩小为原来的 1 4 \frac{1}{4} 41 h h h缩小为原来的 1 2 \frac{1}{2} 21,误差会缩小为原来的 1 16 \frac{1}{16} 161,符合 O ( τ 2 + h 4 ) O(\tau^2+h^4) O(τ2+h4)的截断误差,精度高于向后Euler格式.
不同步长的最大误差和最大误差的比

若需要绘图及误差分析等代码部分,请在评论区留下邮箱.

若想深入了解紧致差分格式的构造理论,请加好友探讨,互相学习,共同进步!

数值算例来源: 《微分方程数值解》-M.Ran

  • 15
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 132
    评论
评论 132
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

图灵猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值