二维热导方程Matlab数值解案例

c6a0237bef61fa7f5fa2f6747c2db13b.png

过冷水之前有和大家分享一维热传导方程的有限差分法求解的具体实现过程。本次就和大家一起来看看如何根据一维热传导有限差分法的思想求解二维热传导方程进行求解。

形式如下的二维热传导方程:

c9b41cc2975adf698c52c7a59ce0bc76.png

边界条件是:

b0ee2e5b22bc566ef0b7096e8d4b1728.png

初值为:

add7242acfcc8bdffd09f155c5da10e1.png

差微分方法思路:

aa4cffbe145e929a36826a492757bf26.png

变形为迭代式如下:

274a973ef295016dbd05ab65edc37368.png

    根据该迭代过程就可求出任意时刻的温度T随空间的分布情况。现在回到我们之前和大家分享的二维微分方程的具体案例中看一下怎么解:

279042c9587082430d91b28cff936cb1.png

c3b699005d2d5bd59e278cc8bd3d74fd.jpeg

clear all
a=0.5;
u_xy0=inline('0','x','y');
u_xyt=inline('x^2*cos(pi*y)-y^2*cos(pi*x)','x','y','t');
f=inline('0','x','y','t');
D=[0,2*pi,0,2*pi];
T=500;
Mx=100;
My=100;
N=100;
ox=(D(2)-D(1))/Mx;
x=D(1)+[0:Mx]*ox;
oy=(D(4)-D(3))/My;
y=D(3)+[0:My]*oy;
ot=T/N;
t=[0:N]*ot;
%初始化 u
for j=1:Mx+1;
    for i=1:My+1;
        u(i,j)=u_xy0(x(j),y(i));
    end
end
rx=a*ot/(ox*ox);
ry=a*ot/(oy*oy);
rx1=1+2*rx;
rx2=1-2*rx;
ry1=1+2*ry;
ry2=1-2*ry;
for j=1:Mx-1;
    A(j,j)=ry1;
    if j>1
        A(j-1,j)=-ry;
        A(j,j-1)=-ry;
    end
end
%A为y方向隐式时的系数矩阵
for i=1:My-1;
    B(i,i)=rx1;
    if i>1;
        B(i-1,i)=-rx;
        B(i,i-1)=-rx;
    end
end
%B为x方向隐式时的系数矩阵
for k=1:N
    t=k*ot;u_1=u;
    %for m=1:Mx+1;


        %for n=1:My+1;
            %v(n,m)=feval(f,x(m),y(n),t);
        %end
    %end
    u_1=u;
    for i=1:My+1
        u(i,1)=feval(u_xyt,x(1),y(i),t);
        u(i,Mx+1)=feval(u_xyt,x(Mx+1),y(i),t);
    end
    for j=1:My+1;
        u(1,j)=feval(u_xyt,x(j),y(1),t);
        u(My+1,j)=feval(u_xyt,x(j),y(My+1),t);
    end
    if mod(k,2)==0;
        for i=2:My;
            jj=2:Mx;
            bx=[ry*u(i,1),zeros(1,Mx-3),ry*u(i,My+1)]+rx*(u_1(i-1,jj)+u_1(i+1,jj))+rx2*u_1(i,jj)+ot*u_1(i,jj);
            opts.UT = true; opts.TRANSA = true;
            u(i,jj)=linsolve(A,bx',opts)';
        end
    else
        for j=2:Mx
            ii=2:My;
            by=[rx*u(1,j);zeros(My-3,1);rx*u(Mx+1,j)]+ry*(u_1(ii,j-1)+u_1(ii,j-1))+ry2*u_1(ii,j)+ot*u_1(ii,j);
            opts.UT = true; opts.TRANSA = true;
            u(ii,j)=linsolve(B,by,opts);
        end
    end
end
mesh(x,y,u);
xlabel('x');
zlabel('温度T')

过冷水本期要和大家分享的二维热传导的问题就是这些了,热传导属于比较复杂的问题,物理模型不容易理解,解决了物理模型其实就是偏微分方程的求解问题,微分方程求解的方法有很多,Matlab爱好者后期会一直分享。

往期回顾>>>>>>

热导方程的Matlab数值解方法

从泰勒级数说傅里叶级数

你所不知道的Monte Carlo形式

数值计算——MATLAB数值积分原理详讲

基于Hough变换原理实现图像直线检测【附源代码】

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值