有限差分法及matlab实现
二维有限差分 代码 matlab
二维有限差分代码MATLAB一、介绍有限差分方法是一种常用的数值求解偏微分方程的方法,它将连续的偏微分方程转化为离散的代数方程。
其中,二维有限差分是在二维空间中对偏微分方程进行离散化求解的方法。
MATLAB是一种广泛应用于科学计算和工程领域的编程语言和软件评台,它提供了丰富的工具箱和函数,可以方便地实现二维有限差分方法。
二、二维有限差分的基本原理假设要求解的偏微分方程为二维波动方程:∂^2u/∂t^2 = c^2(∂^2u/∂x^2 + ∂^2u/∂y^2)其中,u代表波动的振幅,t代表时间,x、y分别代表二维空间中的坐标,c为波速。
利用有限差分方法对偏微分方程进行离散化,可以得到一组代数方程。
假设在二维空间中取N个网格点,将空间进行离散化,可得到离散的网格点坐标(xi, yj),其中i,j=1,2,...,N。
对时间进行离散化,得到时间步长Δt,可得到离散的时间点tk,其中k=0,1,2,...,M。
用中心差分格式离散化偏微分方程,可得到如下的差分方程:(u(i,j,tk+Δt) - 2u(i,j,tk) + u(i,j,tk-Δt)) / Δt^2 = c^2(u(i+1,j,tk) -2u(i,j,tk) + u(i-1,j,tk)) / Δx^2 + c^2(u(i,j+1,tk) - 2u(i,j,tk) + u(i,j-1,tk)) / Δy^2将上述差分方程用适当的边界条件离散化,就可以得到求解二维波动方程的代数方程组。
三、 MATLAB实现二维有限差分MATLAB提供了丰富的工具箱和函数,可以方便地实现二维有限差分方法。
以下是使用MATLAB实现二维有限差分的基本步骤:1. 网格的生成首先需要生成二维空间中的网格点,可以使用meshgrid函数生成网格点的坐标。
假设在x、y方向上分别取N个网格点,则可以用如下的代码生成网格点坐标:```MATLABx = linspace(0, L, N);y = linspace(0, W, N);[X, Y] = meshgrid(x, y);```其中,L为空间在x方向上的长度,W为空间在y方向上的宽度。
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进行建模,构建图形,研究不同情况下采用何种方法从更深层次上理解热量分布与时间、空间分布关系。
实验原理:分离变量法:利用分离变量法,将热传导方程分解为两个方程,分别只包含变量x和变量t,然后将它们相乘并求和,得到一个无穷级数的解。
通过截取该级数的前n项,可以得到近似解。
有限差分法:利用有限差分法,将空间和时间分别离散化,将偏导数用差分代替,得到一个差分方程组。
通过迭代求解该方程组,可以得到近似解。
分离变量法实验:采用Matlab编写代码,利用分离变量法求解热传导方程。
首先设定x和t的范围,然后计算无穷级数的前n项,并将其绘制成三维图形。
代码如下:matlabx = 0:0.1*pi:pi;y = 0:0.04:1;x。
t] = meshgrid(x。
y);s = 0;m = length(j);for i = 1:ms = s + (200*(1-(-1)^i))/(i*pi)*(sin(i*x).*exp(-i^2*t));endsurf(x。
t。
s);xlabel('x')。
XXX('t')。
zlabel('T');title('分离变量法(无穷)');axis([0 pi 0 1 0 100]);得到的三维热传导图形如下:有限差分法实验:采用Matlab编写代码,利用有限差分法求解热传导方程。
首先初始化一个矩阵,用于存储时间t和变量x。
然后计算稳定性系数S,并根据边界条件和初始条件,迭代求解差分方程组,并将其绘制成三维图形。
代码如下:matlabu = zeros(10.25);s = (1/25)/(pi/10)^2;fprintf('稳定性系数S为:\n');disp(s);for i = 2:9u(i。
有限差分法求解偏微分方程MATLAB
南京理工大学课程考核论文课程名称:高等数值分析论文题目:有限差分法求解偏微分方程*名:**学号: 1成绩:有限差分法求解偏微分方程一、主要内容1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程:22(,)()u uf x t t xαα∂∂-=∂∂其中为常数具体求解的偏微分方程如下:22001(,0)sin()(0,)(1,)00u u x t x u x x u t u t t π⎧∂∂-=≤≤⎪∂∂⎪⎪⎪=⎨⎪⎪==≥⎪⎪⎩2.推导五种差分格式、截断误差并分析其稳定性;3.编写MATLAB 程序实现五种差分格式对偏微分方程的求解及误差分析;4.结论及完成本次实验报告的感想。
二、推导几种差分格式的过程:有限差分法(finite-difference methods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。
有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
推导差分方程的过程中需要用到的泰勒展开公式如下:()2100000000()()()()()()()......()(())1!2!!n n n f x f x f x f x f x x x x x x x o x x n +'''=+-+-++-+- (2-1)求解区域的网格划分步长参数如下:11k k k kt t x x h τ++-=⎧⎨-=⎩ (2-2) 2.1 古典显格式2.1.1 古典显格式的推导由泰勒展开公式将(,)u x t 对时间展开得 2,(,)(,)()()(())i i k i k k k uu x t u x t t t o t t t∂=+-+-∂ (2-3) 当1k t t +=时有21,112,(,)(,)()()(())(,)()()i k i k i k k k k k i k i k uu x t u x t t t o t t tuu x t o tττ+++∂=+-+-∂∂=+⋅+∂ (2-4)得到对时间的一阶偏导数1,(,)(,)()=()i k i k i k u x t u x t uo t ττ+-∂+∂ (2-5) 由泰勒展开公式将(,)u x t 对位置展开得223,,21(,)(,)()()()()(())2!k i k i k i i k i i u uu x t u x t x x x x o x x x x∂∂=+-+-+-∂∂ (2-6)当11i i x x x x +-==和时,代入式(2-6)得2231,1,1122231,1,1121(,)(,)()()()()(())2!1(,)(,)()()()()(())2!i k i k i k i i i k i i i i i k i k i k i i i k i i i iu uu x t u x t x x x x o x x x x u u u x t u x t x x x x o x x x x ++++----⎧∂∂=+-+-+-⎪⎪∂∂⎨∂∂⎪=+-+-+-⎪∂∂⎩(2-7) 因为1k k x x h +-=,代入上式得2231,,22231,,21(,)(,)()()()2!1(,)(,)()()()2!i k i k i k i k i k i k i k i ku uu x t u x t h h o h x xu u u x t u x t h h o h x x +-⎧∂∂=+⋅+⋅+⎪⎪∂∂⎨∂∂⎪=-⋅+⋅+⎪∂∂⎩ (2-8) 得到对位置的二阶偏导数2211,22(,)2(,)(,)()()i k i k i k i k u x t u x t u x t u o h x h+--+∂=+∂ (2-9) 将式(2-5)、(2-9)代入一般形式的抛物线型偏微分方程得21112(,)(,)(,)2(,)(,)(,)()i k i k i k i k i k i k u x t u x t u x t u x t u x t f x t o h h αττ++---+⎡⎤-=++⎢⎥⎣⎦(2-10)为了方便我们可以将式(2-10)写成11122k kk k k k i i i i i i u u u u u f h ατ++-⎡⎤--+-=⎢⎥⎣⎦(2-11) ()11122k k k k k k i i i i i i u u uu u f h τατ++----+= (2-12)最后得到古典显格式的差分格式为()111(12)k k k k k i i i i i u ra u r u u f ατ++-=-+++ (2-13)2r h τ=其中,古典显格式的差分格式的截断误差是2()o h τ+。
有限差分 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实现
第1章前言1.1问题背景在史策教授的《一维热传导方程有限差分法的MATLAB实现》和曹刚教授的《一维偏微分方程的基本解》中,对偏微分方程的解得MATLAB实现问题进行过研究,但只停留在一维中,而实际中二维和三维的应用更加广泛。
诸如粒子扩散或神经细胞的动作电位。
也可以作为某些金融现象的模型,诸如布莱克-斯科尔斯模型与Ornstein-uhlenbeck过程。
热方程及其非线性的推广形式也被应用与影响分析。
在科学和技术发展过程中,科学的理论和科学的实验一直是两种重要的科学方法和手段。
虽然这两种科学方法都有十分重要的作用,但是一些研究对象往往由于他们的特性(例如太大或太小,太快或太慢)不能精确的用理论描述或用实验手段来实现。
自从计算机出现和发展以来,模拟那些不容易观察到的现象,得到实际应用所需要的数值结果,解释各种现象的规律和基本性质。
科学计算在各门自然科学和技术科学与工程科学中其越来越大的作用,在很多重要领域中成为不可缺少的重要工具。
而科学与工程计算中最重要的内容就是求解科学研究和工程技术中出现的各种各样的偏微分方程或方程组。
解偏微分方程已经成为科学与工程计算的核心内容,包括一些大型的计算和很多已经成为常规的计算。
为什么它在当代能发挥这样大的作用呢?第一是计算机本身有了很大的发展;第二是数值求解方程的计算法有了很大的发展,这两者对人们计算能力的发展都是十分重要的。
1.2问题现状近三十年来,解偏微分方程的理论和方法有了很大的发展,而且在各个学科技术的领域中应用也愈来愈广泛,在我国,偏微分方程数值解法作为一门课程,不但在计算数学专业,而且也在其他理工科专业的研究生的大学生中开设。
同时,求解热传导方程的数值算法也取得巨大进展,特别是有限差分法方面,此算法的特点是在内边界处设计不同于整体的格式,将全局的隐式计算化为局部的分段隐式计算。
而且精度上更好。
目前,在欧美各国MATLAB的使用十分普及。
在大学的数学、工程和科学系科,MATLAB苏佳园:二维热传导方程有限差分法的MATLAB实现被用作许多课程的辅助教学手段,MATLAB也成为大学生们必不可少的计算工具,甚至是一项必须掌握的基本技能。
有限差分和Matlabpde求解一维稳态传热问题
有限差分和pde 函数求解一维定态热传导方程分别用有限差分方法和pde 函数求解一维定态热传导方程,初始条件和边界条件,热扩散系数α=0.00001,22T T t x α∂∂=∂∂ (1) 求解过程:1. 用Tylaor 展开法推导出FTCS 格式的差分方程首先对T 进行泰勒展开得到如下两式子:23123123...2!3!23...2!3!nnnn n j j jj j nnnn n j jjjjttT T t x x TTx T T T t t t T T T x x x ++∆∆=+∆+++∆∆=+∆+++⎛⎫⎛⎫∂∂∂⎛⎫⎪ ⎪⎪∂∂∂⎝⎭⎝⎭⎝⎭⎛⎫⎛⎫∂∂∂⎛⎫ ⎪⎪ ⎪∂∂∂⎝⎭⎝⎭⎝⎭上述两个方程变换得:()1122323...23n nnn nn n j j j j jj j T T T T T t T t T o t t tt t t ++--⎛⎫⎛⎫∂∆∂∆∂⎛⎫=--=+∆ ⎪ ⎪ ⎪∂∆∂∂∆⎝⎭⎝⎭⎝⎭ (2)223123...23nnnn n j j jj j T T T x T x T x xx x --⎛⎫⎛⎫∂∆∂∆∂⎛⎫=-- ⎪ ⎪ ⎪∂∆∂∂⎝⎭⎝⎭⎝⎭()1232422342222...3!4!nnnn nnj j j jj j T T T T x T x T x x x x x x +-⎛⎫⎛⎫⎛⎫∂∂∆∂∆∂⎛⎫=--- ⎪ ⎪ ⎪ ⎪∂∆∆∂∂∂⎝⎭⎝⎭⎝⎭⎝⎭ ()()21122222-n n n j j j T T T T o x x x+--+⎛⎫∂=+∆ ⎪∆∂⎝⎭ (3)将上述式子(2)(3)代入(1)得:12112222()nnn nn n n j j j j j j jT T T T T T T O t x t x t x αα+-+--+⎛⎫∂∂⎛⎫-=-+∆∆ ⎪ ⎪∂∂∆∆⎝⎭⎝⎭, (4)2. 方程的相容性和稳定性讨论:上述方程截项为:2233242334()...4...23!3!4!n n n n j jj j t T t T x T x TO t x t t x x α⎛⎫⎛⎫⎛⎫⎛⎫⎛⎫∆∂∆∂∆∂∆∂ ⎪∆∆=--++ ⎪ ⎪ ⎪ ⎪ ⎪∂∂∂∂⎝⎭⎝⎭⎝⎭⎝⎭⎝⎭, 由于(),0,0lim x t o t x ∆∆→∆∆=所以方程有相容性其经过傅里叶变换后,只有当,t x ∆∆满足下列条件时,方程具有较好的稳定性:2220sin 12m k xt x α∆∆≤≤∆ 其中m Nk Lπ=N 为节点个数,L 为边界长度由于:22sin sin 122m k x N x L π∆∆⎛⎫== ⎪⎝⎭所以当20.5ts x α∆=≤∆时方程具有稳定性3. 说明该方程的类型和定解条件,如何在程序中实现这些定解条件。
用有限差分法和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实现
U i1, j , k U i−1, j , k U i , j 1, kU i , j −1, kU i , j , k1 U i , j , k−1 = 6U i , j , k ρ ----- (1) ⋯ ∂ x 2 ∂ x2 6 ∂ x3 ∂ U 1 ∂2 U 1 ∂3 U U i , j 1, k =U i , j ,k ⋯ ∂ y 2 ∂ y2 6 ∂ y3 ∂ U 1 ∂2 U 1 ∂ 3 U U i , j , k1 =U i , j ,k ⋯ ∂ z 2 ∂ z2 6 ∂ z3 ∂ U 1 ∂2 U 1 ∂3 U U i−1, j , k =U i , j , k− − ⋯ ∂ x 2 ∂ x2 6 ∂ x3 ∂ U 1 ∂2 U 1 ∂3 U U i , j 1, k =U i , j , k− − ⋯ ∂ y 2 ∂ y2 6 ∂ y3 ∂ U 1 ∂2 U 1 ∂ 3 U U i , j , k1 =U i , j , k− − ⋯ ∂ z 2 ∂ z2 6 ∂ z3 U i1, j , k =U i , j ,k
= 6U i , j , k ρ
这就是泊松方程的有限差分形式,以下估计该方程的精度: 由泰勒公式,易知有以下结果:
∂U 1 ∂2 U 2 1 ∂3 U 3 h h h ⋯ ∂x 2 ∂ x2 6 ∂ x3 ∂U 1 ∂ 2 U 2 1 ∂3 U 3 U x , y k, z =U x , y , z k k k ⋯ ∂y 2 ∂ y2 6 ∂ y3 2 3 ∂U 1∂ U 2 1∂ U 3 U x , y , z l =U x , y , z l l l ⋯ ∂z 2 ∂ z2 6 ∂ z3 U x h , y , z =U x , y , z
matlab有限差分法
Matlab有限差分法简介有限差分法(Finite Difference Method)是一种常用的数值分析方法,用于求解微分方程。
在工科和科学领域中,微分方程广泛应用于描述物理现象和自然现象,有限差分法提供了一种有效的数值求解方法。
有限差分法原理有限差分法的核心思想是将微分方程中的导数近似为差分,将微分方程转化为由未知函数值构成的代数方程组。
通过解这个代数方程组,可以得到数值解。
一维有限差分法一维有限差分法是最简单的有限差分法形式。
一维有限差分法的基本原理是将一维偏微分方程离散化,将函数替换为离散的节点值,并将导数近似为差分。
然后通过求解代数方程组获得离散节点的函数值。
显式方法在一维有限差分法中,显式方法是最直接的一种方法。
在显式方法中,离散方程可以直接由差分形式得到。
然后通过迭代计算每个节点的函数值,直到收敛为止。
隐式方法与显式方法相比,隐式方法更为稳定,但计算量更大。
在隐式方法中,离散方程的解决需利用矩阵方法,通过求解线性代数方程组得到离散节点的函数值。
二维有限差分法当涉及到二维(或更高维)的偏微分方程时,可以使用二维有限差分法来求解。
二维有限差分法的原理与一维类似,不同之处在于需要将导数近似为二维差分。
分离变量法对于一些特殊的二维偏微分方程,可以利用分离变量法将其转化为一维问题。
然后可以使用一维有限差分法求解。
非分离变量法对于一些复杂的二维偏微分方程,无法通过分离变量法将其简化为一维问题。
这种情况下,可以使用非分离变量法,直接对二维方程进行离散化和求解。
Matlab在有限差分法中的应用Matlab是一种常用的科学计算软件,广泛用于工科和科学领域。
Matlab提供了丰富的数值计算工具箱和函数,可以方便地进行有限差分法的实现和求解。
举例例如,使用Matlab可以通过编写一维离散方程的迭代循环,实现一维有限差分法的求解。
可以根据特定的偏微分方程和边界条件,构建离散方程,然后利用Matlab的求解器求解方程组。
有限差分法解决平面弹性问题的matlab建模仿真
有限差分法解决平面弹性问题的matlab建模仿真用有限差分法解决弹性平面问题的建模与仿真的报告建模与仿真的目的 :解决弹性平面问题——偏心拉伸应力问题,并与实验数值理论解相比较。
建模与仿真的基本原理:有限差分法建模与仿真的方法途径:经过理论推导出所求变量所满足的关系,通过Matlab 软件进行数学建模,将物理语言和数学语言转化成计算机语言,进行计算。
应用软件进行绘图,将抽象的数学表示法转化成直观的形象具体的图像,进行展示,使人们对该建模所研究的问题有更清晰而感性的认识。
报告论文结构:(一)基本原理介绍(差分法)(二)偏心拉伸问题的理论推导(三)建模与仿真的具体方法(应用Matlab 软件)(四)结果展示(五)建模程序特点介绍(六)与实验结果、理论结果的对比(七)前进展望与程序改进(八)任务分工*************************************************************** ****************一、基本原理——有限差分法的介绍有限差分法使用差分方程代替微分方程,从而把基本方程微分方程限组和边界条件求解化为代数方程组的求解。
在将偏微分方程和相应的边界条件转换成有限差分方程之前,我们先将函数的导数改用差分表示,从而导出常用的差分公式。
二、关于偏心拉伸应力问题的理论推导对于边界外一行的结点,我们适当的选择一个基点A ,使得φA =0,(δφ/δx)A =0,(δφ/δy)A =0 ,这样我们可以通过推导得到边界点满足的方程:(δφ/δy)B =∫X B A ds (δφ/δx)B =?∫Y B A ds φB =∫(y B ?y)X B A ds+∫(x ?x B )Y BA ds 而对于边界外一圈的虚结点,有公式:φ13=φ9+2h x (δφ/δx)A φ14=φ10+2h y (δφ/δx)B因而我们可以用内点和边界点表示出边界外一圈虚点,由此平面上的任意点的应力函数都可以用平面上其他十二个点的应力函数表示,列出这些方程,由外及内,依次解出各点的应力函数。
用有限差分法和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在有限差分法数值计算中的应用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实现
第五次作业(前三题写在作业纸上)一、用有限差分方法求解一维非定常热传导方程,初始条件和边界条件见说明.pdf 文件,热扩散系数α=const ,22T T t xα∂∂=∂∂ 1. 用Tylaor 展开法推导出FTCS 格式的差分方程2. 讨论该方程的相容性和稳定性,并说明稳定性要求对求解差分方程的影响。
3. 说明该方程的类型和定解条件,如何在程序中实现这些定解条件。
4. 编写M 文件求解上述方程,并用适当的文字对程序做出说明。
(部分由网络搜索得到,添加,修改后得到。
)function rechuandaopde%以下所用数据,除了t 的范围我根据题目要求取到了20000,其余均从pdf 中得来 a=0.00001;%a 的取值xspan=[0 1];%x 的取值范围tspan=[0 20000];%t 的取值范围ngrid=[100 10];%分割的份数,前面的是t 轴的,后面的是x 轴的f=@(x)0;%初值g1=@(t)100;%边界条件一g2=@(t)100;%边界条件二[T,x,t]=pdesolution(a,f,g1,g2,xspan,tspan,ngrid);%计算所调用的函数[x,t]=meshgrid(x,t);mesh(x,t,T);%画图,并且把坐标轴名称改为x ,t ,Txlabel('x')ylabel('t')zlabel('T')T%输出温度矩阵dt=tspan(2)/ngrid(1);%t 步长h3000=3000/dt;h9000=9000/dt;h15000=15000/dt;%3000,9000,15000下,温度分别在T矩阵的哪些行T3000=T(h3000,:)T9000=T(h9000,:)T15000=T(h15000,:)%输出三个时间下的温度分布%不再对三个时间下的温度-长度曲线画图,其图像就是三维图的截面%稳定性讨论,傅里叶级数法dx=xspan(2)/ngrid(2);%x步长sta=4*a*dt/(dx^2)*(sin(pi/2))^2;if sta>0,sta<2fprintf('\n%s\n','有稳定性')elsefprintf('\n%s\n','没有稳定性')errorend%真实值计算[xe,te,Te]=truesolution(a,f,g1,g2,xspan,tspan,ngrid);[xe,te]=meshgrid(xe,te);mesh(xe,te,Te);%画图,并且把坐标轴名称改为xe,te,Texlabel('xe')ylabel('te')zlabel('Te')Te%输出温度矩阵%误差计算jmax=1/dx+1;%网格点数[rms]=wuchajisuan(T,Te,jmax)rms%输出误差function [rms]=wuchajisuan(T,Te,jmax)for j=1:jmaxrms=((T(j)-Te(j))^2/jmax)^(1/2)endfunction[Ue,xe,te]=truesolution(a,f,g1,g2,xspan,tspan,ngrid)n=ngrid(1);%t份数m=ngrid(2);%x份数Ue=zeros(ngrid);xe=linspace(xspan(1),xspan(2),m);%画网格te=linspace(tspan(1),tspan(2),n);%画网格for j=2:nfor i=2:m-1for g=1:m-1Ue(j,i)=100-(400/(2*g-1)/pi)*sin((2*g-1)*pi*xe(j))*exp(-a*(2*g-1)^2*pi^2*te(i)) endendendfunction [U,x,t]=pdesolution(a,f,g1,g2,xspan,tspan,ngrid)n=ngrid(1);%t份数m=ngrid(2);%x份数h=range(xspan)/(m-1);%x网格长度x=linspace(xspan(1),xspan(2),m);%画网格k=range(tspan)/(n-1); %t网格长度t=linspace(tspan(1),tspan(2),n);%画网格U=zeros(ngrid);U(:,1)=g1(t);%边界条件U(:,m)=g2(t);U(1,:)=f(x);%初值条件%差分计算for j=2:nfor i=2:m -1U(j,i)=(1-2*a*k/h^2)*U(j -1,i)+a*k/h^2*U(j -1,i -1)+a*k/h^2*U(j -1,i+1);endend5. 将温度随时间变化情况用曲线表示x t T6. 给出3000、9000、15000三个时刻的温度分布情况,对温度随时间变化规律做说明。
有限差分法Matlab实现课件
CATALOGUE
有限差分法在解决实际问题中的应用
在求解微分方程中的应用
生物种群模型
传染病模型 化学反应动力学
在求解偏微分方程中的应用
热传导方程 波动方程 弹性力学问题
在图像处理中的应用
图像去噪
图像增强
图像重建
CATALOGUE
Matlab实现的代码示例及解析
一维有限差分法的代码示例及解析
隐式差分法
02
03
边界条件处理
基于一维偏微分方程的隐式差分 法,将连续的函数离散化,用差 分方程近似代替原方程。
对于一维有限差分法,需要特别 处理边界条件,以保证求解的精 度和稳定性。
二维有限差分法的Matlab实现
规则网格 不规则网格 边界条件处理
三维有限差分法的Matlab实现
三维规则网格 三维不规则网格 边界条件处理
Matlab语言简介
Matlab发展史
Matlab的特点
Matlab编程语法
变量与数据类型
01
控制结构
02
函数与脚本
03
Matlab的数据类型
数值型 单元数组
结构体
字符型 逻辑型
CATALOGUE
有限差分法的Matlab实现
一维有限差分法的Matlab实现
01
显式差分法
基于一维偏微分方程的显式差分 法,将连续的函数离散化,用差 分方程近似代替原方程。
有限差分法matlab 实现
contents
目录
• 有限差分法概述 • Matlab编程基础 • 有限差分法的Matlab实现 • 有限差分法在解决实际问题中的应用 • Matlab实现的代码示例及解析
CATALOGUE
matlab 时域有限差分法
matlab 时域有限差分法
时域有限差分法是一种常用的数值求解偏微分方程的方法,也被广泛应用于地球物理、电磁学、声学等领域。
Matlab是一种常用的科学计算软件,其强大的矩阵计算功能和丰富的可视化工具,使其成为时域有限差分法求解偏微分方程的理想工具。
本文将介绍如何使用Matlab实现时域有限差分法,包括离散化、边界条件、数值求解等方面的内容。
同时,还将介绍如何利用Matlab的可视化工具,对时域有限差分法的结果进行可视化展示。
通过本文的学习,读者可以掌握时域有限差分法的基本原理和实现方法,为进一步开展相关领域的研究和应用奠定基础。
- 1 -。
matlab有限差分法
matlab有限差分法有限差分法是一种数值计算方法,用于求解偏微分方程的近似解。
它的基本思想是在定义的网格上近似偏微分方程中的导数,然后将偏微分方程转化为代数方程组,通过求解代数方程组得到近似解。
因此,有限差分法是一种离散化方法。
在有限差分法中,我们需要定义一个网格来离散化要求解的空间,例如我们可以将一个矩形区域分成相等小的正方形网格。
我们还需要定义一个时间网格,用来离散化所求解的时间区间,例如将整个时间区间分成相等的小时间段。
通过将空间和时间分别进行离散化,我们就得到了有限差分法的两个主要元素:网格和时间步长。
在有限差分法中,我们需要用数值来近似地表示空间函数和时间函数。
离散化后的空间和时间函数在网格点处的取值称为网格点数值。
通过近似表示空间和时间函数,我们将物理问题转化为了一个大量的代数问题。
有限差分法的主要思想是使用中心差分公式来计算导数值。
中心差分公式是指:将导数近似为相邻两个网格点之间的差,然后取其平均值,即可得到一个数值。
对于一个二维的偏微分方程,我们可以使用五点差分公式(即中心差分公式的扩展)来计算数值解。
五点差分公式是指:在一个网格点上,使用该点周围四个相邻网格点的取值来计算该点导数值。
通过对每一个网格点应用五点差分公式,我们可以构造出一个代数方程组,通过求解该方程组,我们可以得到偏微分方程的数值解。
有限差分法有很多优点,例如易于实现、计算速度快、稳定性好、适用于不规则区域和边界等。
但有限差分法也有一些缺点,例如精度受限、局限性大、实现复杂等。
总之,有限差分法是求解偏微分方程的重要数值方法,它在科学和工程计算中得到了广泛的应用。
通过对其原理和实现细节的深入学习,我们可以更好地理解它的优点和局限性,从而更加适用于不同实际问题的数值计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
= 6Ui , j , kρ
这就是泊松方程的有限差分形式,以下估计该方程的精度: 由泰勒公式,易知有以下结果:
U
xh
,
y
,
z =U
x
,
y
,
z
∂U ∂x
h
1 2
∂2U ∂ x2
h2
1 6
∂3 U ∂ x3
h3⋯
U
x
,
yk,
z =U
x
,
y
,
z
∂U ∂y
k
1 2
∂2U ∂ y2
k2
1 6
∂3 U ∂ y3
虑二维情况。)
由一个简单的例子出发先讨论:
矩形截面由四块导体板围成,其中一块有 100v,其他三块全部接地(电势为 0),求解平面
各处电势:
解: 基于有限差分法,我们得到的差分形式事实上是线性方程组。
由于边界上的点电势已经作为已知条件所固定。所以实际上的未知数只有 15×9=135 个,而对于
每一个未知数(每一个点),我们都可以写出一个方程(每个点的电势等于它旁边四个点的电势的平均 值),
f
xh− h
f
x
− h
f
x
−
f h
x−h
=
f
xh
f
x−h−2f h2
x
设 U x , y , z为空间电势的函数 。
泊松方程:
∇2U=ρ
使用二阶差分代替泊松方程中的拉普拉斯算符,有:
∑ ∇
2
U
=
∂2 U ∂ x2
∂2 U ∂ y2
∂2 U ∂ z2
=
f xh, y , z f x−h , y , z−2f x , y , z h2
这里,我们通过有限差分的方法,把偏微分方程在三阶精度下简化为形式易于计算的代数方程。从而使 之易于在计算机上实现。
注:有时我们需要解二维静电场,则方程退化为:
U i1,
jU i−1,
jU i ,
j1U i ,
j−1=4Ui ,
j
∂2U ∂ x2
∂2 U ∂ y2
即
U
i1,
jU i−1,
jU i ,
出数值解,在足够的精度上进行逼进,这就引出了有限差分法。
1.1 有限差分法:
有限差分法:
微分:
f
' x=
f
xh− h
f
x
h 0=
dy dx
用有限的 h 代替,使得
f
'
x≈
△ △
y x
差分的种类:
一阶差分:
f xh− f x h
或者
f x −f x−h h
或者
f xh− f x−h 2h
二阶差分:
j , k1=U i ,
j
,
k−
∂U ∂z
12
∂2 U ∂ z2
−
1 6
∂3 U ∂ z3
⋯
上述六式相加
U i1, j , kU i−1, j , kUi , j1, kU i , j−1, kU i , j , k1U i , j , k−1
=
6Ui ,
j
,
k
∂2 U ∂ x2
∂2 U ∂ y2
提前使用新值:因为在上述程序中,我们的扫描赋值方式是一行一行扫描,在对 v2(i,j)赋值时,它 周围四个点其中有 2 个已经被扫描过了,即已经获得了新的数值,这个数值应该更优,所以我们尽量使
用新算出的数值进行迭代,其中:
只要把上述代码中
v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v1(i-1,j)+v1(i,j-1))/4
样的方法解决了文[1]的闪电模拟问题,,使用了更优化的算法对重新进行了计算,并一定程度上改进了 模型,讨论了几个与文[1]所持的不同的观点。
正文:
经典场的边值问题在数学上表达为泊松方程和拉普拉斯方程,但解偏微分方程往往是困难的。幸而
很多时候对于具体问题我们需要的不是解析解,而是数值解,所以可以考虑用连续变量离散化的方法求
∑ 表示分别对三个变元求差分之和,以下相同
矩阵(数组)是计算机中重要的数据结构,为了方便用矩阵去存储数据,我们网格去划分空间,从而不 仅使方程化为简单的有限差分形式,而且这样的数据类型在
计算机中易于储存和运算。那么 h=k=l=1,并且令 f(x,y,z)=u(x,y,z)
就有
U i1, j , kU i−1, j , kU i , j1, kU i , j−1,kU i , j , k1U i , j , k−1
时间复杂度和空间复杂度都比较大,而且对于边界条件较复杂的情况,这样的矩阵会使得程序的编写十
分不便,由于我们给出的差分公式本身就是近似公式,求出该方程的精确解没有实际意义,我们只需要
一个符合精度要求的近似解即可,我们所以我们应该考虑一个效率更高的,更容易实现的算法,那么可
以考虑使用迭代法。
迭代解法:
程序如下:
当 m=1.3 迭代次数 逐行扫描 122 次 隔行扫描:120 对称扫描:104
当 m=1.4 迭代次数 逐行扫描 96 次 隔行扫描:94 对称扫描:78 次
当 m=1.5 迭代次数 逐行扫描 71 次 隔行扫描:69 对称扫描:52 次
当 m=1.6 迭代次数 逐行扫描 43 次 隔行扫描:40 对称扫描:42 次
改为
v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1))/4 解释执行后,k=222;
迭代次数接近原来的一半,可见这样的算法优化是有效的。
为了能使迭代次数进一步减少,考虑让每次迭代获得更多的增量,
那么将:v2(i,j)=(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1))/4; 变形为:v2(i,j)=v1(i,j)+(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))/4; 再考虑:v2(i,j)=v1(i,j)+m*(v1(i,j+1)+v1(i+1,j)+v2(i-1,j)+v2(i,j-1)-4*v1(i,j))/4 适当改变 m 的值是否能够减少迭代次数? 我们做了如下试验:
⋯
U
i,
j
, k1=U
i
,
j
, k
∂U ∂z
12
∂2 U ∂ z2
1 6
∂3U ∂ z3
⋯
U
i−1,
j , k=U i ,
j
,
k−
∂U ∂x
1 2
∂2 U ∂ x2
− 16
∂3 U ∂ x3
⋯
U
i,
j1,k=U i ,
j
,
k−
∂U ∂y
1 2
∂2 U ∂ y2
− 16
∂3 U ∂ y3
⋯
U i ,
lx=17;ly=11;
%定义矩阵维数
v1=zeros(ly,lx); for j=2:lx-1 v1(ly,j)=100;
%建立一个矩阵
end
v2=v1;maxt=1;t=0; k=0;
%设置边界条件
while(maxt>1e-6)
%精度要求,达到精度要求跳出循环
k=k+1
maxt=0;
for i=2:ly-1
end end b=a^(-1); c=zeros(135,1); for i=121:135 c(i,1)=25;end d=b*c;s=zeros(11,17);for i=2:16 s(11,i)=100; end for i=1:9
for j=1:15; s(i+1,j+1)=d(15*(i-1)+j,1);
j1U i ,
j−1=4Ui ,
j
∂2U ∂ x2
∂2 U ∂ y2
1.2 算法选择:
下面我们对算法再进行一些讨论。
MATLAB 的 M 语言本身带有矩阵的数据类型,且 MATLAB 具有高效的数值计算功能。所以我 们选择通过 MATLAB 的 M 语言去实现这种算法。
(可以看出,三维情况与二维情况没有本质的区别,所以在一下的一系列讨论中,我们为方便起见都只考
有限差分法解静电场的边值问题的算法实现及相关问题讨论:
王宁远
中国科学技术大学 09 级物理 2 班 E-mail wny@
摘要:
本文用 MATLAB 实现了有限差分法解静电场边值问题的算法,将偏微分方程的问题化为线性方程
组问题,并使用了迭代法进行线性方程组的数值解。讨论了从几个角度去优化迭代法的措施。并运用这
for i=2:14 a(i,i-1)=-0.25;a(i,i+1)=-0.25; a(i,i+15)=-0.25; end for i=122:134 a(i,i-1)=-0.25;a(i,i+1)=-0.25; a(i,i-15)=-0.25; end for i=1:7
for j=2:14; a(15*i+j,15*i+j-1)=-0.25; a(15*i+j,15*i+j+1)=-0.25; a(15*i+j,15*i+j+15)=-0.25; a(15*i+j,15*i+j-15)=-0.25;
从物理意义上考虑,方程确实是独立的,所以方程是可解的,我们那么考虑构造一个 135 阶的方阵,只