用matlab编程实现一维扩散方程的有限差分法
1 一维扩散方程的有限差分法
——计算物理实验作业七
陈万 物理学2013级 130********
● 题目:
编程求解一维扩散方程的解
⎪⎪⎪⎪⎩
⎪⎪⎪⎪⎨⎧==∂∂+==∂∂+=≤≤≤≤∂∂=∂∂=)()0(|),()0,0(02221110max 022a x c n u b u a x c n u b u a e t x u t t a x x u D t
u x
t 取1.0,1.0,1.0,10,0.1,0,1,1,0,1,1max 0222111======-=====τh D t a c b a c b a 。输出t=1,2,...,10时刻的x 和u(x),并与解析解u=exp(x+0.1t)作比较。 ● 主程序:
% 一维扩散方程的有限差分法
clear,clc;
%定义初始常量
a1 = 1; b1 = 1; c1 = 0; a2 = 1;b2 = -1; c2 = 0;
a0 = 1.0; t_max = 10; D = 0.1; h = 0.1; tao = 0.1;
%调用扩散方程子函数求解
u = diffuse_equation(a0,t_max,h,tao,D,a1,b1,c1,a2,b2,c2);
● 子程序1:
function output = diffuse_equation(a0,t_max,h,tao,D,a1,b1,c1,a2,b2,c2) % 一维扩散方程的有限差分法,采用隐式六点差分格式(Crank-Nicolson) % a0: x 的最大值
% t:_max: t 的最大值
% h: 空间步长
% tao: 时间步长
% D :扩散系数
% a1,b1,c1是(x=0)边界条件的系数;a2,b2,c2是(x=a0)边界条件的系数
x = 0:h:a0;