收藏 分销(赏)

一维扩散方程的有限差分法matlab.doc

上传人:天**** 文档编号:3109685 上传时间:2024-06-18 格式:DOC 页数:6 大小:78KB 下载积分:6 金币
下载 相关 举报
一维扩散方程的有限差分法matlab.doc_第1页
第1页 / 共6页
一维扩散方程的有限差分法matlab.doc_第2页
第2页 / 共6页


点击查看更多>>
资源描述
. 一维扩散方程的有限差分法 ——计算物理实验作业七 陈万 物理学2013级 13020011006 l 题目: 编程求解一维扩散方程的解 取。输出t=1,2,...,10时刻的x和u(x),并与解析解u=exp(x+0.1t)作比较。 l 主程序: % 一维扩散方程的有限差分法 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); l 子程序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; n = length(x); t = 0:tao:t_max; k = length(t); P = tao * D/h^2; P1 = 1/P + 1; P2 = 1/P - 1; u = zeros(k,n); %初始条件 u(1,:) = exp(x); %求A矩阵的对角元素d d = zeros(1,n); d(1,1) = b1*P1+h*a1; d(2:(n-1),1) = 2*P1; d(n,1) = b2*P1+h*a2; %求A矩阵的对角元素下面一行元素e e = -ones(1,n-1); e(1,n-1) = -b2; %求A矩阵的对角元素上面一行元素f f = -ones(1,n-1); f(1,1) = -b1; R = zeros(k,n);%求R %追赶法求解 for i = 2:k R(i,1) = (b1*P2-h*a1)*u(i-1,1)+b1*u(i-1,2)+2*h*c1; for j = 2:n-1 R(i,j) = u(i-1,j-1)+2*P2*u(i-1,j)+u(i-1,j+1); end R(i,n) = b2*u(i-1,n-1)+( b2*P2-h*a2)*u(i-1,n)+2*h*c2; M = chase(e,d,f,R(i,:)); u(i,:) = M'; plot(x,u(i,:)); axis([0 a0 0 t_max]); pause(0.1) end output = u; % 绘图比较解析解和有限差分解 [X,T] = meshgrid(x,t); Z = exp(X+0.1*T); surf(X,T,Z),xlabel('x'),ylabel('t'),zlabel('u'),title('解析解'); figure surf(X,T,u),xlabel('x'),ylabel('t'),zlabel('u'),title('有限差分解'); l 子程序2: function M = chase(a,b,c,f) % 追赶法求解三对角矩阵方程,Ax=f % a是对角线下边一行的元素 % b是对角线元素 % c是对角线上边一行的元素 % M是求得的结果,以列向量形式保存 n = length(b); beta = ones(1,n-1); y = ones(1,n); M = ones(n,1); for i = (n-1):(-1):1 a(i+1) = a(i); end % 将a矩阵和n对应 beta(1) = c(1)/b(1); for i = 2:(n-1) beta(i) = c(i)/( b(i)-a(i)*beta(i-1) ); end y(1) = f(1)/b(1); for i = 2:n y(i) = (f(i)-a(i)*y(i-1))/(b(i)-a(i)*beta(i-1)); end M(n) = y(n); for i = (n-1):(-1):1 M(i) = y(i)-beta(i)*M(i+1); end end l 结果: 对比分析两图,结果令人满意。 取出t_max时刻的u值分析:() 有限差分解如下: 2.718281828 3.004166024 3.320116923 3.669296668 4.055199967 4.481689070 4.953032424 5.473947392 6.049647464 6.685894442 7.389056099 解析解如下: 2.714520122 2.999510975 3.314422329 3.662395464 4.046901454 4.471775792 4.941256652 5.46002716 6.033262116 6.666679607 7.36659805 分析数据可知误差量级为=0.12+0.12=0.02 l 总结: (1) 隐式六点差分格式(Crank-Nicolson)基本思想是用前一时刻的三个点表示后一时刻的三个点。因为不是直接表示u(k+1,i),故称为隐式差分。 (2) x由等步长被分割为N个点,列出N个方程。采用追赶法求解得到结果。原理很简单,关键是求解AU=R中的A和R。 (3) 子函数2的功能是实现追赶法,该程序中没有直接用A来表示三对角矩阵,而是把3列对角元素直接拿出来,因此在调用时应当注意各对角元素的位置,避免调用错误。 6 / 6
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服