有限差分法及matlab实现

合集下载

二维有限差分 代码 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有限差分法一、前言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解法:分离变量法和有限差分法。

问题描述:本实验旨在利用分离变量法和有限差分法解决热传导方程问题,并使用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

有限差分法求解偏微分方程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

有限差分 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实现

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

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

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

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

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

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

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

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

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

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

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

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

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

而且精度上更好。

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

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

有限差分和Matlabpde求解一维稳态传热问题

有限差分和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计算二维热加工温度场分析最新版本

用有限差分法和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)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 阶的方阵,只
相关文档
最新文档