从最简单的开始!一维扩散方程显式FTCS格式matlab代码实现实时画图

主要需要的专业知识:计算热物理matlab编程语言(研究生课程,还是需要一些基础知识的)

举个栗子:

对于具有常扩散系数的一维扩散方程:

\frac{\partial C}{\partial t}=D\frac{\partial^{2} C}{\partial t} ( t> 0,0<x<L)

其中D是常数,初始条件为:

C\mid _{t=0}=C_{0} \frac{x}{L}(0<x<L)

边界条件为:

C\mid _{x=0} =C\mid _{x=L} = \frac{C_{0}}{2} (t\geqslant 0)

按照X=x/L,T=Dt/L^{2},w=C/C_{0}将方程和定解条件无量纲化,并且在无量纲化条件下进行求解。

解:

无量纲化之后的结果为(我这里就默认大家都会无量纲化了哈):

\frac{\partial w }{\partial T}=\frac{\partial^2 w}{\partial X^2} (0\leqslant w\leqslant 1,0\leqslant X\leqslant 1)

其中w为无量纲化后的物理量,T为无量纲时间,X为无量纲化距离。

一维扩散示意图

(上面是cad画的图,背景其实应该换成白色的可能会更好看。。。)好啦,到这里算是处理完了理论部分。

下面进入编程阶段:

%%copyright...explict FTCS
 
 
clear;
clc;
tic;
n=0;
t=1000;
T=0.002;%T=0.001收敛%T=0.002发散
L=0.05;
e=1;

//固定坐标轴
axis([0,1,0,1]);
axix=0:0.05:1;
//物理量w的取值范围为0到1,题目要求起始和结束都为0.5
w=0:0.05:1;
w(1)=0.5;
w(length(w))=0.5;
w1=w;
//利用动态作图drawnow功能
h = plot(axix,w,'YDataSource','w');
photo = figure(1);
xlim([0 1]);ylim([0 1]);hold on;

//FTCS算法核心,挺简单的
for time=1:t
    while max(e)>0.0001
        n=n+1;
    for x=2:length(w)-1;
    w1(x)=w(x)+T/L/L.*(w(x+1)-2.*w(x)+w(x-1));
    end
    e=abs(w1-w)./w;
    w=w1;
   fprintf('caculation times=%d\n',n);
refreshdata(h, 'caller');
drawnow
pause(0.5)
     end
    break;
end
//tictoc显式运行时间
toc;

运行出来的图片如下:

 

分析:

  1. 稳定是要达到一定条件的,对于此题可以需要满足\alpha =\frac{\Delta T}{\Delta X^2},\alpha \leq \frac{1}{2}
  2. \Delta T=0.001\Delta T=0.001\Delta T=0.0020时不稳定,\Delta T=0.0010时数值模拟的结果是正确的,并且在0.112s时基本达到稳定状态。

 

 

 

 

 

  • 2
    点赞
  • 0
    评论
  • 15
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值