【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现

合集下载

matlab有限差分法

matlab有限差分法

matlab有限差分法一、前言Matlab是一种广泛应用于科学计算和工程领域的计算机软件,它具有简单易学、功能强大、易于编程等优点。

有限差分法(Finite Difference Method)是一种常用的数值解法,它将微分方程转化为差分方程,通过对差分方程进行离散化求解,得到微分方程的数值解。

本文将介绍如何使用Matlab实现有限差分法。

二、有限差分法基础1. 有限差分法原理有限差分法是一种通过将微分方程转化为离散形式来求解微分方程的数值方法。

其基本思想是将求解区域进行网格划分,然后在每个网格点上进行逼近。

假设要求解一个二阶常微分方程:$$y''(x)=f(x,y(x),y'(x))$$则可以将其转化为离散形式:$$\frac{y_{i+1}-2y_i+y_{i-1}}{h^2}=f(x_i,y_i,y'_i)$$其中$h$为网格步长,$y_i$表示在$x_i$处的函数值。

2. 一维情况下的有限差分法对于一维情况下的常微分方程:$$\frac{d^2 y}{dx^2}=f(x,y,y')$$可以使用中心差分法进行离散化:$$\frac{y_{i+1}-2y_i+y_{i-1}}{h^2}=f(x_i,y_i,y'_i)$$这个方程可以写成矩阵形式:$$A\vec{y}=\vec{b}$$其中$A$为系数矩阵,$\vec{y}$为函数值向量,$\vec{b}$为右端项向量。

三、Matlab实现有限差分法1. 一维情况下的有限差分法假设要求解的方程为:$$\frac{d^2 y}{dx^2}=-\sin(x)$$首先需要确定求解区域和网格步长。

在本例中,我们将求解区域设为$[0,2\pi]$,网格步长$h=0.01$。

则可以通过以下代码生成网格:```matlabx = 0:0.01:2*pi;```接下来需要构造系数矩阵和右端项向量。

根据上面的公式,系数矩阵应该是一个三对角矩阵,可以通过以下代码生成:```matlabn = length(x)-2;A = spdiags([-ones(n,1), 2*ones(n,1), -ones(n,1)], [-1 0 1], n, n); ```其中`spdiags`函数用于生成一个稀疏矩阵。

matlab傅里叶谱方法求解热传导方程

matlab傅里叶谱方法求解热传导方程

文章标题:深度解析matlab傅里叶谱方法求解热传导方程在工程学和科学领域中,热传导方程是一个非常重要的偏微分方程,描述了物体内部温度分布随时间的变化。

而傅里叶谱方法是一种常用的数值求解方法,能够高效地对热传导方程进行求解。

本文将深入探讨matlab傅里叶谱方法在求解热传导方程中的应用,以及该方法在实际工程中的意义。

1. 热传导方程的基本概念热传导方程是描述物体内部温度分布随时间演化的方程。

一维情况下,热传导方程可以表示为:$$\frac{\partial u}{\partial t} = \alpha \frac{\partial^2 u}{\partialx^2}$$其中,$u(x,t)$是位置$x$和时间$t$的温度分布函数,$\alpha$是热扩散系数。

对于二维、三维情况,热传导方程的形式也可以相应拓展。

2. matlab傅里叶谱方法的基本原理傅里叶谱方法是一种基于傅里叶级数展开的数值求解方法。

它的基本思想是将热传导方程通过傅里叶变换转化为频域上的方程,再通过离散化的方式进行求解。

在matlab中,可以利用快速傅里叶变换(FFT)来高效地实现傅里叶谱方法。

该方法的优点是高精度、高效率,并且适用于多维情况。

3. matlab傅里叶谱方法的具体实现在matlab中,可以通过编写相应的程序来实现对热传导方程的求解。

首先需要将热传导方程进行离散化,得到一个离散的时间和空间网格。

然后利用傅里叶变换将热传导方程转化为频域上的方程,通过FFT算法高效地求解。

最后再利用逆傅里叶变换将频域上的解转化为时域的解。

通过这一系列步骤,就可以在matlab中实现对热传导方程的高效求解。

4. 实际工程中的应用与意义matlab傅里叶谱方法在实际工程中有着广泛的应用与意义。

例如在材料科学中,可以利用该方法对材料的热传导特性进行建模和仿真。

在电子工程领域,也可以利用该方法对电路元件的热特性进行分析和优化。

另外,在生物医学工程中,对人体组织的热传导特性进行研究也可以借助matlab傅里叶谱方法来实现。

有限差分 matlab

有限差分 matlab

有限差分 MATLAB简介有限差分方法(Finite Difference Method)是一种常用的数值计算方法,用于求解偏微分方程或者常微分方程的数值近似解。

MATLAB是一个功能强大的数值计算软件,可以很方便地实现有限差分方法。

本文将介绍有限差分方法在MATLAB中的应用。

首先,我们将简要介绍有限差分方法的原理和基本思想。

然后,我们将通过一个具体的例子来演示如何使用MATLAB进行有限差分计算。

最后,我们将总结本文内容,并提供一些相关资源供读者进一步深入学习。

有限差分方法原理有限差分方法是一种基于离散化思想的数值计算方法。

它通过将求解区域划分为网格点,并利用离散点上函数值之间的差商逼近导数来近似求解微分方程。

对于一维问题,我们可以将求解区域划分为等距离的网格点,记作x0, x1,x2, …, xn。

每个网格点上函数值记作u0, u1, u2, …, un。

我们希望通过已知边界条件和微分方程来求解其他未知函数值。

有限差分法的基本思想是使用差商逼近导数。

例如,对于一阶导数,我们可以使用前向差分、后向差分或者中心差分来逼近。

其中,前向差分定义为:f'(x) ≈ (f(x+h) - f(x)) / h后向差分定义为:f'(x) ≈ (f(x) - f(x-h)) / h中心差分定义为:f'(x) ≈ (f(x+h) - f(x-h)) / (2h)类似地,我们可以使用更高阶的有限差分来逼近更高阶的导数。

对于二维问题,我们可以将求解区域划分为二维网格点,并在每个网格点上计算函数值。

然后,我们可以使用类似的方法来逼近偏导数。

MATLAB实现在MATLAB中,我们可以很方便地使用矩阵运算和向量化操作来实现有限差分方法。

首先,我们需要定义求解区域和网格点。

假设我们要求解一个一维问题,在区间[0, 1]上进行离散化。

我们可以通过指定网格点个数n和步长h来确定网格点坐标:n = 100; % 网格点个数h = 1/n; % 步长x = linspace(0, 1, n+1); % 网格点坐标接下来,我们需要定义边界条件和微分方程。

热传导方程有限差分法的MATLAB实现

热传导方程有限差分法的MATLAB实现

△t
n
nn
关于
t
的二阶中心差商[10]:
坠2u 坠x2

uj+1
-2uj +uj-1 (△x)2
,对方
程进行离散。 离散后的方程为:
n n-1
n
nn
uj -uj △t
=a2
uj+1
-2uj +uj-1 (△x)2


:r=
a2·△t (△x)2
,即
n
n
n
n-1
(1+2r)uj -r·uj+1 -r·uj-1 =uj 。 可化为矩阵形式:
摘 要:对于有界热传导齐次方程的混合问题,用分离变量法求解往往很复杂。 为了更好地
理解热传导方程的解,使用 MATLAB 软件将方程的解用图像表示出来。 通过区域转换的思想,
利用 MATLAB 编程实现一定区域内热传导方程的有限差分方法,数值表明了方法的可行性和
稳定性。
关键词:热传导方程;有限差分;MATLAB
方法, 把控制方程中的导数用网格节点上的函数值
的差商代替进行离散,从而 建立以网格节点上的值
为未知数的代数方程组。
1 求解热传导方程的基本思想
基本思想是把连续的定解区域用有限个离散点
构成的网格来代替, 这些离散点称作网格的节点;
把连续定解区域上的连续变量的函数用在网格上定
义的离散变量函数来近似; 把原方程和定解条件中
x0(ii+1)=ii*ox; end u=sin(pi*x0/l); % t=0 时 u(x,t)的值 r=a^2*ot/(ox)^2; for ii=1:n
%数据的输入 B=zeros(M-1,1);%存放系数矩阵主对角线元素 A=zeros (M-2,1);%存放系数矩阵主对角线元素下 方次对角线的元素 C=zeros (M-2,1);%存放系数矩阵主对角线元素上 方次对角线的元素 S=zeros(M-1,1);%存放右端的常数项 for ii=1:M-2

【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现

【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现

第1章前言1.1问题背景在史策教授的《一维热传导方程有限差分法的MATLAB实现》和曹刚教授的《一维偏微分方程的基本解》中,对偏微分方程的解得MATLAB实现问题进行过研究,但只停留在一维中,而实际中二维和三维的应用更加广泛。

诸如粒子扩散或神经细胞的动作电位。

也可以作为某些金融现象的模型,诸如布莱克-斯科尔斯模型与Ornstein-uhlenbeck过程。

热方程及其非线性的推广形式也被应用与影响分析。

在科学和技术发展过程中,科学的理论和科学的实验一直是两种重要的科学方法和手段。

虽然这两种科学方法都有十分重要的作用,但是一些研究对象往往由于他们的特性(例如太大或太小,太快或太慢)不能精确的用理论描述或用实验手段来实现。

自从计算机出现和发展以来,模拟那些不容易观察到的现象,得到实际应用所需要的数值结果,解释各种现象的规律和基本性质。

科学计算在各门自然科学和技术科学与工程科学中其越来越大的作用,在很多重要领域中成为不可缺少的重要工具。

而科学与工程计算中最重要的内容就是求解科学研究和工程技术中出现的各种各样的偏微分方程或方程组。

解偏微分方程已经成为科学与工程计算的核心内容,包括一些大型的计算和很多已经成为常规的计算。

为什么它在当代能发挥这样大的作用呢?第一是计算机本身有了很大的发展;第二是数值求解方程的计算法有了很大的发展,这两者对人们计算能力的发展都是十分重要的。

1.2问题现状近三十年来,解偏微分方程的理论和方法有了很大的发展,而且在各个学科技术的领域中应用也愈来愈广泛,在我国,偏微分方程数值解法作为一门课程,不但在计算数学专业,而且也在其他理工科专业的研究生的大学生中开设。

同时,求解热传导方程的数值算法也取得巨大进展,特别是有限差分法方面,此算法的特点是在内边界处设计不同于整体的格式,将全局的隐式计算化为局部的分段隐式计算。

而且精度上更好。

目前,在欧美各国MATLAB的使用十分普及。

在大学的数学、工程和科学系科,MATLAB苏佳园:二维热传导方程有限差分法的MATLAB实现被用作许多课程的辅助教学手段,MATLAB也成为大学生们必不可少的计算工具,甚至是一项必须掌握的基本技能。

利用matlab程序解决热传导问题-推荐下载

利用matlab程序解决热传导问题-推荐下载

1、题目及要求
1. 原始题目及要求 2. 各节点的离散化的代数方程 3. 源程序 4. 不同初值时的收敛快慢 5. 上下边界的热流量(λ=1W/(m℃)) 6. 计算结果的等温线图 7. 计算小结 题目:已知条件如下图所示:
二、各节点的离散化的代数方程
各温度节点的代数方程
ta=(300+b+e)/4 ; tb=(200+a+c+f)/4; tc=(200+b+d+g)/4; td=(2*c+200+h)/4 te=(100+a+f+i)/4; tf=(b+e+g+j)/4; tg=(c+f+h+k)/4 ; th=(2*g+d+l)/4 ti=(100+e+m+j)/4; tj=(f+i+k+n)/4; tk=(g+j+l+o)/4; tl=(2*k+h+q)/4
0,0,-2,4,0,0,0,-1,0,0,0,0,0,0,0,0; -1,0,0,0,4,-1,0,0,-1,0,0,0,0,0,0,0; 0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0,0; 0,0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0; 0,0,0,-1,0,0,-2,4,0,0,0,-1,0,0,0,0; 0,0,0,0,-1,0,-1,0,4,0,0,0,-1,0,0,0; 0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0,0; 0,0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0; 0,0,0,0,0,0,0,-1,0,0,-2,4,0,0,0,-1; 0,0,0,0,0,0,0,0,-2,0,0,0,24,-1,0,0; 0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1,0; 0,0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1; 0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,12]; b=[300,200,200,200,100,0,0,0,100,0,0,0,300,200,200,100]'; [x,n]=gauseidel(A,b,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]',1.0e-6) xx=1:1:4; yy=xx; [X,Y]=meshgrid(xx,yy); Z=reshape(x,4,4); Z=Z' contour(X,Y,Z,30) Z= 139.6088 150.3312 153.0517 153.5639

二维热传导方程 matlab

二维热传导方程 matlab

二维热传导方程是描述二维热传导过程的数学模型,它在工程、物理、地球科学等领域都有重要应用。

在实际工程问题中,我们经常需要求解二维热传导方程,以预测物体表面的温度分布、热量传递速率等参数。

Matlab是一个强大的数学软件,通过Matlab我们可以很方便地求解二维热传导方程,并得到预期的结果。

一、二维热传导方程的基本形式二维热传导方程可以用偏微分方程的形式表示为:∂u/∂t = k(∂²u/∂x² + ∂²u/∂y²)其中,u(x, y, t)是温度分布随时间和空间的变化,k是热传导系数。

二、Matlab中求解二维热传导方程的方法在Matlab中,我们可以采用有限差分法(finite difference method)求解二维热传导方程。

有限差分法将偏微分方程离散化,转化为代数方程组,然后通过迭代求解得到数值解。

具体步骤如下:1. 离散化空间和时间变量,将连续的空间区域和时间区间分割成若干个小区间。

2. 利用二阶中心差分格式对二维热传导方程进行离散化,得到代数方程组。

3. 利用Matlab中的矩阵运算和迭代方法,求解代数方程组,得到数值解。

三、Matlab代码示例下面是一个简单的Matlab代码示例,用于求解二维热传导方程:```matlab定义参数和初始条件Lx = 1; Ly = 1; 区域大小Nx = 100; Ny = 100; 离散化网格数T = 1; 总时间Nt = 100; 时间步数k = 1; 热传导系数dx = Lx/Nx; dy = Ly/Ny;dt = T/Nt;x = 0:dx:Lx; y = 0:dy:Ly;[X, Y] = meshgrid(x, y);u = sin(pi*X).*sin(pi*Y); 初始温度分布迭代求解for n = 1:Ntun = u;for i = 2:Nx-1for j = 2:Ny-1u(i, j) = un(i, j) + k*dt/dx^2*(un(i+1, j)-2*un(i, j)+un(i-1, j)) + k*dt/dy^2*(un(i, j+1)-2*un(i, j)+un(i, j-1));endendend可视化结果figure;surf(X, Y, u);xlabel('x'); ylabel('y'); zlabel('Temperature');```以上代码首先定义了区域大小、离散化网格数、总时间、热传导系数等参数,然后利用有限差分法进行迭代求解,最后利用Matlab绘制了温度分布的三维图像。

二维热传导方程有限容积法的MATLAB实现

二维热传导方程有限容积法的MATLAB实现
70 65 60
温度/(℃)
参数类型 无限大板厚度 L 厚度方向坐标 x 密度 ρ 比热 c 大板初始温度 Ti 流体温度 T f 热传导系数 λ 换热系数 h
N n
[8]
界类型定义不同源项 S, 并将其代入到方程组的迭代 求解中, 从而在数学物理模型上体现不同方式向物 理介质内的有限容积单元传递热量, 下面分三种情 况进行讨论: (1) 给定热流密度 q 边界条件 T 2 j - T1 j 热流密度 q = - λ , 边界温度系数 aW = δx w 又有源项 S u 2 j = q aW 2 j = 0 , 元温度: T1 j = q
基金项目: 国家自然科学基金 (No.10901067) ; 中央高校基本科研业务费专项资金 (No.2011-1a-023) 。 作者简介: 薛琼 ( 1980— ) , 女, 博士, 讲师, 主要研究领域为微分几何及其应用; 肖小峰 ( 1979— ) , 男, 讲师。E-mail: 18986258401@ 收稿日期: 2011-12-08 修回日期: 2012-01-30 CNKI 出版日期: 2012-05-21 DOI: 10.3778/j.issn.1002-8331.2012.24.044 /kcms/detail/11.2127.TP.20120521.1142.073.html
199
通过式 (1) 和式 (3) 推导出, 具体如下式:
ì ρ c ¶T = ¶ æ λ ¶T ö + S ï ¶τ ¶x è ¶x ø ï ¶T | | = h T - T ¶T | =0 ï ¶x | |x = 0 λ 1 f ¶x |x = 0.06 ï 0 ía P T P = a E T E + aW TW + S u Dx + a0 PT P ï 0 ïa P = a E + aW + a P - S P Dx ï 0 ρcDV λe λw ïa P = Dτ a E = δx aW = δx e w î

热传导方程有限差分法的MATLAB实现

热传导方程有限差分法的MATLAB实现

万方数据万方数据万方数据万方数据热传导方程有限差分法的MATLAB实现作者:史策作者单位:西安建筑科技大学,理学院,陕西,西安,710055刊名:咸阳师范学院学报英文刊名:JOURNAL OF XIANYANG NORMAL UNIVERSITY年,卷(期):2009,24(4)被引用次数:0次1.曹钢,王桂珍,任晓荣.一维热传导方程的基本解[J].山东轻工业学院学报,2005,19(4):76-80.2.万正苏,方春华,张再云.关于热传导方程有限差分区域分解并行算法精度的注记[J].湖南理工学院学报(自然科学版),2007,20(3):12-14.3.StephenJ.Chapman.MATLAB编程[M].邢树军,郑碧波,译.北京:科学出版社,2008.4.田兵.用MATLAB解偏微分方程[J].阴山学刊,2006,20(4):12-13.5.王飞,裴永祥.有限差分方法的MATLAB编程[J].新疆师范大学学报(自然科学版),2003,22(4):21-27.6.王宝红.热传导方程的可视化探讨[J].忻州师范学院学报,2008,24(2):31-36.7.李先枝.热传导方程差分解法的最佳网格[J].河南大学学报(自然科学版),2004,34(3):16-18.8.赵德奎,刘勇.MATLAB在有限差分数值计算中的应用[J].四川理工学院学报,2005,18(4):61-64.9.谢焕田,吴艳.拉普拉斯有限差分法的MATLAB实现[J].四川理工学院学报,2008,21(3):1-2.10.南京大学数学系计算数学专业.偏微分方程数值解法[M].北京:科学出版社,1979.1.学位论文申卫东热传导方程有限差分区域分解算法研究2003区域分解算法是在并行机上求解偏微分方程数值解的一种较自然的方法.该方法先将偏微分方程求解区域划分为若干个子区域,然后在各个子区域并行求解.全文共五章.第一章为引言,简要介绍了热传导方程并行算法的概况及该文所讨论的基本内容.在第二章,我们在内边界点为等距分划的多子区域条件下,得到Dawson等人关于求解热传导方程区域分解算法差分解的误差估计.在第三章,我们以Saul'yev非对称格式作内边界处理,发展了新的区域分解算法,得到了差分解的先验误差估计,并与Dawson等人的算法作了比较.给出了关于算法计算精度的数值结果.在第四章,我们发展了一些新技术,在子区域的边界处采用小时间步长古典显式格式求解,构造了新的区域分解算法,得到了差分解的先验误差估计.给出了关于算法计算精度的数值结果.在第五章,我们在二维热传导方程求解上扩充了Dawson等人的区域分解算法.给出了关于算法计算精度的数值结果.第六章为该研究工作的主要结论.2.期刊论文张守慧.王文洽.ZHANG Shou-hui.WANG Wen-qia热传导方程有限差分逼近的数学Stencil及其新型迭代格式-山东大学学报(理学版)2006,41(6)将Stencil应用于偏微分方程有限元差分逼近过程,以两类差分格式为基础建立了求解热传导方程的两种新型迭代算法.此两种算法与经典的Jacobi方法同样具有并行的性质,但比Jacobi方法收敛快.给出的算例说明方法的适用性.3.期刊论文吕桂霞.马富明.Lü Guixia.Ma Fuming二维热传导方程有限差分区域分解算法-数值计算与计算机应用2006,27(2)本文讨论了一类数值求解二维热传导方程的并行差分格式.在这个算法中,通过引进内界点将求解区域分裂成若干子区域.在子区域间内界点上采用非对称格式计算,一旦这些点的值被计算出来,各子区域间的计算可完全并行.本文得到了稳定性条件和最大模误差估计.它表明我们的格式有令人满意的稳定性,并且有着较高的收敛阶.4.学位论文田源地下煤火三维数理模型正演数值模拟2006本文首先给出了几个地下煤火随空间、温度变化的动态和稳态热数学物理模型及其简化模型。

二维 热传导方程 matlab

二维 热传导方程 matlab

二维热传导方程在实际工程问题中有着广泛的应用。

热传导方程描述了热量在空间和时间中的传播规律,而二维热传导方程则特指热量在二维平面上的传播情况。

在工程领域,我们经常需要利用数值方法来求解二维热传导方程,而MATLAB作为一款强大的工程计算软件,提供了丰富的工具和函数来进行热传导方程的数值求解。

让我们回顾一下二维热传导方程的基本形式,它通常可以表示为:\[ \frac{\partial u}{\partial t} = \alpha \left( \frac{\partial^2u}{\partial x^2} + \frac{\partial^2 u}{\partial y^2} \right) \]其中,\( u(x, y, t) \) 是温度场的分布,\( \alpha \) 是热扩散系数。

这个偏微分方程描述了温度场随时间和空间的演化规律,是研究热传导问题的基本方程之一。

在实际工程中,我们经常需要利用数值方法求解二维热传导方程,特别是在复杂几何结构和边界条件下。

MATLAB提供了丰富的数值求解工具,最常用的是有限差分法。

有限差分法将空间离散化为网格,用差分格式逼近偏微分方程,然后利用迭代方法求解离散化的代数方程组,得到温度场的数值解。

为了使用MATLAB进行二维热传导方程的数值求解,我们需要进行以下基本步骤:1. 网格划分:将求解区域进行网格划分,确定空间离散化的步长。

2. 边界条件处理:根据实际问题确定边界条件,例如固定温度、热通量等。

3. 数值格式选取:选择合适的差分格式逼近偏微分方程,通常采用显式或隐式格式。

4. 迭代求解:利用MATLAB提供的迭代方法,求解离散化后的代数方程组,得到温度场的数值解。

在实际工程中,二维热传导方程的数值求解往往涉及到复杂的边界条件、材料参数、热源分布等。

我们需要对MATLAB的数值求解工具有深入的理解和熟练的应用,才能准确地模拟和分析实际问题。

在我看来,二维热传导方程的数值求解是工程领域中非常重要的课题之一。

利用matlab程序解决热传导问题

利用matlab程序解决热传导问题

哈佛大学能源与环境学院课程作业报告作业名称:传热学大作业——利用matlab程序解决热传导问题院系:能源与环境学院专业:建筑环境与设备工程学号:姓名:盖茨比2015年6月8日一、题目及要求1.原始题目及要求2.各节点的离散化的代数方程3.源程序4.不同初值时的收敛快慢5.上下边界的热流量(λ=1W/(m℃))6.计算结果的等温线图7.计算小结题目:已知条件如下图所示:二、各节点的离散化的代数方程各温度节点的代数方程ta=(300+b+e)/4 ; tb=(200+a+c+f)/4; tc=(200+b+d+g)/4; td=(2*c+200+h)/4 te=(100+a+f+i)/4; tf=(b+e+g+j)/4; tg=(c+f+h+k)/4 ; th=(2*g+d+l)/4ti=(100+e+m+j)/4; tj=(f+i+k+n)/4; tk=(g+j+l+o)/4; tl=(2*k+h+q)/4tm=(2*i+300+n)/24; tn=(2*j+m+p+200)/24; to=(2*k+p+n+200)/24; tp=(l+o+100)/12 三、源程序【G-S迭代程序】【方法一】函数文件为:function [y,n]=gauseidel(A,b,x0,eps)D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1;while norm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;end命令文件为:A=[4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0;-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0;0,-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0;0,0,-2,4,0,0,0,-1,0,0,0,0,0,0,0,0;-1,0,0,0,4,-1,0,0,-1,0,0,0,0,0,0,0;0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0,0;0,0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0;0,0,0,-1,0,0,-2,4,0,0,0,-1,0,0,0,0;0,0,0,0,-1,0,-1,0,4,0,0,0,-1,0,0,0;0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0,0;0,0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0;0,0,0,0,0,0,0,-1,0,0,-2,4,0,0,0,-1;0,0,0,0,0,0,0,0,-2,0,0,0,24,-1,0,0;0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1,0;0,0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1;0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,12];b=[300,200,200,200,100,0,0,0,100,0,0,0,300,200,200,100]';[x,n]=gauseidel(A,b,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]',1.0e-6) xx=1:1:4;yy=xx;[X,Y]=meshgrid(xx,yy);Z=reshape(x,4,4);Z=Z'contour(X,Y,Z,30)Z =139.6088 150.3312 153.0517 153.5639108.1040 108.6641 108.3119 108.1523 84.1429 67.9096 63.3793 62.4214 20.1557 15.4521 14.8744 14.7746 【方法2】>> t=zeros(5,5);t(1,1)=100;t(1,2)=100;t(1,3)=100;t(1,4)=100;t(1,5)=100;t(2,1)=200;t(3,1)=200;t(4,1)=200;t(5,1)=200;for i=1:10t(2,2)=(300+t(3,2)+t(2,3))/4 ;t(3,2)=(200+t(2,2)+t(4,2)+t(3,3))/4;t(4,2)=(200+t(3,2)+t(5,2)+t(4,3))/4;t(5,2)=(2*t(4,2)+200+t(5,3))/4;t(2,3)=(100+t(2,2)+t(3,3)+t(2,4))/4;t(3,3)=(t(3,2)+t(2,3)+t(4,3)+t(3,4))/4; t(4,3)=(t(4,2)+t(3,3)+t(5,3)+t(4,4))/4; t(5,3)=(2*t(4,3)+t(5,2)+t(5,4))/4;t(2,4)=(100+t(2,3)+t(2,5)+t(3,4))/4;t(3,4)=(t(3,3)+t(2,4)+t(4,4)+t(3,5))/4;t(4,4)=(t(4,3)+t(4,5)+t(3,4)+t(5,4))/4;t(5,4)=(2*t(4,4)+t(5,3)+t(5,5))/4;t(2,5)=(2*t(2,4)+300+t(3,5))/24;t(3,5)=(2*t(3,4)+t(2,5)+t(4,5)+200)/24;t(4,5)=(2*t(4,4)+t(3,5)+t(5,5)+200)/24;t(5,5)=(t(5,4)+t(4,5)+100)/12;t'endcontour(t',50);ans =100.0000 200.0000 200.0000 200.0000 200.0000 100.0000 136.8905 146.9674 149.8587 150.7444 100.0000 102.3012 103.2880 103.8632 104.3496 100.0000 70.6264 61.9465 59.8018 59.6008 100.0000 19.0033 14.8903 14.5393 14.5117【Jacobi迭代程序】函数文件为:function [y,n]=jacobi(A,b,x0,eps)D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=D\(L+U);f=D\b;y=B*x0+f;n=1;while norm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;end命令文件为:A=[4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0;-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0; 0,-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0; 0,0,-2,4,0,0,0,-1,0,0,0,0,0,0,0,0;-1,0,0,0,4,-1,0,0,-1,0,0,0,0,0,0,0; 0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0,0; 0,0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0;0,0,0,-1,0,0,-2,4,0,0,0,-1,0,0,0,0;0,0,0,0,-1,0,-1,0,4,0,0,0,-1,0,0,0;0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0,0;0,0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0;0,0,0,0,0,0,0,-1,0,0,-2,4,0,0,0,-1;0,0,0,0,0,0,0,0,-2,0,0,0,24,-1,0,0;0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1,0;0,0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1;0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,12];b=[300,200,200,200,100,0,0,0,100,0,0,0,300,200,200,100]'; [x,n]=jacobi(A,b,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]',1.0e-6); xx=1:1:4;yy=xx;[X,Y]=meshgrid(xx,yy);Z=reshape(x,4,4);Z=Z'contour(X,Y,Z,30)n =97Z =139.6088 150.3312 153.0517 153.5639108.1040 108.6641 108.3119 108.152384.1429 67.9096 63.3793 62.421420.1557 15.4521 14.8744 14.7746四、不同初值时的收敛快慢1、[方法1]在Gauss 迭代和Jacobi 迭代中,本程序应用的收敛条件均为norm(y-x0)>=eps ,即使前后所求误差达到e 的-6次方时,跳出循环得出结果。

用有限差分法和Matlab计算二维热加工温度场分析最新版本

用有限差分法和Matlab计算二维热加工温度场分析最新版本

用有限差分法和Matlab 计算二维热加工温度场分析Eg1 薄板焊接过程温度场分析。

取焊件的一半为模型进行离散化,起始点为o 点,以后以v 速度沿x 轴运动。

根据题意为二维不稳态导热,二维不稳态导热方程为:k QyT x T T 12222-+∂∂+∂∂=∂∂ταyx 左边界下边界图 二维焊接离散化题目可化为以下微分方程组:(以y 轴正方向为上,x 轴正方向为右)0(,,0)0,(),(),(),e eeT C k Q T x y T Tk x Tk T T x T k T T y T k T T xρτβββ∂⎧=∆+⎪∂⎪=⎪⎪∂=⎪∂⎪⎪∂⎨=-⎪∂⎪∂⎪=-⎪∂⎪∂⎪=-⎪∂⎩左边界(y 轴)右边界下边界(x 轴)上边界需要的参数(均已cm,cal,g 为单位,所以不必换算):用PDE Tool解题步骤如下: 0.>> pdetool 1. 区域设置 单击工具,在窗口拉出一个矩形,双击矩形区域,在Object Dialog 对话框输入Left为0,Bottom 为0,Width 为2,Height 为2。

与默认的坐标相比,图形小的看不见,所以要调整坐标显示比例。

方法:选择Options->Axes Limits,把X ,Y 轴的自动选项打开。

设置Options->Application 为Heat Transfer (设置程序应用热传输模型) 2. 设置边界条件 单击 ,使边界变红色,然后分别双击每段边界,打开Boundary Conditions对话框,设置边界条件(根据边界条件)。

所有的边界都为Neumann 条件。

输入值见下表:3. 设置方程类型 单击,打开PDE Specification 对话框,设置方程类型为Parabolic (抛物型), C (比热)为0.16,a (导热系数)为0.1,d(密度)为7.82,f (热源)为4000*exp(-3*(x.^2+(y-0.4*t).^2)/0.49)。

有限元二维热传导波前法MATLAB程序

有限元二维热传导波前法MATLAB程序

有限元二维热传导波前法MATLAB程序科技论文2009-12-28 02:40:17 阅读226 评论15 字号:大中小江岩声•二维热传导有限元•使用高斯消去法解线性方程组的二维热传导有限元程序•波前法的基本概念与算法•使用波前法解线性方程组的二维热传导有限元程序•消元过程•波前法与高斯消去法的效率之比较•小结:波前法的过去、现在和未来波前法是求解线性方程组的一种方法,广泛用于有限元程序。

它最初由英国人(?)B.M. Irons于1970在“国际工程计算方法杂志”上发表。

30多年来,波前法有了不少变种。

本文所用算法,采于法国人Pascal JOLY所著《Mise en Oeuvre de la Méthode des Eléments Finis》。

这本书是我1993年在比利时一家书店买的,书中有一节"波前法",六页纸,解释了基本概念和算法,但没有程序,也没有细节讨论。

我曾花了两个半天的时间,在网上寻找波前法程序,或更详细的资料,没有找到(需要花钱才能看的文献不算)。

倒是看到不少中国人,也在寻找。

一些人说,波前法程序太难懂了。

通过自己编写程序,我同意这些人的说法,确实难。

我还真很少编如此耗费脑力的程序。

完工之后,我曾对朋友老王说,有了算法,编程序还这么难,当初想出算法的人,真是了不起。

现将我对波前法的理解和编程体会解说如下,供感兴趣的网友参考,也为填补网络上波前法空白。

二维热传导有限元波前法和有限元密不可分。

因而,在编写波前法程序之前,必须有个有限元程序。

为了简化问题,最好是能解算一个节点上只有一个自由度的问题的有限元程序,而且要尽可能地简单。

我手边现有的有限元程序都不符合这个要求。

就决定先开发一个解算二维热传导问题的MATLAB有限元程序。

二维热传导问题的微分方程是其中T 是温度,Kx 和Ky 分别是x 和y 方向上的热传导系数,q 是热源。

对于这样的比较经典的二阶微分方程,如何导出有限元表达式?这个问题,是有限元的首要问题!我相信,许许多多学过有限元的人,甚至每天都在用有限元的人,并不真的十分明了。

matlab 有限差分法代码

matlab 有限差分法代码

有限差分法是一种数值方法,用于求解偏微分方程。

下面是一个使用MATLAB 实现有限差分法的简单示例。

这个示例使用有限差分法求解一维热传导方程:
matlab
% 参数设定
L = 10; % 空间长度
T = 1; % 时间长度
dx = 0.1; % 空间步长
dt = 0.01; % 时间步长
Nx = round(L/dx); % 空间网格点数
Nt = round(T/dt); % 时间网格点数
% 初始化
u = zeros(1, Nx); % 温度数组
u_old = u; % 上一步的温度数组
% 初始条件
u(1) = 1; % 初始温度在 x=0 处为 1
u(Nx) = 0; % 初始温度在 x=L 处为 0
% 时间循环
for n = 1:Nt
% 空间循环
for i = 2:Nx-1
u_old(i) = u(i); % 保存当前温度值
u(i) = u_old(i) + dt/dx*(u_old(i+1) - u_old(i)); % 有限差分法更新温度值
end
% 时间循环继续,更新下一步的温度值
end
% 绘图
plot(0:dx:L, u);
xlabel('x');
ylabel('u');。

差分方程的解法分析及MATLAB实现(程序)

差分方程的解法分析及MATLAB实现(程序)

差分方程的解法分析及MATLAB 实现(程序)摘自:张登奇,彭仕玉.差分方程的解法分析及其MATLAB 实现[J]. 湖南理工学院学报.2014(03) 引言线性常系数差分方程是描述线性时不变离散时间系统的数学模型,求解差分方程是分析离散时间系统的重要内容.在《信号与系统》课程中介绍的求解方法主要有迭代法、时域经典法、双零法和变换域法[1].1 迭代法例1 已知离散系统的差分方程为)1(31)()2(81)1(43)(-+=-+--n x n x n y n y n y ,激励信号为)()43()(n u n x n =,初始状态为21)2(4)1(=-=-y y ,.求系统响应. 根据激励信号和初始状态,手工依次迭代可算出2459)1(,25)0(==y y . 利用MATLAB 中的filter 函数实现迭代过程的m 程序如下:clc;clear;format compact;a=[1,-3/4,1/8],b=[1,1/3,0], %输入差分方程系数向量,不足补0对齐n=0:10;xn=(3/4).^n, %输入激励信号zx=[0,0],zy=[4,12], %输入初始状态zi=filtic(b,a,zy,zx),%计算等效初始条件[yn,zf]=filter(b,a,xn,zi),%迭代计算输出和后段等效初始条件2 时域经典法用时域经典法求解差分方程:先求齐次解;再将激励信号代入方程右端化简得自由项,根据自由项形式求特解;然后根据边界条件求完全解[3].用时域经典法求解例1的基本步骤如下.(1)求齐次解.特征方程为081432=+-αα,可算出41 , 2121==αα.高阶特征根可用MATLAB 的roots 函数计算.齐次解为. 0 , )41()21()(21≥+=n C C n y n n h (2)求方程的特解.将)()43()(n u n x n =代入差分方程右端得自由项为 ⎪⎩⎪⎨⎧≥⋅==-⋅+-1,)43(9130 ,1)1()43(31)()43(1n n n u n u n n n 当1≥n 时,特解可设为n p D n y )43()(=,代入差分方程求得213=D . (3)利用边界条件求完全解.当n =0时迭代求出25)0(=y ,当n ≥1时,完全解的形式为 ,)43(213 )41()21()(21n n n C C n y ⋅++=选择求完全解系数的边界条件可参考文[4]选)1(),0(-y y .根据边界条件求得35,31721=-=C C .注意完全解的表达式只适于特解成立的n 取值范围,其他点要用)(n δ及其延迟表示,如果其值符合表达式则可合并处理.差分方程的完全解为)(])43(213 )41(35)21(317[)1(])43(213 )41(35)21(317[)(25)(n u n u n n y n n n n n n ⋅+⋅+⋅-=-⋅+⋅+⋅-+=δ MATLAB 没有专用的差分方程求解函数,但可调用maple 符号运算工具箱中的rsolve 函数实现[5],格式为y=maple('rsolve({equs, inis},y(n))'),其中:equs 为差分方程表达式, inis 为边界条件,y(n)为差分方程中的输出函数式.rsolve 的其他格式可通过mhelp rsolve 命令了解.在MATLAB 中用时域经典法求解例1中的全响应和单位样值响应的程序如下.clc;clear;format compact;yn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=5/2,y(-1)=4},y(n))'),hn=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(0)=1,y(1)=13/12},y(n))'),3 双零法根据双零响应的定义,按时域经典法的求解步骤可分别求出零输入响应和零状态响应.理解了双零法的求解原理和步骤,实际计算可调用rsolve 函数实现.yzi=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=0,y(-1)=4, y(-2)=12},y(n))'),yzs=maple('rsolve({y(n)-3/4*y(n-1)+1/8*y(n-2)=(3/4)^n+1/3*(3/4)^(n-1),y(0)=1,y(-1)=0},y(n))'),4 变换域法设差分方程的一般形式为)()(00r n x b k n y a r Mr k N k -=-∑∑==.对差分方程两边取单边z 变换,并利用z 变换的位移公式得])()([])()([1010m r m r r M r l k l k k N k z m x z X z b z l y z Y z a ---=-=---=-=∑∑∑∑+=+整理成)()()()()()(00z X z X z B z Y z Y z A +=+形式有. )(, )(110110M M N N z b z b b z B z a z a a z A ----+++=+++=. )()(, )()(110110∑∑∑∑=--=--=--=--==M r r m m r r N k k l l k k z m x b s X zl y a s Y可以看出,由差分方程可直接写出 )(z A 和 )(z B ,系统函数)(/)()(z A z B z H =,将系统函数进行逆z 变换可得单位样值响应.由差分方程的初始状态可算出 )(0z Y ,由激励信号的初始状态可算出 )(0z X ,将激励信号进行z 变换可得 )(z X ,求解z 域代数方程可得输出信号的象函数 , )()()()()()(00z A z Y z X z X z B z Y -+= 对输出象函数进行逆z 变换可得输出信号的原函数)(n y .利用z 变换求解差分方程各响应的步骤可归纳如下:(1)根据差分方程直接写出 )(z A 、 )(z B 和)(z H ,)(z H 的逆变换即为单位样值响应;(2)根据激励信号算出 )(z X ,如激励不是因果序列则还要算出前M 个初始状态值;(3)根据差分方程的初始状态 )(, ),2( ),1(N y y y -⋅⋅⋅--和激励信号的初始状态 )(, ),2( ),1(M x x x -⋅⋅⋅--算出 )(0z Y 和 )(0z X ;(4)在z 域求解代数方程)()()()()()(00z X z X z B z Y z Y z A +=+得输出象函数 )(z Y , )(z Y 的逆变换即为全响应;(5)分析响应象函数的极点来源及在z 平面中的位置,确定自由响应与强迫响应,或瞬态响应与稳态响应;(6)根据零输入响应和零状态响应的定义,在z 域求解双零响应的象函数,对双零响应的象函数进行逆z 变换,得零输入响应和零状态响应.用变换域法求解例1的基本过程如下. 根据差分方程直接写出2181431 )(--+-=z z z A ,1311 )(-+=z z B .系统函数的极点为41,21. 对激励信号进行z 变换得)43/( )(-=z z z X .激励象函数的极点为3/4. 根据差分方程的初始状态算出102123 )(-+-=z z Y .根据激励信号的初始状态算出 0)(0=z X . 对z 域代数方程求解,得全响应的象函数)323161123/()83243125( )(2323-+-+-=z z z z z z z Y . 进行逆z 变换得全响应为)(])43(213 )41(35)21(317[)(n u n y n n n ⋅+⋅+⋅-= 其中,与系统函数的极点对应的是自由响应;与激励象函数的极点对应的是强迫响应. )(z Y 的极点都在z 平面的单位圆内故都是瞬态响应.零输入响应和零状态响应可按定义参照求解.上述求解过程可借助MATLAB 的符号运算编程实现.实现变换域法求解差分方程的m 程序如下: clc;clear;format compact;syms z n %定义符号对象% 输入差分方程、初始状态和激励信号%a=[1,-3/4,1/8],b=[1,1/3], %输入差分方程系数向量y0=[4,12],x0=[0], %输入初始状态,长度分别比a 、b 短1,长度为0时用[]xn=(3/4)^n, %输入激励信号,自动单边处理,u(n)可用1^n 表示% 下面是变换域法求解差分方程的通用程序,极点为有理数时有解析式输出 %N=length(a)-1;M=length(b)-1;%计算长度Az=poly2sym(a,'z')/z^N;Bz=poly2sym(b,'z')/z^M;%计算A(z)和B(z)Hz=Bz/Az;disp('系统函数H(z):'),sys=filt(b,a),%计算并显示系统函数hn=iztrans(Hz);disp('单位样值响应h(n)='),pretty(hn),%计算并显示单位样值响应Hzp=roots(a);disp('系统极点:');Hzp,%计算并显示系统极点Xz=ztrans(xn);disp('激励象函数X(z)='),pretty(Xz),%激励信号的单边z 变换Y0z=0;%初始化Y0(z),求Y0(z)注意系数标号与变量下标的关系for k=1:N;for l=-k:-1;Y0z = Y0z+a(k+1)*y0(-l)*z^(-k-l);endenddisp('初始Y0(z)'),Y0z,%系统初始状态的z 变换X0z=0;%初始化X0(z),求X0(z)注意系数标号与变量下标的关系for r=1:M;for m=-r:-1;X0z = X0z+b(r+1)*x0(-m)*z^(-r-m);endenddisp('初始X0(z)'),X0z,%激励信号起始状态的z 变换Yz=(Bz*Xz+X0z-Y0z)/Az;disp('全响应的z 变换Y(z)'),pretty(simple(Yz)),yn=iztrans(Yz);disp('全响应y(n)='),pretty(yn),% 计算并显示全响应Yziz=-Y0z/Az;disp('零输入象函数Yzi(z)='),pretty(Yziz),%零激励响应的z 变换yzin=iztrans(Yziz);disp('零输入响应yzi(n)='),pretty(yzin),% 计算并显示零输入响应 Yzsz=(Bz*Xz+X0z)/Az;disp('零状态象函数Yzs(z)='),pretty(Yzsz),%零状态响应的z 变换yzsn=iztrans(Yzsz);disp('零状态响应yzs(n)='),pretty(yzsn),% 计算并显示零状态响应该程序的运行过程与手算过程对应,显示在命令窗的运行结果与手算结果相同.。

用有限差分法和Matlab计算二维热加工温度场分析

用有限差分法和Matlab计算二维热加工温度场分析

用有限差分法和Matlab 计算二维热加工温度场分析Eg1 薄板焊接过程温度场分析。

取焊件的一半为模型进行离散化,起始点为o 点,以后以v 速度沿x 轴运动。

根据题意为二维不稳态导热,二维不稳态导热方程为:k Qy T x T T 12222-+∂∂+∂∂=∂∂ταyx 左边界下边界图 二维焊接离散化题目可化为以下微分方程组:(以y 轴正方向为上,x 轴正方向为右)(,,0)0,(),(),(),e e e TC k QT x y TTk xT k T T x Tk T T y Tk T T x ρτβββ∂⎧=∆+⎪∂⎪=⎪⎪∂=⎪∂⎪⎪∂⎨=-⎪∂⎪∂⎪=-⎪∂⎪∂⎪=-⎪∂⎩左边界(y 轴)右边界下边界(x 轴)上边界需要的参数(均已cm,cal,g 为单位,所以不必换算):参数数值 备注 ρ7.82 g/cm 3 密度 v0.4 cm/s 焊接速度 h1cm 板厚度 Qm 4000 cal/cm 3 热源分布密度 β0.0008cal/cm 2·s ·℃ 换热系数 Te ,T 020℃ 周边介质温度,初始温度 k 0.1 cal/c m ·s ·℃ 导热系数用PDE Tool 解题步骤如下:1. 区域设置单击工具,在窗口拉出一个矩形,双击矩形区域,在Object Dialog 对话框输入Left 为0,Bottom 为0,Width 为2,Height 为2。

与默认的坐标相比,图形小的看不见,所以要调整坐标显示比例。

方法:选择Options->Axes Limits,把X ,Y 轴的自动选项打开。

设置Options->Application 为Heat Transfer (设置程序应用热传输模型)2. 设置边界条件单击,使边界变红色,然后分别双击每段边界,打开Boundary Conditions 对话框,设置边界条件(根据边界条件)。

matlab在有限差分法数值计算中的应用

matlab在有限差分法数值计算中的应用

matlab在有限差分法数值计算中的应用1.前言有限差分法是一种常用的数值计算方法,常用于求解偏微分方程。

Matlab是一种非常强大的数值计算软件,也被广泛应用于各种科学计算中。

本文将围绕有限差分法在Matlab中的应用进行讨论。

2.有限差分法有限差分法是一种数值计算方法,通常用于求解偏微分方程。

其基本思想是将偏微分方程中的导数用差分的形式进行近似。

这样就可以把偏微分方程转化为差分方程,进而用数值方法求解。

在有限差分法中,将求解区域离散化为网格,并在网格上通过差分近似来求解偏微分方程。

有限差分法的基本思想是将导数转化为差分形式。

由于导数的定义是极限形式的,因此我们可以通过极限的概念来推导差分近似。

例如,对于函数$f(x)$,它在$x=a$处的导数为$f'(a)$,则可以表示为:$$f'(a)=\lim_{h\to0}\frac{f(a+h)-f(a)}{h}$$如果我们取一个无穷小的$h$,则可以得到:$$f'(a)\approx\frac{f(a+h)-f(a)}{h}$$这就是一个一阶中心差分近似。

同样,我们还可以用其他的差分形式来表示导数。

有限差分法的核心就是建立差分方程。

在建立差分方程时,我们需要先将求解区域离散化为网格,然后在每个网格点上建立差分方程。

通常情况下,差分方程和原始的偏微分方程形式相同,只是将偏导数用差分近似来替代。

例如,对于泊松方程:$$\frac{\partial^2\phi}{\partialx^2}+\frac{\partial^2\phi}{\partial y^2}=f(x,y)$$我们可以将其离散化为网格上的差分方程:$$\frac{\phi_{i-1,j}-2\phi_{i,j}+\phi_{i+1,j}}{\Deltax^2}+\frac{\phi_{i,j-1}-2\phi_{i,j}+\phi_{i,j+1}}{\Deltay^2}=f_{i,j}$$其中,$\Delta x$和$\Delta y$表示网格的大小,$\phi_{i,j}$表示在网格点$(x_i,y_j)$处的解,$f_{i,j}$表示在网格点$(x_i,y_j)$处的源项。

最新利用matlab程序解决热传导问题

最新利用matlab程序解决热传导问题

哈佛大学能源与环境学院课程作业报告作业名称:传热学大作业——利用matlab程序解决热传导问题院系:能源与环境学院专业:建筑环境与设备工程学号:5201314姓名:盖茨比2015年6月8日一、题目及要求1.原始题目及要求2.各节点的离散化的代数方程3.源程序4.不同初值时的收敛快慢5.上下边界的热流量(λ=1W/(m℃))6.计算结果的等温线图7.计算小结题目:已知条件如下图所示:二、各节点的离散化的代数方程各温度节点的代数方程ta=(300+b+e)/4 ; tb=(200+a+c+f)/4; tc=(200+b+d+g)/4; td=(2*c+200+h)/4te=(100+a+f+i)/4; tf=(b+e+g+j)/4; tg=(c+f+h+k)/4 ; th=(2*g+d+l)/4ti=(100+e+m+j)/4; tj=(f+i+k+n)/4; tk=(g+j+l+o)/4; tl=(2*k+h+q)/4tm=(2*i+300+n)/24; tn=(2*j+m+p+200)/24; to=(2*k+p+n+200)/24; tp=(l+o+100)/12三、源程序【G-S迭代程序】【方法一】函数文件为:function [y,n]=gauseidel(A,b,x0,eps)D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);G=(D-L)\U;f=(D-L)\b;y=G*x0+f;n=1;while norm(y-x0)>=epsx0=y;y=G*x0+f;n=n+1;end命令文件为:A=[4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0; -1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0; 0,-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0; 0,0,-2,4,0,0,0,-1,0,0,0,0,0,0,0,0;-1,0,0,0,4,-1,0,0,-1,0,0,0,0,0,0,0;0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0,0;0,0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0;0,0,0,-1,0,0,-2,4,0,0,0,-1,0,0,0,0;0,0,0,0,-1,0,-1,0,4,0,0,0,-1,0,0,0;0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0,0;0,0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0;0,0,0,0,0,0,0,-1,0,0,-2,4,0,0,0,-1;0,0,0,0,0,0,0,0,-2,0,0,0,24,-1,0,0;0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1,0;0,0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1;0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,12];b=[300,200,200,200,100,0,0,0,100,0,0,0,300,200,200,100]'; [x,n]=gauseidel(A,b,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]',1.0e-6) xx=1:1:4;yy=xx;[X,Y]=meshgrid(xx,yy);Z=reshape(x,4,4);Z=Z'contour(X,Y,Z,30)Z =139.6088 150.3312 153.0517 153.5639108.1040 108.6641 108.3119 108.1523 84.1429 67.9096 63.3793 62.4214 20.1557 15.4521 14.8744 14.7746【方法2】>> t=zeros(5,5);t(1,1)=100;t(1,2)=100;t(1,3)=100;t(1,4)=100;t(1,5)=100;t(2,1)=200;t(3,1)=200;t(4,1)=200;t(5,1)=200;for i=1:10t(2,2)=(300+t(3,2)+t(2,3))/4 ;t(3,2)=(200+t(2,2)+t(4,2)+t(3,3))/4;t(4,2)=(200+t(3,2)+t(5,2)+t(4,3))/4;t(5,2)=(2*t(4,2)+200+t(5,3))/4;t(2,3)=(100+t(2,2)+t(3,3)+t(2,4))/4;t(3,3)=(t(3,2)+t(2,3)+t(4,3)+t(3,4))/4; t(4,3)=(t(4,2)+t(3,3)+t(5,3)+t(4,4))/4; t(5,3)=(2*t(4,3)+t(5,2)+t(5,4))/4;t(2,4)=(100+t(2,3)+t(2,5)+t(3,4))/4;t(3,4)=(t(3,3)+t(2,4)+t(4,4)+t(3,5))/4;t(4,4)=(t(4,3)+t(4,5)+t(3,4)+t(5,4))/4;t(5,4)=(2*t(4,4)+t(5,3)+t(5,5))/4;t(2,5)=(2*t(2,4)+300+t(3,5))/24;t(3,5)=(2*t(3,4)+t(2,5)+t(4,5)+200)/24;t(4,5)=(2*t(4,4)+t(3,5)+t(5,5)+200)/24;t(5,5)=(t(5,4)+t(4,5)+100)/12;t'endcontour(t',50);ans =100.0000 200.0000 200.0000 200.0000 200.0000 100.0000 136.8905 146.9674 149.8587 150.7444 100.0000 102.3012 103.2880 103.8632 104.3496 100.0000 70.6264 61.9465 59.8018 59.6008 100.0000 19.0033 14.8903 14.5393 14.5117【Jacobi迭代程序】函数文件为:function [y,n]=jacobi(A,b,x0,eps) D=diag(diag(A));L=-tril(A,-1);U=-triu(A,1);B=D\(L+U);f=D\b;y=B*x0+f;n=1;while norm(y-x0)>=epsx0=y;y=B*x0+f;n=n+1;end命令文件为:A=[4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0,0;-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0,0;0,-1,4,-1,0,0,-1,0,0,0,0,0,0,0,0,0;0,0,-2,4,0,0,0,-1,0,0,0,0,0,0,0,0;-1,0,0,0,4,-1,0,0,-1,0,0,0,0,0,0,0;0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0,0;0,0,-1,0,0,-1,4,-1,0,0,-1,0,0,0,0,0;0,0,0,-1,0,0,-2,4,0,0,0,-1,0,0,0,0;0,0,0,0,-1,0,-1,0,4,0,0,0,-1,0,0,0;0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0,0;0,0,0,0,0,0,-1,0,0,-1,4,-1,0,0,-1,0;0,0,0,0,0,0,0,-1,0,0,-2,4,0,0,0,-1;0,0,0,0,0,0,0,0,-2,0,0,0,24,-1,0,0;0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1,0;0,0,0,0,0,0,0,0,0,0,-2,0,0,-1,24,-1;0,0,0,0,0,0,0,0,0,0,0,-1,0,0,-1,12];b=[300,200,200,200,100,0,0,0,100,0,0,0,300,200,200,100]'; [x,n]=jacobi(A,b,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]',1.0e-6); xx=1:1:4;yy=xx;[X,Y]=meshgrid(xx,yy);Z=reshape(x,4,4);Z=Z'contour(X,Y,Z,30)n =97Z =139.6088 150.3312 153.0517 153.5639108.1040 108.6641 108.3119 108.152384.1429 67.9096 63.3793 62.421420.1557 15.4521 14.8744 14.7746四、不同初值时的收敛快慢1、[方法1]在Gauss迭代和Jacobi迭代中,本程序应用的收敛条件均为norm(y-x0)>=eps,即使前后所求误差达到e的-6次方时,跳出循环得出结果。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章前言1.1问题背景在史策教授的《一维热传导方程有限差分法的MATLAB实现》和曹刚教授的《一维偏微分方程的基本解》中,对偏微分方程的解得MATLAB实现问题进行过研究,但只停留在一维中,而实际中二维和三维的应用更加广泛。

诸如粒子扩散或神经细胞的动作电位。

也可以作为某些金融现象的模型,诸如布莱克-斯科尔斯模型与Ornstein-uhlenbeck过程。

热方程及其非线性的推广形式也被应用与影响分析。

在科学和技术发展过程中,科学的理论和科学的实验一直是两种重要的科学方法和手段。

虽然这两种科学方法都有十分重要的作用,但是一些研究对象往往由于他们的特性(例如太大或太小,太快或太慢)不能精确的用理论描述或用实验手段来实现。

自从计算机出现和发展以来,模拟那些不容易观察到的现象,得到实际应用所需要的数值结果,解释各种现象的规律和基本性质。

科学计算在各门自然科学和技术科学与工程科学中其越来越大的作用,在很多重要领域中成为不可缺少的重要工具。

而科学与工程计算中最重要的内容就是求解科学研究和工程技术中出现的各种各样的偏微分方程或方程组。

解偏微分方程已经成为科学与工程计算的核心内容,包括一些大型的计算和很多已经成为常规的计算。

为什么它在当代能发挥这样大的作用呢?第一是计算机本身有了很大的发展;第二是数值求解方程的计算法有了很大的发展,这两者对人们计算能力的发展都是十分重要的。

1.2问题现状近三十年来,解偏微分方程的理论和方法有了很大的发展,而且在各个学科技术的领域中应用也愈来愈广泛,在我国,偏微分方程数值解法作为一门课程,不但在计算数学专业,而且也在其他理工科专业的研究生的大学生中开设。

同时,求解热传导方程的数值算法也取得巨大进展,特别是有限差分法方面,此算法的特点是在内边界处设计不同于整体的格式,将全局的隐式计算化为局部的分段隐式计算。

而且精度上更好。

目前,在欧美各国MATLAB的使用十分普及。

在大学的数学、工程和科学系科,MATLAB苏佳园:二维热传导方程有限差分法的MATLAB实现被用作许多课程的辅助教学手段,MATLAB也成为大学生们必不可少的计算工具,甚至是一项必须掌握的基本技能。

在我国,MATLAB在各大专院校的应用日益普遍,许多专业已把MATLAB作为基本计算工具。

在科研机构和工业界,MATLAB正得到越来越广泛的应用。

MATLAB具有强大的图形绘制功能,为科学计算和图形处理提供了很大的方便。

我们只需制定的绘图方式,再提供绘图数据,有程序指令就可以得到形象、直观的图形结果。

因此,近些年越来越多的人开始使用MATLAB来求解数值计算和图形处理技术,我们也可以绘制出热传导方程数值解的二维、三维图形,从而可以更好的理解热传导方程的意义。

1.3 问题解决目前,对于求解偏微分方程有很多方法,但差分法和有限元离散法式主要解决问题的两种方法。

一般来说,用差分法来接偏微分方程,解得得结果就是方程的准确解函数再借点上的近似值。

而用变分近似的方法求解,是将近似解表示成有限维子空间中基函数的线性组合。

有限元法也是基于变分原理,由于选择了特殊的基函数,使它能适用于一般的区域。

这种基函数是与区域的剖分有关的,近似解u表示为基函数的线性组合,二线性组合中的系数,又是剖分节点上u或其导数的近似值。

有关一维热传导方程的有限差分法求解的MATLAB实现,西安建筑科技大学的史策教授已经解决,本文借鉴史老师的求解思想,对二维热传导方程进行转换,再对解法编程实现,从而进一步对热传导方程进行探讨。

二维热传导方程求解在现实生活中的应用也更加广泛,所以有很好的现实意义。

第2章 预备知识定义2.1[8] 含有未知函数12(,,,,)n u x x x t 的偏导数的方程称为偏微分方程。

定义2.2[8] 方程111()()(,),n n nu u uk k F x t t x x x x ∂∂∂∂∂=+++∂∂∂∂∂ 称热传导方程(或扩散方程)。

其中,(,)u u x t =是固体的传热过程中在x 处、t 时刻的温度。

系数i k 称为热传导系数,当12(0)n k k k a a ====>时,方程为(,),ua u F x t t∂=∆+∂ 其中22222212nx x x ∂∂∂∆=+++∂∂∂,n 为维数。

定义2.3[8] 在特定条件下求解方程的解。

这样的条件成为定解条件。

给出了方程和定结条件,就构成了定解问题。

定义2.4[1] 一般说,边界条件有下列形式(,)(,)(,)(,)(,),ux y u x y x y x y x y nαβγ∂+=∂ 其中un∂∂为边界的外法向导数。

有如下几种特殊形式 (1)Dirichlet (或第一类)条件:0,β=即u 值给定;(2)Neumann (或第二类)条件:0α=.即u 的外法向导数给定; (3)Robbins (或第三类)条件:0,0αβ≠≠。

定 义2.5[8] 只有出事条件而没有边界条件的定解问题。

定 义2.6[8] 只有边界条件而没有初值条件的定解问题。

定 义2.7[8] 既有边值条件又有初值条件的定解问题。

定 义2.7[8] 定义在()+∞∞-,上的函数()x v 的一个关系式,设∞<⎰∞+∞-dx x v 2)(,有关系式()12()(),i x v x v e d d λεπεελ+∞+∞---∞-∞=⎰⎰以上变换称为Fourier 变换。

其中1-=i 是虚数单位。

定义 2.9[8] 由第n 个时间层推进到第1n +个时间层时差分方程提供了逐点直接计算1n u j+苏佳园:二维热传导方程有限差分法的MATLAB 实现的表达式,我们称次差分方程为显式格式。

定义2.10[8] 有限差分格式在新的时间层上包含有多于一个的节点,这种有限差分格式称为隐式格式。

定义2.11[11](,)(,)(,),v x t v x t t v x t t ∆=+∆-+(,)(,)(,).v x t v x x t v x t x ∆=+∆-+称为向前差分。

定义2.12[11](,)(,)(,),v x t v x t v x t t t ∆=--∆- (,)(,)(,).v x t v x t v x x t x ∆=--∆-称为向后差分。

定义2.13[11]11(,)(,)(,),22v x t v x t t v x t t t δ=+∆--∆11(,)(,)(,).22v x t v x x t v x x t x δ=+∆--∆称为中心差分。

定义2.14[11]用微分方程的解代替差分方程的全部近似解,这样得到的方程两边的差就是截断误差。

定理2.1[8] 给定一个适定的线性初值问题以及与其相容的差分格式,则差分格式的稳定性是差分格式收敛性的充要条件。

第3章 求解二维热传导方程的基本思想基本思想是把连续的定解区域用有限个离散点构成网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数的近似;把原方程和定解条件中的微商用差商来近似,积分用积分来近似,于是原微分方程和定解条件近似的代之以代数方程,即优先差分方程组,解此方程组就可以得到原问题在离散点上的近似解。

下面是有限差分法数值计算的基本步骤:3.1区域的离散用有限差分方法求解偏微分方程问题必须把连续问题进行离散化。

为此首先要对求解区域给出网格剖分,由于求解的问题不同,因此求解区域也不尽相同。

下面用例子来说明不同区域的剖分离散。

并引入一些常用术语。

例3.1 双曲型和抛物型方程的初值问题,求解区域是{}(,),0.1D x t x t =-∞<<+∞≥我们在t x -的上半平面画出两族平行于坐标轴的直线,把上班平面分成矩形网格。

其交点称为节点(或网格点)。

可设距离0x ∆>,称其为空间步长,平行线的距离按具体问题而定。

可设距离0>∆t ,称其为时间步长。

这样两族网格线可以写作,0,1,2,x x j x jh j j ==∆==±±,0,1,2t t n t n n nτ==∆==网格节点有时记为),(n x t x 。

例3.2 双曲型和抛物型方程的初边值问题,设求解区域是{},(,)0,02D x t x l t =<<≥这个区域的网格由平行于t 轴的直线族,0,1,x x j Jj == 与平行于x 轴的直线族,0,1,2,t t n n ==苏佳园:二维热传导方程有限差分法的MATLAB 实现所构成,其中,;.lx j x h x h t n t n j n J τ=∆=∆===∆=3.2插值函数的选择选择不同的插值函数对偏微分方程进行估计,可得到不同的差分方程,进而稳定性和精度会有所不同。

用Taylor 级数展开方法是最常用的方法,下面建立差分格式的同时引入一些基本概念及术语。

我们主要从对流方程的初值问题0,,0,(,0)(),,u u a x R t tx u x g x x R ∂∂⎧+=∈>⎪∂∂⎨⎪=∈⎩ (3.1) 和扩散方程的初值问题22,,0,u ua x R t t x ∂∂=∈>∂∂ (3.2) (,0)(),.u x g x x R =∈(其中0a >)进行讨论。

假定偏微分方程初值问题的解(,)u x y 是充分官话的,由Taylor 级数展开有[][][][][][]⎪⎪⎪⎪⎪⎩⎪⎪⎪⎪⎪⎨⎧+=+=+=+=∆+=∆+=∂∂+-∂∂-∂∂-∂∂-∂∂∆-∂∂∆--+-+-+-++).(),(),(),(),(),(2),(),(2),(22),(),(),(),(),(),(22),(),(),(),(222111111111h h h h t t nj x uh t x u t x u t x u njx u h t x u t x u njx u h t x u t x u n j x u h t x u t x u nj t u t t x u t x u n j t u t t x u t x u n j n j n j n j n j n j n j n j n j n j n j n j n j οοοοοο(3.3) 其中[]n j •或用()n j•,表示看括号内的函数在节点),(n j t x 处取的值。

利用(3.3)表达式中的第1式和第3式有11(,)(,)(,)(,)[]()j n j n j n j n nj u x t u x t u x t u x t u u aa h ht xοττ++--∂∂+=+++∂∂.如果(,)u x t 是满足偏微分方程(3.1)的光滑解,则[]0.nj u u a t x∂∂+=∂∂ 由此看一看出,偏微分方程(3.1)在(,)u x t n j 处可以近似的用下面的方程来代替110,n n n nj jj ju u u u ahτ++---= (3.4)0,1,2,,0,1,2.j n =±±=其中nj u 为(,)j n u x t 的近似值。

相关文档
最新文档