隐方程求解一维抛物型方程(热传导方程)

记录一下数值计算课大作业
$\delta
设时间t和空间x

离散:x i _{i} i=ih , t n _{n} n=n Δ \Delta Δ*t (i = 0,1,…I , n = 0,1,…)
设 U(x i _{i} i,t n _{n} n),在该点:
对t用向前差商: ∂ u ∂ t \frac{\partial u}{\partial t} tu ≈ \approx U i n + 1 − U i n Δ t \frac{U^{n+1}_i -U^{n}_i}{\Delta t} ΔtUin+1Uin
对用中心二阶差商: ∂ 2 u ∂ x 2 \frac{\partial^2 u}{\partial x^2} x22u ≈ \approx U i + 1 n − 2 U i n + U i − 1 n h 2 \frac{U^{n}_{i+1} -2U^{n}_i+U^n_{i-1}}{h^2} h2Ui+1n2Uin+Ui1n

代入上式,得到隐格式:
U i n + 1 − U i n Δ t \frac{U^{n+1}_i -U^{n}_i}{\Delta t} ΔtUin+1Uin – b* U i + 1 n − 2 U i n + U i − 1 n h 2 \frac{U^{n}_{i+1} -2U^{n}_i+U^n_{i-1}}{h^2} h2Ui+1n2Uin+Ui1n = 0

化简得:– b ∗ Δ t h 2 ∗ U i − 1 n + 1 + ( 1 + 2 b ∗ Δ t h 2 ) ∗ U i ( n + 1 ) − b ∗ Δ t h 2 ∗ U i − 1 n = U i n \frac{b*{\Delta t}}{h^2} *U^{n+1}_{i-1}+(1+\frac{2b*\Delta t}{h^2})*U^{(n+1)}_i-\frac{b*\Delta t}{h^2}*U^n_{i-1}=U^n_i h2bΔtUi1n+1+(1+h22bΔt)Ui(n+1)h2bΔtUi1n=Uin

写出当n=0.时i=0,1,…I的式子,利用初值和边值条件,可得系数矩阵:

A = [ 1 + 2 b ∗ Δ t h 2 − b ∗ Δ t h 2 − b ∗ Δ t h 2 1 + 2 b ∗ Δ t h 2 − b ∗ Δ t h 2 − b ∗ Δ t h 2 1 + 2 b ∗ Δ t h 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . − b ∗ Δ t h 2 1 + 2 b ∗ Δ t h 2 ] A= \begin{bmatrix} 1+\frac{2b*\Delta t}{h^2} & -\frac{b*\Delta t}{h^2} & \\ -\frac{b*\Delta t}{h^2} & 1+\frac{2b*\Delta t}{h^2} & -\frac{b*\Delta t}{h^2} \\ & -\frac{b*\Delta t}{h^2} & 1+\frac{2b*\Delta t}{h^2}\\ &... &... &...\\ &&...&...&...&\\ &&&&&\\ &&&...&...&...&\\ &&&&...&...&...&\\ &&&&&-\frac{b*\Delta t}{h^2}&1+\frac{2b*\Delta t}{h^2} \end{bmatrix} A=1+h22bΔth2bΔth2bΔt1+h22bΔth2bΔt...h2bΔt1+h22bΔt..............................h2bΔt...1+h22bΔt

AU=C,其中:
U = ( U 1 0 , U 2 0 , . . . U I − 1 1 ) =(U^0_1,U^0_2,...U^1_{I-1}) =(U10,U20,...UI11)
C = ( b ∗ Δ t h 2 ∗ U 0 1 + U 1 0 , U 2 0 , . . . U I − 2 0 + b ∗ Δ t h 2 ∗ U I − 1 0 ) =(\frac{b*\Delta t}{h^2}*U^1_0+U^0_1,U^0_2,...U^0_{I-2}+\frac{b*\Delta t}{h^2}*U^0_{I-1}) =(h2bΔtU01+U10,U20,...UI20+h2bΔtUI10)

可解出U,同理只需解出当n=1,2,…,时的U即可。
用matlab实现:

function sol = HeatExp2(h,maxt,deltat,a)  %a为方程中的系数b,可任取
I = 1/h; 
N = maxt/deltat;
sol = zeros(fix(I+1),fix(N+1));       
mu = a*deltat/h^2;
vetx = [0:h:1];       
veti = ones(I-1,1)    
vetii = ones(I-2,1)   
A=sparse(diag((1+2*mu)*veti,0)-diag(vetii*mu,1)-diag(vetii*mu,-1))
[L U]=lu(A)
for i=2:ceil((I+1)/2) 
    sol(i,1)=2*vetx(i);
    sol(I+2-i,1)=sol(i,1);
end
b = sol(2:I,1)        
for j=2:N             
    u=U\(L\b);        
    for i=2:I   
        sol(i,j)= u(i-1);      
    end
    b = u;
    %分别画出初始、中间和最末时刻的图:            
    if j==2           
        plot([0:h:1],sol(:,j),'c')
        axis([0 1 0 1]);
        xlabel('x');
        ylabel('u');
        hold on;
    elseif j==N/2
        plot([0:h:1],sol(:,j),'r')
        axis([0 1 0 1]);
        xlabel('x');
        ylabel('u');
        hold on;   
    elseif j==N
        plot([0:h:1],sol(:,j),'y')
        axis([0 1 0 1]);
        xlabel('x');
        ylabel('u');
        hold on;
    end
    legend('t=0.001s','t=0.05s','t=0.1s');
end

在命令行输入:
在这里插入图片描述
得到结果矩阵:
在这里插入图片描述

得到二维图像:

在这里插入图片描述
画出三维图像:

figure(2)
mesh([0:h:1],[0:deltat:maxt],sol)

在这里插入图片描述
计算结果是合理的,因为热量逐渐扩散,至端点处消失。

  • 11
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值