有限差分法
有限差分法

有限差分法finite difference method用差分代替微分,是有限差分法的基本出发点。
是一种微分方程和积分微分方程数值解的方法。
把连续的定解区域用有限个离散点构成的网格来代替,这些离散点称作网格的节点;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
然后再利用插值方法便可以从离散解得到定解问题在整个区域上的近似解。
如何根据问题的特点将定解区域作网格剖分;如何把原微分方程离散化为差分方程组以及如何解此代数方程组。
此外为了保证计算过程的可行和计算结果的正确,还需从理论上分析差分方程组的性态,包括解的唯一性、存在性和差分格式的相容性、收敛性和稳定性。
对于一个微分方程建立的各种差分格式,为了有实用意义,一个基本要求是它们能够任意逼近微分方程,这就是相容性要求。
另外,一个差分格式是否有用,最终要看差分方程的精确解能否任意逼近微分方程的解,这就是收敛性的概念。
此外,还有一个重要的概念必须考虑,即差分格式的稳定性。
因为差分格式的计算过程是逐层推进的,在计算第n+1层的近似值时要用到第n层的近似值,直到与初始值有关。
前面各层若有舍入误差,必然影响到后面各层的值,如果误差的影响越来越大,以致差分格式的精确解的面貌完全被掩盖,这种格式是不稳定的,相反如果误差的传播是可以控制的,就认为格式是稳定的。
只有在这种情形,差分格式在实际计算中的近似解才可能任意逼近差分方程的精确解。
最常用的方法是数值微分法,比如用差商代替微商等。
另一方法叫积分插值法,因为在实际问题中得出的微分方程常常反映物理上的某种守恒原理,一般可以通过积分形式来表示。
此外还可以用待定系数法构造一些精度较高的差分格式。
龙格库塔龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。
有限差分法的原理与计算步骤

有限差分法的原理与计算步骤有限差分法(Finite Difference Method)是一种常用的数值计算方法,用于求解偏微分方程的数值解。
其基本原理是将连续的偏微分方程转化为差分方程,通过逼近导数,使用离散的点代替连续的点,从而将问题转化为代数问题。
下面将详细介绍有限差分法的原理和计算步骤:一、基本原理:有限差分法基于Taylor级数展开,通过利用函数在其中一点附近的导数信息来逼近函数在该点处的值。
该方法将连续的偏微分方程转化为差分方程,使用离散的点代替连续的点,从而将问题转化为代数问题。
在有限差分法中,常用的差分逼近方式有前向差分、后向差分和中心差分。
二、计算步骤:1.网格划分:将求解区域划分为有限个离散点,并定义网格上的节点和网格尺寸。
通常使用等距离网格,即每个网格点之间的间距相等。
2.离散化:将偏微分方程中的各个导数项进行逼近,利用差分近似来替代和求解。
一般采用中心差分逼近方式,即通过函数值在两侧点的差来逼近导数。
3.代数方程系统:利用离散化的差分方程,将偏微分方程转化为代数方程系统。
根据问题的边界条件和初值条件,构建代数方程系统的系数矩阵和常数向量。
4. 求解代数方程:利用求解线性方程组的方法求解代数方程系统,常用的方法有直接法(如高斯消元法、LU分解法)和迭代法(如Jacobi迭代法、Gauss-Seidel迭代法)。
求解得到各个离散点的解。
5.后处理:根据求解结果进行后处理,包括结果的插值和可视化。
将离散点的解通过插值方法进行平滑处理,并进行可视化展示,以得到连续的函数解。
三、优缺点:1.直观:有限差分法基于网格划分,易于理解和实现。
2.精度可控:可通过调整网格大小和差分逼近方式来控制计算的精度。
3.广泛适用性:可用于求解各种偏微分方程,适用于不同的边界条件和初值条件。
然而,有限差分法也存在一些缺点:1.精度依赖网格:计算结果的精度受到网格划分的影响,因此需要谨慎选择网格大小。
2.限制条件:有限差分法适用于边界对应点处导数有定义的问题,不适用于奇异点和非线性问题。
有限差分法

两端都要给定边界条件(双程坐标) 。
9
(C) 双曲型方程:适当的边界条件和初始条件,与波动传 播的性质有关 如:一维对流方程
∂u ∂u +c =0 ∂t ∂x u (x ,0) = f (x )
解为 u (x , t ) = f (x − ct ) ,代表一个向右(c > 0 时)或向左 ( c < 0 时)传播的波形。必须在波形传来的一侧提供边界条 件(单程坐标) 。
10
不适定的例子:
utt + u xx = 0 u (x ,0) = u t (x ,0) = 0
拉普拉斯方程+非闭域边界条件,解为 u (x , t ) ≡ 0 。 然而,若定解条件为 u (x ,0) = 0, ut (x ,0) =
u (x , t ) = 1 sin nx ,解为 n
1 sinh nt sin nx n
(
)
n n um+1 = um −
cτ n n um +1 − um −1 2h
(
)
设计算到第 n 步时的累积误差
n ~n εn = 计算值um − 差分法精确解um m
反之
n ~n um = εn + um m
15
则第 n+1 步的计算值
~n ~ n cτ u n − u n ~ ~ um+1 = um − m +1 m −1 2h cτ n cτ n n n = um − um +1 − um −1 + εn − εm +1 − εn −1 m m 2h 2h n = um+1 + εn +1 m
uin +1 − uin −1 uin+1 − uin +1 − uin −1 − uin−1 −α =0 Lh u = τ h2 ατ 2 ⎛ ∂ 2u ⎞ τ 2 ⎛ ∂ 3u ⎞ Ti = Lh u − Lu (x i , t n ) = 2 ⎜ 2 ⎟ + ⎜ 3 ⎟ − L 截断误差 6 ⎜ ∂t ⎟i h ⎜ ∂t ⎟i ⎝ ⎠ ⎝ ⎠
有限差分法

有限差分法有限差分法是数学领域的一项最新成果,它在某些特定情况下能得到非常好的结果。
所谓有限差分方程就是利用积分和求差公式将差分方程化成为多个等价的偏微分方程组的组合形式,然后再应用最优化方法求解这种方程组,从而得出未知数的近似值。
当已知方程组的每个参数及其变量代入数据计算后的误差时,只要对其进行必要的调整或者修改后,就可获得满意的精度与效率的估计值。
此外,还可以通过有限差分方程的求解来了解其物理背景。
比如说在物体碰撞问题中,两个质点之间距离的测量往往涉及到很复杂的三维几何关系。
即使是一个小的距离误差也会引起很大的误差。
因此,对于碰撞问题中两个质点之间的相互位置误差测量,必须考虑它们之间的三维几何关系,并根据具体问题建立相应的坐标系统。
有限差分方程可以用来描述许多不同类型的实际问题,例如质量、压力、速度、温度、流动、热传导、声音和电磁场等。
但是由于数学模型本身的复杂性,使得有限差分方程在求解上遇到了困难。
因此,人们开始寻找一种更加直观的方法来解决问题。
有限差分法正是基于此原理提出的。
利用有限差分方程求解偏微分方程,我们首先要给出所求解的偏微分方程的数学表达式,这样才能够在有限差分方程的数学模型中寻找解析解。
有限差分方程的解析解,需要借助解析函数的理论来确定。
但是在自然科学和工程技术领域里,对于一般的实际问题,很少会存在着某种数学模型完全适合于所有的具体问题,那么对于任意一个偏微分方程,总是存在着一个解析解。
当把偏微分方程的解析解用适当的坐标表示出来后,有限差分方程的求解就转化为如何寻找与这个解相对应的函数值的问题。
通常,解析函数的形式是比较复杂的,因此需要运用数值方法进行拟合,从而得到符合实际的数学表达式。
然后通过对这个数学表达式的求解来确定所求偏微分方程的解析解。
这种数值求解方法称为数值积分法。
在研究有限元法和边界元法时都可以采用一些简单易行而且计算机可能很容易处理的函数作为边界条件,而这些函数本身又是很容易计算的。
有限差分法推导

有限差分法推导【最新版】目录1.有限差分法的基本概念2.有限差分法的推导方法3.有限差分法的应用实例4.有限差分法的优缺点正文一、有限差分法的基本概念有限差分法是一种数值计算方法,主要应用于求解偏微分方程的初值问题。
它是通过将连续的函数值用有限个离散点上的函数值来代替,从而将偏微分方程转化为关于这些离散点上的代数方程组。
这种方法可以有效地降低问题的复杂度,使得求解过程更加简便。
二、有限差分法的推导方法有限差分法的推导过程主要包括以下几个步骤:1.对边界条件进行离散处理,将边界上的函数值用有限个离散点上的函数值来代替。
2.对偏微分方程进行离散处理,将偏微分方程转化为关于这些离散点上的代数方程组。
3.求解代数方程组,得到离散点上的函数值。
4.通过插值方法,将离散点上的函数值还原为连续函数。
三、有限差分法的应用实例有限差分法广泛应用于各种物理、工程和数学问题中,例如求解热传导方程、波动方程和亥姆霍兹方程等。
下面以求解一维热传导方程为例,展示有限差分法的应用过程。
假设我们要求解如下的热传导方程:u/t = k * ^2u/x^2x = [0, 1]t = [0, T]边界条件:u(0, t) = f(t), u(1, t) = 0初始条件:u(x, 0) = 0我们可以通过以下步骤应用有限差分法:1.对边界条件进行离散处理,将边界上的函数值用有限个离散点上的函数值来代替。
2.对偏微分方程进行离散处理,将偏微分方程转化为关于这些离散点上的代数方程组。
3.求解代数方程组,得到离散点上的函数值。
4.通过插值方法,将离散点上的函数值还原为连续函数。
四、有限差分法的优缺点有限差分法具有以下优点:1.适用范围广泛,可以应用于各种偏微分方程的初值问题。
2.推导过程相对简单,容易理解和实现。
3.计算精度较高,可以通过增加离散点数来提高精度。
然而,有限差分法也存在以下缺点:1.计算量较大,需要处理大量的代数方程组。
2.对于某些问题,可能需要进行特殊的处理,例如处理不稳定的代数方程组。
有限差分法

有限差分法有限差分法(Finite Differential Method, FDM )什么是有限差分法 有限差分法是指用泰勒技术展开式将变量的导数写成变量,在不同时间或空间点值的差分形式的方法。
按时间步长和空间步长将时间和空间区域剖分成若干网格,用未知函数在网格结(节)点上的值所构成的差分近似代替所用偏微分方程中出现的各阶导数,从而把表示变量连续变化关系的偏微分方程离散为有限个代数方程,然后解此线性代数方程组,以求出溶质在各网格结(节)点上不同时刻的浓度。
有限差分法的基本步骤(1)剖分渗流区,确定离散点。
将所研究的水动力弥散区域按某种几何形状(如矩形、任意多边形等)剖分成网络系统。
(2)建立水动力弥散问题的差分方程组。
(3)求解差分方程组。
采用各种迭代法,如点逐次超松驰方法(SOR)、线逐次超松驰方法(LSOR)、迭代的交替方向隐式方法(IADI)及强隐式方法(SID)等。
(1) 现在分别对时间(从0时刻到到期日)和股票价格(S max )为可达到的足够高的股票价格)进行分割,即\triangle S=S_{max}/M,\triangle T/N,这样就分别有N+1个时间段和M+1个股票价格,建立如图(所示的坐标方格,将定解区域网格化,坐标方格上的点(i,j )对应时刻和股票价格,用变量f i ,j 表示(i,j )点的期权价格。
2.建立差分格式(1)内含的有限差分方法其步骤可分为以下几步:(1)求前向差分近似:(2) 后向差分格式:(3)将(2),(3)式平均可更加对称地求出的近似,即(4)(2)求用前向差分近似:(5)(3)求(6)(4)将(4),(5),(6)式代入(1)式可得到内含有限差分公式:+ b j f i,j−c j f i,j + 1 = f i + 1,j(7)aj f i,j− 1其中:i=0,1,…,N-1。
j=0,1…,M-1针对看跌期权和看涨期权可分别求出方程的边界条件:看跌期权:看涨期权:(5)利用边界条件和(7)式可以给出M-1个联立方程组:+ b j f N− 1,j + c j f N− 1,j + 1j=1,2…,M-1aj f N− 1,j− 1求解这M-1个联立方程组即可以求出期权价格,但对美式看跌期权时我们必须考虑其提前执行的情况。
微分方程数值求解——有限差分法

1. 引言有限差分法(Finite Difference Method,FDM)是一种求解微分方程数值解的近似方法,其主要原理是对微分方程中的微分项进行直接差分近似,从而将微分方程转化为代数方程组求解。
有限差分法的原理简单,粗暴有效,最早由远古数学大神欧拉(L. Euler 1707-1783)提出,他在1768年给出了一维问题的差分格式。
1908年,龙格(C. Runge 1856-1927)将差分法扩展到了二维问题【对,就是龙格-库塔法中的那个龙格】。
但是在那个年代,将微分方程的求解转化为大量代数方程组的求解无疑是将一个难题转化为另一个难题,因此并未得到大量的应用。
随着计算机技术的发展,快速准确地求解庞大的代数方程组成为可能,因此逐渐得到大量的应用。
发展至今,有限差分法已成为一个重要的数值求解方法,在工程领域有着广泛的应用背景。
本文将从有限差分法的原理、基本差分公式、误差估计等方面进行概述,给出其基本的应用方法,对于一些深入的问题不做讨论。
2. 有限差分方法概述首先,有限差分法是一种求解微分方程的数值方法,其面对的对象是微分方程,包括常微分方程和偏微分方程。
此外,有限差分法需要对微分进行近似,这里的近似采取的是离散近似,使用某一点周围点的函数值近似表示该点的微分。
下面将对该方法进行概述。
2.1. 有限差分法的基本原理这里我们使用一个简单的例子来简述有限差分法的基本原理,考虑如下常微分方程\begin{cases} u'(x)+c(x)u(x)=f(x), \quad x \in [a, b]; \\u(x=a) = d \end{cases} \tag{1}微分方程与代数方程最大的不同就是其包含微分项,这也是求解微分方程最难处理的地方。
有限差分法的基本原理即使用近似方法处理微分方程中的微分项。
为了得到微分的近似,我们最容易想到的即导数定义u'(x)=\lim_{\Delta x\rightarrow 0} \frac{u(x+\Delta x)-u(x)}{\Delta x}\approx \frac{u(x+\Delta x)-u(x)}{\Delta x} \tag{2}上式后面的近似表示使用割线斜率近似替代切线斜率,\Delta x 即为步长,如图 1(a)所示。
有限差分法基本原理

有限差分法的应用领域
流体力学
用于模拟流体在固定或变形网格 上的流动,如计算流体动力学 (CFD)中的数值模拟。
热传导
用于求解热传导方程,模拟热 量在物体中的传播和分布。
波动传播
用于求解波动方程,如地震波 、声波和电磁波的传播。
有限差分法基本原理
CONTENTS 目录
• 引言 • 有限差分法的基本原理 • 有限差分法的实现 • 有限差分法的优缺点 • 有限差分法的改进方向
CHAPTER 01
引言
有限差分法的定义
有限差分法是一种数值计算方法,通 过将连续的物理量离散化为有限个离 散点上的数值,并建立代数方程来近 似描述物理量随时间和空间的变化规 律。
缺点
精度问题
由于有限差分法采用的是离散化的方法, 因此其精度受到网格大小的影响,网格越
小精度越高,但同时也会增加计算量。
数值耗散误差
在模拟非线性问题时,有限差分法可能会 产生数值耗散误差,导致能量的损失或者
非物理振荡。
数值色散误差
在模拟波动性问题时,有限差分法可能会 产生数值色散误差,导致波的传播速度发 生变化。
常用的离散化方法包括均匀网格、非均匀网格、有限元法等,
应根据实际问题选择合适的离散化方法。
差分近似
Hale Waihona Puke 01差分近似公式根据微分方程的性质,构造差分 近似公式,将微分方程转化为差 分方程。
精度分析
02
03
稳定性分析
分析差分近似公式的精度,确定 其与微分方程的误差大小和分布。
分析差分近似公式的数值稳定性, 确保计算过程中误差不会累积放 大。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有限差分法一、单变量函数:用中心差分法(matlab程序见附录)计算结果如下:图1 中心差分法表1 数据对比二、一维热传导:在此取φ(x)=0,g1(t)= g2(t)=100-100*exp(-t)问题描述:已知厚度为l的无限大平板,初温0度,初始瞬间将其放于温度为100度的流体中,流体与板面间的表面传热系数为一常数。
试确定在非稳态过程中板内的温度分布。
(1)显式差分法:图3 显式差分法(2)隐式差分法:图4 隐式差分法小结:显式格式仅当时格式是稳定的。
(其中称为网格比)隐式格式从k层求k+1层时,需要求解一个阶方程组。
而且隐式格式的稳定性对网格比没有要求,即为绝对稳定的。
三、Possion方程:取f=1,R=1图5差分法图6 误差小结:观察误差曲面,其绝对误差数量级为附Matlab程序:第1题:%===========================Boundary Value Problem 1clear;clc;A=[-2.01 1 0 0 0 0 0 0 0;1 -2.01 1 0 0 0 0 0 0;0 1 -2.01 1 0 0 0 0 0;0 0 1 -2.01 1 0 0 0 0;0 0 0 1 -2.01 1 0 0 0;0 0 0 0 1 -2.01 1 0 0;0 0 0 0 0 1 -2.01 1 0;0 0 0 0 0 0 1 -2.01 1;0 0 0 0 0 0 0 1 -2.01;];c1=[0.1;0.2;0.3;0.4;0.5;0.6;0.7;0.8;0.9];C=0.01*c1-1*[0;0;0;0;0;0;0;0;1];y=A\C;x=0:0.1:1;yn=[0;y;1];ye=2*(exp(x)-exp(-x))/(exp(1)-exp(-1))-x;figure(1);plot(x,yn,'*',x,ye);legend('numerical solution','exact solution')xlabel('x','fontsize',20);ylabel('y','fontsize',20);set(gca,'fontsize',18);figure(2);err=abs(ye'-yn);plot(x,err);legend('error')xlabel('x','fontsize',20);ylabel('y','fontsize',20);set(gca,'fontsize',18);第2题:%========================Boundary Value Problem 1_Explicit %显式clear;clcl=20;%板厚h=1;%步长J=l/h;T=50;%时间tao=2.5;%步长N=T/tao;%下面组合A矩阵a=0.2;lamda=tao/(h^2);zhu=1-2*a*lamda;ce=a*lamda;a00=ones(1,J-1);a0=diag(a00);A0=zhu*a0;a01=ones(1,J-2);a1=diag(a01,1);A1=ce*a1;a2=diag(a01,-1);A2=ce*a2;A=A0+A1+A2;u(:,1)=0; %板的初始温度for i=2:N+1u(1,i)=100-100*exp(-(i-1)*tao); %边界条件u(J+1,i)=100-100*exp(-(i-1)*tao); %边界条件end% g01=u(:,1);% g02=u(:,J);for k=1:N% g01=ce*g1(1,k);% g02=ce*g2(1,k);oo=zeros(J-3,1);g(:,k)=[ce*u(1,k);oo;ce*u(J+1,k)];u(2:end-1,k+1)=A*u(2:end-1,k)+g(:,k);endt=0:h:l;x=0:tao:T;mesh(x,t,u)xlabel('t','fontsize',20);ylabel('x','fontsize',20);zlabel('T','fontsize',20);set(gca,'fontsize',18);%========================Boundary Value Problem 1_2Implicit %隐式clear;clcl=20;%板厚h=1;%步长J=l/h;T=50;%时间tao=2.5;%步长N=T/tao;%下面组合A矩阵a=0.2;lamda=tao/(h^2);zhu=1+2*a*lamda;ce=-a*lamda;a00=ones(1,J-1);a0=diag(a00);A0=zhu*a0;a01=ones(1,J-2);a1=diag(a01,1);A1=ce*a1;a2=diag(a01,-1);A2=ce*a2;A=A0+A1+A2;u(:,1)=0; %板的初始温度for i=2:N+1u(1,i)=100-100*exp(-(i-1)*tao); %边界条件u(J+1,i)=100-100*exp(-(i-1)*tao); %边界条件end% g01=u(:,1);% g02=u(:,J);for k=1:N% g01=ce*g1(1,k);% g02=ce*g2(1,k);oo=zeros(J-3,1);g(:,k)=[ce*u(1,k);oo;ce*u(J+1,k)];u(2:end-1,k+1)=inv(A)*u(2:end-1,k)-inv(A)*g(:,k);endt=0:h:l;x=0:tao:T;mesh(x,t,u)xlabel('t','fontsize',20);ylabel('x','fontsize',20);zlabel('T','fontsize',20);set(gca,'fontsize',18);第3题:%=============================used by centered difference clear;function pdemodel[pde_fig,ax]=pdeinit;pdetool('appl_cb',1);set(ax,'DataAspectRatio',[1 1 1]);set(ax,'PlotBoxAspectRatio',[1.5 1 1]);set(ax,'XLim',[-1.5 1.5]);set(ax,'YLim',[-1 1]);set(ax,'XTickMode','auto');set(ax,'YTickMode','auto');% Geometry description:pdecirc(0,0,1,'C1');set(findobj(get(pde_fig,'Children'),'Tag','PDEEval'),'String','C1')% Boundary conditions:pdetool('changemode',0)pdesetbd(4,...'dir',...1,...'1',...'0')pdesetbd(3,...'dir',...1,...'1',...'0')pdesetbd(2,...'dir',...1,...'1',...'0')pdesetbd(1,...'dir',...1,...'1',...'0')% Mesh generation:setappdata(pde_fig,'Hgrad',1.3);setappdata(pde_fig,'refinemethod','regular');pdetool('initmesh')pdetool('refine')% PDE coefficients:pdeseteq(1,...'1.0',...'0.0',...'1',...'1.0',...'0:10',...'0.0',...'0.0',...'[0 100]')setappdata(pde_fig,'currparam',...['1.0';...'0.0';...'1 ';...'1.0'])% Solve parameters:setappdata(pde_fig,'solveparam',...str2mat('0','1524','10','pdeadworst',...'0.5','longest','0','1E-4','','fixed','Inf'))% Plotflags and user data strings:setappdata(pde_fig,'plotflags',[1 1 1 1 1 1 1 1 0 0 0 1 0 0 1 0 0 1]); setappdata(pde_fig,'colstring','');setappdata(pde_fig,'arrowstring','');setappdata(pde_fig,'deformstring','');setappdata(pde_fig,'heightstring','');% Solve PDE:pdetool('solve')。