差分法求解偏微分方程MAAB
matlab有限差分法求解非齐次偏微分方程
《使用 MATLAB 有限差分法求解非齐次偏微分方程》在科学和工程领域,偏微分方程是描述自然现象和过程中关键的数学工具。
非齐次偏微分方程作为其中的一个重要分支,在描述真实世界中的复杂现象方面具有广泛的应用。
而 MATLAB 作为一个强大的数学建模和计算工具,其有限差分法求解非齐次偏微分方程的能力受到了广泛关注。
在本文中,我们将以 MATLAB 为工具,探讨有限差分法如何用于求解非齐次偏微分方程,以及其中涉及的深度和广度。
1. 偏微分方程及有限差分法简介当我们研究自然界中的变化和现象时,经常会遇到连续变量之间的相关性和变化规律。
偏微分方程便是用来描述这些连续变量之间关系的数学工具。
而有限差分法则是一种数值计算方法,通过将连续的变量离散化,将偏微分方程转化为代数方程组,从而求解偏微分方程的数值解。
2. 非齐次偏微分方程的求解非齐次偏微分方程与常见的齐次偏微分方程相比,具有更复杂的边界和初始条件,因此其求解方法也更为复杂。
通过有限差分法,我们可以将非齐次偏微分方程转化为离散的代数方程组,进而求解出数值解。
3. MATLAB 中有限差分法的实现MATLAB 提供了丰富的数学建模和计算工具,包括用于求解偏微分方程的函数和工具箱。
通过调用这些函数和工具箱,我们可以方便地实现有限差分法对非齐次偏微分方程的求解。
4. 示例应用与个人观点我们将以一个实际的例子,展示 MATLAB 中有限差分法求解非齐次偏微分方程的过程,并共享对这一过程的个人观点和理解。
通过该示例,我们能更深刻地理解有限差分法在求解非齐次偏微分方程中的应用,以及其中涉及的数学原理和算法流程。
总结与回顾在本文中,我们以 MATLAB 为工具,探讨了有限差分法求解非齐次偏微分方程的深度和广度。
通过对有限差分法的基本原理和实际应用进行全面评估,我们详细介绍了有限差分法在求解非齐次偏微分方程中的具体步骤和流程。
我们也共享了在示例应用中对这一过程的个人理解和观点,以期帮助读者更全面、深刻和灵活地理解该主题。
matlab有限差分法求解非齐次偏微分方程
matlab有限差分法求解非齐次偏微分方程【导语】本文将介绍matlab有限差分法在求解非齐次偏微分方程中的应用。
非齐次偏微分方程是数学和物理学中的常见问题之一,它们描述了许多实际系统的行为。
通过有限差分法,可以将偏微分方程转化为差分方程,从而利用计算机来求解。
本文将从原理、步骤和实例三个方面来分析非齐次偏微分方程的有限差分法求解过程。
【正文】一、原理有限差分法是将连续函数在一系列有限的点上进行逼近的方法。
它的基本思想是用差分代替微分,将偏导数转化为差分算子。
通过对空间和时间离散化,将非齐次偏微分方程转化为差分方程组,再利用数值计算的方法求解这个差分方程组,从而得到非齐次偏微分方程的近似解。
具体而言,有限差分法将求解区域划分为网格,并在网格上近似表示偏微分方程中的函数。
利用中心差分公式或向前、向后差分公式来近似计算偏导数。
通过将偏微分方程中的微分算子替换为差分近似,可以将方程转化为一个代数方程组,进而求解得到非齐次偏微分方程的近似解。
二、步骤1. 确定求解的区域和方程:首先要确定求解的区域,然后确定非齐次偏微分方程的形式。
在matlab中,可以通过定义一个矩阵来表示求解区域,并将方程转化为差分算子形式。
2. 离散化:将求解区域划分为网格,确定每个网格点的位置,建立网格点之间的连接关系。
通常,使用均匀网格来离散化求解区域,并定义网格点的坐标。
3. 建立差分方程组:根据偏微分方程的形式和离散化的结果,建立差分方程组。
根据中心差分公式,用网格点上的函数值和近邻点的函数值来近似计算偏导数。
将差分算子应用于非齐次偏微分方程的各个项,得到差分方程组。
4. 求解差分方程组:利用线性代数求解差分方程组。
将方程组转化为矩阵形式,利用matlab中的线性方程组求解功能,得到差分方程组的近似解。
通过调整求解区域划分的精细程度和差分算子的选取,可以提高求解的精度。
5. 回代和结果分析:将求解的结果回代到原非齐次偏微分方程中,分析其物理意义和数值稳定性。
最新偏微分方程的matlab解法
求解双曲型方程的例子
例24.2.1 用 MATLAB 求解下面波动方程定解问题并动态显示解的分布
2u (2u t 2 x2
2u ) 0 y 2
u
|x
1
u
|x1
0,
u y
y 1
u y
y1 0
π
π
u(x,
y, 0)
atan[ sin(
2
x)], ut
( x,
y,
0)
2
cos(πx)
保持在100 °C,板的右边热量从板向环境空气定常流动,
t t 其他边及内孔边界保持绝缘。初始
°C ,于是概括为如下定解问题;
是板的温度为0 0
d u u0 , t
u 1 0 0 ,在 左 边 界 上
u 1, 在 右 边 界 上 n u = 0, 其 他 边 界 上 n
u t to 0
区域的边界顶点坐标为(-0.5,-0.8), (0.5,-0.8), (-0.5,0.8), (0.5,0.8)。 内边界顶点坐标(-0.05,-0.4), (-0.05,0.4) ,(0.05,-0.4), (0.05,0.4)。
第七步:单击Plot菜单中Parameter选项,打开Plot Selection对话框,选中Color,Height(3D plot)和 Show mesh三项.再单击Polt按钮,显示三维图形解, 如图22.5所示.
第八步:若要画等值线图和矢量场图,单击plot菜单 中parameter 选项,在plot selection对话框中选中 contour 和arrow两选项。然后单击plot按钮,可显示 解的等值线图和矢量场图,如图2.6所示。
网格划分,细化
【精品】差分法malab解波动方程
【关键字】精品波动方程的差分逼近1、 问题介绍:波动方程是描述波在同性均质弹性介质内传播的微分方程,它也是线性双曲型偏微分方程的最简模型。
它的一般形式是:2、 区域剖分:构造上式的差分逼近,取空间步长h 和时间步长τ,用两族平行直线作矩形网格。
3、 离散格式:显格式:于网点),(n j t x 用Taylor 展式,并整理方程得:隐格式: 上述显格式并不是绝对稳定的差分格式,为了得到绝对稳定的差分格式,用第1-n 层、 n 层、1+n 层的中心差商的权平均去逼近xx u ,得到下列差分格式:⎪⎪⎪⎩⎪⎪⎪⎨⎧+-++--++-=+-+-++==----+-++-+++-++-]22)21(2[2),()()1()]()([2),(211111211211111221110210102100h u u u h u u u h u u u a u u u x x r x x r u 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 j j j j j j j θθθττϕϕϕϕϕ其中10≤≤θ是参数。
当0=θ时就是显格式,而当41=θ时可以证明该格式绝对稳定。
隐格式的矩阵形式是:其中:4、格式稳定性:1)显格式:显格式稳定的充分必要条件是:网格比1<r 。
2)隐格式:当41=θ时隐格式绝对稳定。
5、数值例子:当1=a 时可以证明 )(),(t x e t x u +=是波动方程xu a t u 2222∂∂=∂∂ 的一个解析解。
那么,为了更精确的得到误差估计,在这里选取)(),(t x et x u +=作数值实验。
取1010≤≤≤≤t x ,并且将时间步长20等分,空间步长10等分(即10/1,20/1==h τ)。
这样网格比12/1/<==τah r ,从稳定性分析可知,此时格式稳定。
经计算得到下列数值结果:(注:下列数值结果按层排序,每层按x从小到大排序,每个结果包含三部分,分别是:估计值、真实值、误差)第1层1.161812 1.161834 0.000022 1.284001 1.284025 0.000024 1.419040 1.419068 0.0000271.568282 1.568312 0.000030 1.733220 1.733253 0.000033 1.915504 1.915541 0.0000372.116960 2.117000 0.000040 2.339602 2.339647 0.000045 2.585660 2.585710 0.000049第2层1.221365 1.221403 0.000038 1.349812 1.349859 0.000047 1.491773 1.491825 0.0000521.648664 1.648721 0.000057 1.822055 1.822119 0.0000642.013683 2.013753 0.0000702.225463 2.225541 0.000078 2.459517 2.459603 0.000086 2.718201 2.718282 0.000081第3层1.283981 1.284025 0.000044 1.419001 1.419068 0.000066 1.568237 1.568312 0.0000751.733170 1.733253 0.000083 1.915450 1.915541 0.0000912.116899 2.117000 0.0001012.339535 2.339647 0.000111 2.585590 2.585710 0.000120 2.857562 2.857651 0.000090第4层1.349816 1.349859 0.000043 1.491745 1.491825 0.000080 1.648626 1.648721 0.0000951.822014 1.822119 0.0001052.013636 2.013753 0.000116 2.225412 2.225541 0.0001282.459462 2.459603 0.000141 2.718142 2.718282 0.0001403.004087 3.004166 0.000079第5层1.419029 1.419068 0.000038 1.568226 1.568312 0.000086 1.733142 1.733253 0.0001111.915416 1.915541 0.0001252.116862 2.117000 0.000138 2.339494 2.339647 0.0001532.585546 2.585710 0.000164 2.857510 2.857651 0.0001413.158134 3.158193 0.000059第6层1.491791 1.491825 0.000034 1.648638 1.648721 0.000084 1.821997 1.822119 0.0001222.013611 2.013753 0.000142 2.225383 2.225541 0.000157 2.459431 2.459603 0.000172 2.718108 2.718282 0.0001743.004043 3.004166 0.000123 3.320077 3.320117 0.000040第7层1.568281 1.568312 0.000031 1.733177 1.733253 0.000076 1.915416 1.915541 0.0001252.116846 2.117000 0.000154 2.339474 2.339647 0.000173 2.585525 2.585710 0.000185 2.857485 2.857651 0.0001663.158101 3.158193 0.000092 3.490316 3.490343 0.000027第8层1.648692 1.648721 0.000029 1.822052 1.822119 0.0000672.013632 2.013753 0.0001212.225380 2.225541 0.000161 2.459420 2.459603 0.000183 2.718096 2.718282 0.0001863.004025 3.004166 0.000141 3.320059 3.320117 0.000058 3.669279 3.669297 0.000017第9层1.733226 1.733253 0.000027 1.915482 1.915541 0.0000592.116891 2.117000 0.0001092.339487 2.339647 0.000160 2.585525 2.585710 0.000185 2.857481 2.857651 0.0001703.158092 3.158193 0.000101 3.490313 3.490343 0.000030 3.857417 3.857426 0.000008第10层1.822096 1.822119 0.0000232.013700 2.013753 0.000052 2.225446 2.225541 0.0000952.459455 2.459603 0.000148 2.718110 2.718282 0.0001723.004029 3.004166 0.0001373.320061 3.320117 0.000056 3.669288 3.669297 0.0000084.055204 4.055200 0.000004第11层1.915523 1.915541 0.0000182.116954 2.117000 0.000046 2.339567 2.339647 0.0000792.585584 2.585710 0.000125 2.857511 2.857651 0.0001413.158106 3.158193 0.0000873.490329 3.490343 0.000014 3.857435 3.857426 0.0000104.263132 4.263115 0.000018第12层2.013740 2.013753 0.000013 2.225503 2.225541 0.000038 2.459540 2.459603 0.0000642.718191 2.718282 0.0000913.004079 3.004166 0.000087 3.320090 3.320117 0.0000273.669318 3.669297 0.0000214.055230 4.055200 0.000030 4.481721 4.481689 0.000032第13层2.116993 2.117000 0.000007 2.339621 2.339647 0.000026 2.585665 2.585710 0.0000442.857607 2.857651 0.0000453.158178 3.158193 0.000015 3.490378 3.490343 0.0000353.857478 3.857426 0.0000524.263170 4.263115 0.000055 4.711515 4.711470 0.000045第14层2.225540 2.225541 0.000001 2.459592 2.459603 0.000011 2.718265 2.718282 0.0000173.004180 3.004166 0.000014 3.320184 3.320117 0.000067 3.669391 3.669297 0.0000944.055285 4.055200 0.000085 4.481773 4.481689 0.000084 4.953089 4.953032 0.000057第15层2.339653 2.339647 0.000006 2.585719 2.585710 0.000010 2.857675 2.857651 0.0000243.158275 3.158193 0.000082 3.490491 3.490343 0.000148 3.857575 3.857426 0.0001504.263241 4.263115 0.000127 4.711583 4.711470 0.0001135.207048 5.206980 0.000068第16层2.459619 2.459603 0.000016 2.718319 2.718282 0.0000373.004247 3.004166 0.0000813.320275 3.320117 0.000158 3.669515 3.669297 0.0002184.055406 4.055200 0.0002064.481866 4.481689 0.000177 4.953174 4.953032 0.0001415.474030 5.473947 0.000082第17层2.585741 2.585710 0.000031 2.857725 2.857651 0.0000743.158343 3.158193 0.0001503.490577 3.490343 0.000234 3.857702 3.857426 0.0002764.263378 4.263115 0.0002644.711703 4.711470 0.0002335.207152 5.206980 0.000172 5.754702 5.754603 0.000099第18层2.718335 2.718282 0.0000533.004290 3.004166 0.000124 3.320343 3.320117 0.0002263.669602 3.669297 0.0003054.055527 4.055200 0.000327 4.482013 4.481689 0.0003244.953321 4.953032 0.0002885.474155 5.473947 0.0002086.049766 6.049647 0.000118第19层2.857735 2.857651 0.0000843.158380 3.158193 0.000187 3.490645 3.490343 0.0003023.857793 3.857426 0.0003684.263492 4.263115 0.000377 4.711853 4.711470 0.0003835.207320 5.206980 0.000340 5.754852 5.754603 0.0002496.359959 6.359820 0.000140第20层3.004290 3.004166 0.000124 3.320374 3.320117 0.000257 3.669668 3.669297 0.0003714.055622 4.055200 0.000422 4.482123 4.481689 0.000434 4.953469 4.953032 0.0004375.474336 5.473947 0.0003886.049943 6.049647 0.000296 6.686058 6.685894 0.000164上述数值结果是按照显格式分量形式用C编程所求得。
matlab求解初边值问题的偏微分方程
偏微分方程是描述自然界中动态过程的重要数学工具,在工程领域中,求解偏微分方程是很多实际问题的重要一步。
MATLAB作为一种强大的数学计算软件,提供了丰富的工具和函数来求解各种类型的偏微分方程。
本文将介绍使用MATLAB求解初边值问题的偏微分方程的方法和步骤。
一、MATLAB中的偏微分方程求解工具MATLAB提供了几种可以用来求解偏微分方程的工具和函数,主要包括:1. pdepe函数:用于求解偏微分方程初边值问题的函数,可以处理各种类型的偏微分方程,并且可以自定义边界条件和初始条件。
2. pdepeplot函数:用于绘制pdepe函数求解得到的偏微分方程的解的可视化图形,有助于直观地理解方程的解的特性。
3. pdetool工具箱:提供了一个交互式的图形用户界面,可以用来建立偏微分方程模型并进行求解,适用于一些复杂的偏微分方程求解问题。
二、使用pdepe函数求解偏微分方程初边值问题的步骤对于给定的偏微分方程初边值问题,可以按照以下步骤使用pdepe函数进行求解:1. 定义偏微分方程需要将给定的偏微分方程转化为标准形式,即将偏微分方程化为形式为c(x,t,u)∂u/∂t = x(r ∂u/∂x) + ∂(p∂u/∂x) + f(x,t,u)的形式。
2. 编写边界条件和初始条件函数根据实际问题的边界条件和初始条件,编写相应的函数来描述这些条件。
3. 设置空间网格选择合适的空间网格来离散空间变量,可以使用linspace函数来产生均匀分布的网格。
4. 调用pdepe函数求解偏微分方程将定义好的偏微分方程、边界条件和初始条件函数以及空间网格作为参数传递给pdepe函数,调用该函数求解偏微分方程。
5. 可视化结果使用pdepeplot函数绘制偏微分方程的解的可视化图形,以便对解的性质进行分析和理解。
三、实例分析考虑一维热传导方程初边值问题:∂u/∂t = ∂^2u/∂x^2, 0<x<1, 0<t<1u(0,t) = 0, u(1,t) = 0, u(x,0) = sin(πx)使用MATLAB求解该初边值问题的步骤如下:1. 定义偏微分方程将热传导方程化为标准形式,得到c(x,t,u) = 1, r = 1, p = 1, f(x,t,u) = 0。
偏微分方程的MATLAB解法
引言微分方程定解问题有着广泛的应用背景。
人们用偏微分方程来描述、解释或者预见各种自然现象,并用于科学和工程技术的各个领域fll。
然而,对于广大应用工作者来说,从偏微分方程模型出发,使用有限元法或有限差分法求解都要耗费很大的工作量,才能得到数值解。
现在,MATLAB PDEToolbox已实现对于空间二维问题高速、准确的求解过程。
偏微分方程果一个微分方程中出现的未知函数只含一个自变量,这个方程叫做常微分方程,也简称微分方程;如果一个微分方程中出现多元函数的偏导数,或者说如果未知函数和几个变量有关,而且方程中出现未知函数对几个变量的导数,那么这种微分方程就是偏微分方程。
用的方法有变分法和有限差分法。
变分法是把定解问题转化成变分问题,再求变分问题的近似解;有限差分法是把定解问题转化成代数方程,然后用计算机进行计算;还有一种更有意义的模拟法,它用另一个物理的问题实验研究来代替所研究某个物理问题的定解。
虽然物理现象本质不同,但是抽象地表示在数学上是同一个定解问题,如研究某个不规则形状的物体里的稳定温度分布问题,由于求解比较困难,可作相应的静电场或稳恒电流场实验研究,测定场中各处的电势,从而也解决了所研究的稳定温度场中的温度分布问题。
着物理科学所研究的现象在广度和深度两方面的扩展,偏微分方程的应用范围更广泛。
从数学自身的角度看,偏微分方程的求解促使数学在函数论、变分法、级数展开、常微分方程、代数、微分几何等各方面进行发展。
从这个角度说,偏微分方程变成了数学的中心。
一、MATLAB方法简介及应用1.1 MATLAB简介ATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
1.2 Matlab主要功能数值分析数值和符号计算工程与科学绘图控制系统的设计与仿真数字图像处理数字信号处理通讯系统设计与仿真财务与金融工程1.3 优势特点1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来;2) 具有完备的图形处理功能,实现计算结果和编程的可视化;3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握;4) 功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具。
五点差分法(matlab)解椭圆型偏微分方程
用差分法解椭圆型偏微分方程-(Uxx+Uyy)=(pi*pi-1)e^xsi n(pi*y) 0<x<2; 0<y<1U(0,y)=sin(pi*y),U(2,y)=e^ 2sin(pi*y); 0=<y<=1 U(x,0)=0, U(x,1)=0; 0=<x<=2先自己去看一下关于五点差分法的理论书籍Matlab程序:unction[p e u x y k]=wudianchafenfa(h,m, n,kmax,ep)% g-s迭代法解五点差分法问题%kmax为最大迭代次数%m,n为x,y方向的网格数,例如(2-0)/0.01=200;%e为误差,p为精确解syms temp;u=zeros(n+1,m+1);x=0+(0:m)*h;y=0+(0:n)*h;for(i=1:n+1)u(i,1)=sin(pi*y(i));u(i,m+1)=exp(1)*exp(1) *sin(pi*y(i));endfor(i=1:n)for(j=1:m)f(i,j)=(pi*pi-1)*exp(x (j))*sin(pi*y(i));endendt=zeros(n-1,m-1);for(k=1:kmax)for(i=2:n)for(j=2:m)temp=h*h*f(i,j)/4+(u(i ,j+1)+u(i,j-1)+u(i+1,j )+u(i-1,j))/4;t(i,j)=(temp-u(i,j))*( temp-u(i,j));u(i,j)=temp;endendt(i,j)=sqrt(t(i,j));if(k>kmax)break;endif(max(max(t))<ep)break;endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j))*sin(p i*y(i));e(i,j)=abs(u(i,j)-exp( x(j))*sin(pi*y(i)));endEnd在命令窗口中输入:[p e u x y k]=wudianchafenfa(0.1,20, 10,10000,1e-6) k=147 surf(x,y,u) ;xlabel(‘x’);ylabel(‘y’); zlabel(‘u’);Title(‘五点差分法解椭圆型偏微分方程例1’)就可以得到下图surf(x,y,p)surf(x,y,e)[p e u x y k]=wudianchafenfa(0.05,4 0,20,10000,1e-6)[p e u x y k]=wudianchafenfa(0.025,80,40,10000,1e-6)为什么分得越小,误差会变大呢?我们试试运行:[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-8)K=2164surf(x,y,e)误差变小了吧还可以试试[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-10)K=3355误差又大了一点再试试[p e u x y k]=wudianchafenfa(0.025, 80,40,10000,1e-11)k=3952误差趋于稳定总结:最终的误差曲面与网格数有关,也与设定的迭代前后两次差值(ep,看程序)有关;固定网格数,随着设定的迭代前后两次差值变小,误差由大比变小,中间有一个最小值,随着又增大一点,最后趋于稳定。
基于MATLAB的偏微分方程差分解法
基于MATLAB的偏微分方程差分解法学院:核工程与地球物理学院专业:勘查技术与工程班级:1120203学号:姓名:2014/6/11在科学技术各领域中,有很多问题都可以归结为偏微分方程问题。
在物理专业的力学、热学、电学、光学、近代物理课程中都可遇见偏微分方程。
偏微分方程,再加上边界条件、初始条件构成的数学模型,只有在很特殊情况下才可求得解析解。
随着计算机技术的发展,采用数值计算方法,可以得到其数值解。
近些年来,求解偏微分方程的数值方法取得进展,特别是有限差分区域分解算法,此类算法的特点是在内边界处设计不同于整体的格式, 将全局的隐式计算化为局部的分段隐式计算。
使人从感觉上认为这样得到的解会比全局隐式得到的解的精度差,但大量的数值实验表明事实正好相反,用区域分解算法求得的解的精度更好。
差分方法又称为有限差分方法或网格法,是求偏微分方程定解问题的数值解中应用最广泛的方法之一。
它的基本思想是:先对求解区域作网格剖分,将自变量的连续变化区域用有限离散点(网格点)集代替;将问题中出现的连续变量的函数用定义在网格点上离散变量的函数代替;通过用网格点上函数的差商代替导数,将含连续变量的偏微分方程定解问题化成只含有限个未知数的代数方程组(称为差分格式)。
如果差分格式有解,且当网格无限变小时其解收敛于原微分方程定解问题的解,则差分格式的解就作为原问题的近似解(数值解)。
因此,用差分方法求偏微分方程定解问题一般需要解决以下问题:(i )选取网格;(ii )对微分方程及定解条件选择差分近似,列出差分格式; (iii )求解差分格式;(iv )讨论差分格式解对于微分方程解的收敛性及误差估计。
下面对偏微分方程具体例题的差分解法作一简要的介绍。
§1 双曲型方程中波动方程的有限差分解法。
1.1 双曲型的差分方程通过建立网格并求解中心差分方程结果为:22,1,1,1,,1(22)(),2,3,1i j i j i j i j i j u r u r u u u i n ++--=-++-=-。
偏微分方程的matlab解法
图 22.2 定解问题的边界
第四步:设置方程类型
选择PDE菜单中PDE Mode命令,进入PDE模式, 再单击PDE菜单中PDE Secification选项,打开 PDE Secification对话框,设置方程类型. 本例取抛物型方程 d
u (cu ) au f , t
故参数c,a,f,d,分别是l,0,10,1. 第五步:选择Mesh菜单中Initialize Mesh命令, 进行网格剖分, 选择Mesh菜单中Refine Mesh命令,使网格密集化,
例如,对于细杆导热,虽然是一维问题, 可以将宽度y虚拟出来,对应于y的边界 条件和初始条件按照题意制定
Boundary Mode
PDE Mode
PDE Specification,确定偏 微分方程类型共有四种:
椭圆形Elliptic
抛物型Parabolic
双曲型Hyperbolic
如图22.3.
图 22.3 网格密集化
第六步: 解偏微分方程并显示图形解 选择Solve菜单中Solve PDE命令,解 偏微分方程并显示图形解,如图 2.4 所示
第七步:单击Plot菜单中Parameter选项,打开Plot Selection对话框,选中Color,Height(3D plot)和 Show mesh三项.再单击Polt按钮,显示三维图形解, 如图22.5所示.
例: 解热传导方程 ut u f 边界条件是齐次类型,定解区域自定。
【解】 第一步:启动MATLAB,键入命令pdetool并回车, 就进入GUI.在Options菜单下选择Gid命令,打开栅 格,栅格使用户容易确定所绘图形的大小. 第二步:选定定解区域本题为自定区域:自拟定解区 域如图22 1所示:E1-E2+R1-E3.具体用快捷工具分 别画椭圆E1、圆E2、矩形R1、圆E3.然后在Set formula栏中进行编辑并用算术运算符将图形对象名 称连接起来(或删去默认的表达式,直接键入E1E2+R1-E3)
MATLAB中的偏微分方程数值解法
MATLAB中的偏微分方程数值解法偏微分方程(Partial Differential Equations,PDEs)是数学中的重要概念,广泛应用于物理学、工程学、经济学等领域。
解决偏微分方程的精确解往往非常困难,因此数值方法成为求解这类问题的有效途径。
而在MATLAB中,有丰富的数值解法可供选择。
本文将介绍MATLAB中几种常见的偏微分方程数值解法,并通过具体案例加深对其应用的理解。
一、有限差分法(Finite Difference Method)有限差分法是最为经典和常用的偏微分方程数值解法之一。
它将偏微分方程的导数转化为差分方程,通过离散化空间和时间上的变量,将连续问题转化为离散问题。
在MATLAB中,使用有限差分法可以比较容易地实现对偏微分方程的数值求解。
例如,考虑一维热传导方程(Heat Equation):∂u/∂t = k * ∂²u/∂x²其中,u为温度分布随时间和空间的变化,k为热传导系数。
假设初始条件为一段长度为L的棒子上的温度分布,边界条件可以是固定温度、热交换等。
有限差分法可以将空间离散化为N个节点,时间离散化为M个时刻。
我们可以使用中心差分近似来计算二阶空间导数,从而得到以下差分方程:u(i,j+1) = u(i,j) + Δt * (k * (u(i+1,j) - 2 * u(i,j) + u(i-1,j))/Δx²)其中,i表示空间节点,j表示时间步。
Δt和Δx分别为时间和空间步长。
通过逐步迭代更新节点的温度值,我们可以得到整个时间范围内的温度分布。
而MATLAB提供的矩阵计算功能,可以大大简化有限差分法的实现过程。
二、有限元法(Finite Element Method)有限元法是另一种常用的偏微分方程数值解法,特点是适用于复杂的几何形状和边界条件。
它将求解区域离散化为多个小单元,通过构建并求解代数方程组来逼近连续问题。
在MATLAB中,我们可以使用Partial Differential Equation Toolbox提供的函数进行有限元法求解。
偏微分方程数值解法的MAAB源码
[原创]偏微分方程数值解法的MATLAB源码【更新完毕】说明:由于偏微分的程序都比较长,比其他的算法稍复杂一些,所以另开一贴,专门上传偏微分的程序谢谢大家的支持!其他的数值算法见:..//Announce/Announce.asp?BoardID=209&id=82450041、古典显式格式求解抛物型偏微分方程(一维热传导方程)function[Uxt]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典显式格式求解抛物型偏微分方程%[Uxt]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C)%%方程:u_t=C*u_xx0<=x<=uX,0<=t<=uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t),u(uX,t)=psi2(t)%%输出参数:U-解矩阵,第一行表示初值,第一列和最后一列表示边值,第二行表示第2层……%?????x-空间变量%?????t-时间变量%输入参数:uX-空间变量x的取值上限%?????uT-时间变量t的取值上限%?????phi-初值条件,定义为内联函数%?????psi1-边值条件,定义为内联函数%?????psi2-边值条件,定义为内联函数%?????M-沿x轴的等分区间数%?????N-沿t轴的等分区间数%?????C-系数,默认情况下C=1%%应用举例:%uX=1;uT=0.2;M=15;N=100;C=1;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0');%[Uxt]=PDEParabolicClassicalExplicit(uX,uT,phi,psi1,psi2,M,N,C);%设置参数C的默认值ifnargin==7??C=1;end%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=C*dt/dx/dx;%步长比r1=1-2*r;ifr>0.5??disp('r>0.5,不稳定')end%计算初值和边值U=zeros(M+1,N+1);fori=1:M+1??U(i,1)=phi(x(i));endforj=1:N+1??U(1,j)=psi1(t(j));??U(M+1,j)=psi2(t(j));end%逐层求解forj=1:N??fori=2:M?????U(i,j+1)=r*U(i-1,j)+r1*U(i,j)+r*U(i+1,j); ??endendU=U';%作出图形mesh(x,t,U);title('古典显式格式,一维热传导方程的解的图像') xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;古典显式格式不稳定情况古典显式格式稳定情况2、古典隐式格式求解抛物型偏微分方程(一维热传导方程)function[Uxt]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%古典隐式格式求解抛物型偏微分方程%[Uxt]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C)%%方程:u_t=C*u_xx0<=x<=uX,0<=t<=uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t),u(uX,t)=psi2(t)%%输出参数:U-解矩阵,第一行表示初值,第一列和最后一列表示边值,第二行表示第2层……%?????x-空间变量%?????t-时间变量%输入参数:uX-空间变量x的取值上限%?????uT-时间变量t的取值上限%?????phi-初值条件,定义为内联函数%?????psi1-边值条件,定义为内联函数%?????psi2-边值条件,定义为内联函数%?????M-沿x轴的等分区间数%?????N-沿t轴的等分区间数%?????C-系数,默认情况下C=1%%应用举例:%uX=1;uT=0.2;M=50;N=50;C=1;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0');%[Uxt]=PDEParabolicClassicalImplicit(uX,uT,phi,psi1,psi2,M,N,C);%设置参数C的默认值ifnargin==7??C=1;end%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=C*dt/dx/dx;%步长比Diag=zeros(1,M-1);%矩阵的对角线元素Low=zeros(1,M-2);%矩阵的下对角线元素Up=zeros(1,M-2);%矩阵的上对角线元素fori=1:M-2??Diag(i)=1+2*r;??Low(i)=-r;??Up(i)=-r;endDiag(M-1)=1+2*r;%计算初值和边值U=zeros(M+1,N+1);fori=1:M+1??U(i,1)=phi(x(i));endforj=1:N+1??U(1,j)=psi1(t(j));??U(M+1,j)=psi2(t(j));end%逐层求解,需要使用追赶法(调用函数EqtsForwardAndBackward)forj=1:N??b1=zeros(M-1,1);??b1(1)=r*U(1,j+1);??b1(M-1)=r*U(M+1,j+1);??b=U(2:M,j)+b1;??U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U';%作出图形mesh(x,t,U);title('古典隐式格式,一维热传导方程的解的图像')xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;此算法需要使用追赶法求解三对角线性方程组,这个算法在上一篇帖子中已经给出,为了方便,再给出来追赶法解三对角线性方程组functionx=EqtsForwardAndBackward(L,D,U,b) %追赶法求解三对角线性方程组Ax=b%x=EqtsForwardAndBackward(L,D,U,b)%x:三对角线性方程组的解%L:三对角矩阵的下对角线,行向量%D:三对角矩阵的对角线,行向量%U:三对角矩阵的上对角线,行向量%b:线性方程组Ax=b中的b,列向量%%应用举例:%L=[-1-2-3];D=[2345];U=[-1-2-3];b=[61-21]'; %x=EqtsForwardAndBackward(L,D,U,b)%检查参数的输入是否正确n=length(D);m=length(b);n1=length(L);n2=length(U);ifn-n1~=1||n-n2~=1||n~=m??disp('输入参数有误!')??x='';??return;end%追的过程fori=2:n??L(i-1)=L(i-1)/D(i-1);??D(i)=D(i)-L(i-1)*U(i-1); endx=zeros(n,1);x(1)=b(1);fori=2:n??x(i)=b(i)-L(i-1)*x(i-1);end%赶的过程x(n)=x(n)/D(n);fori=n-1:-1:1??x(i)=(x(i)-U(i)*x(i+1))/D(i); endreturn;古典隐式格式在以后的程序中,我们都取C=1,不再作为一个输入参数处理3、Crank-Nicolson隐式格式求解抛物型偏微分方程需要调用追赶法的程序function[Uxt]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N)%Crank-Nicolson隐式格式求解抛物型偏微分方程%[Uxt]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N)%%方程:u_t=u_xx0<=x<=uX,0<=t<=uT%初值条件:u(x,0)=phi(x)%边值条件:u(0,t)=psi1(t),u(uX,t)=psi2(t)%%输出参数:U-解矩阵,第一行表示初值,第一列和最后一列表示边值,第二行表示第2层……%?????x-空间变量%?????t-时间变量%输入参数:uX-空间变量x的取值上限%?????uT-时间变量t的取值上限%?????phi-初值条件,定义为内联函数%?????psi1-边值条件,定义为内联函数%?????psi2-边值条件,定义为内联函数%?????M-沿x轴的等分区间数%?????N-沿t轴的等分区间数%%应用举例:%uX=1;uT=0.2;M=50;N=50;%phi=inline('sin(pi*x)');psi1=inline('0');psi2=inline('0'); %[Uxt]=PDEParabolicCN(uX,uT,phi,psi1,psi2,M,N);%计算步长dx=uX/M;%x的步长dt=uT/N;%t的步长x=(0:M)*dx;t=(0:N)*dt;r=dt/dx/dx;%步长比Diag=zeros(1,M-1);%矩阵的对角线元素Low=zeros(1,M-2);%矩阵的下对角线元素Up=zeros(1,M-2);%矩阵的上对角线元素fori=1:M-2??Diag(i)=1+r;??Low(i)=-r/2;??Up(i)=-r/2;endDiag(M-1)=1+r;%计算初值和边值U=zeros(M+1,N+1);fori=1:M+1??U(i,1)=phi(x(i));endforj=1:N+1??U(1,j)=psi1(t(j));??U(M+1,j)=psi2(t(j));endB=zeros(M-1,M-1);fori=1:M-2??B(i,i)=1-r;??B(i,i+1)=r/2;??B(i+1,i)=r/2;endB(M-1,M-1)=1-r;%逐层求解,需要使用追赶法(调用函数EqtsForwardAndBackward)forj=1:N??b1=zeros(M-1,1);??b1(1)=r*(U(1,j+1)+U(1,j))/2;??b1(M-1)=r*(U(M+1,j+1)+U(M+1,j))/2;??b=B*U(2:M,j)+b1;??U(2:M,j+1)=EqtsForwardAndBackward(Low,Diag,Up,b);endU=U';%作出图形mesh(x,t,U);title('Crank-Nicolson隐式格式,一维热传导方程的解的图像')xlabel('空间变量x')ylabel('时间变量t')zlabel('一维热传导方程的解U')return;Crank-Nicolson隐式格式4、正方形区域Laplace方程Diriclet问题的求解需要调用Jacobi迭代法和Guass-Seidel迭代法求解线性方程组function[Uxy]=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type) %正方形区域Laplace方程的Diriclet边值问题的差分求解%此程序需要调用Jacobi迭代法或者Guass-Seidel迭代法求解线性方程组%[Uxy]=PDEEllipseSquareLaplaceDirichlet(ub,phi1,phi2,psi1,psi2,M,type)%%方程:u_xx+u_yy=0?0<=x,y<=ub%边值条件:u(0,y)=phi1(y)%?????u(ub,y)=phi2(y)%?????u(x,0)=psi1(x)%?????u(x,ub)=psi2(x)%%输出参数:U-解矩阵,第一行表示y=0时的值,第二行表示第y=h时的值……%?????x-横坐标%?????y-纵坐标%输入参数:ub-变量边界值的上限%?????phi1,phi2,psi1,psi2-边界函数,定义为内联函数%?????M-横纵坐标的等分区间数%?????type-求解差分方程的迭代格式,若type='Jacobi',采用Jacobi迭代格式%?????????若type='GS',采用Guass-Seidel迭代格式。
matlab 求解偏微分方程
matlab 求解偏微分方程求解偏微分方程是数学中的一种重要问题,而MATLAB是一种功能强大的数学软件,可以用于求解各种数学问题,包括偏微分方程。
在本文中,我们将探讨如何使用MATLAB求解偏微分方程,并介绍一些常用的求解方法和技巧。
偏微分方程是描述自然界中许多现象的数学模型,例如热传导、扩散、波动等。
求解偏微分方程的目标是找到满足方程条件的未知函数。
MATLAB提供了许多内置函数和工具箱,可以方便地进行偏微分方程的求解。
我们需要定义偏微分方程的边界条件和初始条件。
边界条件是指在求解区域的边界上给定的条件,而初始条件是指在求解区域内给定的初始状态。
这些条件将帮助我们确定偏微分方程的解。
接下来,我们可以使用MATLAB中的偏微分方程求解函数来求解方程。
MATLAB提供了几种常用的求解方法,例如有限差分法、有限元法和谱方法等。
通过选择合适的求解方法,我们可以得到偏微分方程的数值解。
在使用MATLAB求解偏微分方程时,我们还可以使用一些技巧和优化方法来提高求解效率。
例如,可以使用网格剖分方法来将求解区域划分为若干小区域,从而减少计算量。
此外,还可以使用迭代方法来逐步逼近偏微分方程的解,从而提高求解精度。
除了求解偏微分方程,MATLAB还可以用于可视化偏微分方程的解。
通过使用MATLAB的绘图函数,我们可以将数值解以图形的形式展示出来,从而更直观地理解偏微分方程的解。
需要注意的是,在使用MATLAB求解偏微分方程时,我们需要考虑计算资源的限制。
由于偏微分方程的求解通常需要大量的计算和存储资源,因此我们需要合理安排计算机的内存和处理器的使用,以避免计算过程中的错误或崩溃。
总结起来,MATLAB是一种强大的数学软件,可以用于求解偏微分方程。
通过选择合适的求解方法和优化技巧,我们可以得到偏微分方程的数值解,并用图形的形式展示出来。
使用MATLAB求解偏微分方程可以帮助我们更好地理解和解决实际问题,是数学研究和工程应用中的重要工具之一。
matlab用差分法求解边值问题
MATLAB是一种强大的数学软件工具,用于解决各种数学问题,包括边值问题。
差分法是一种常用的数值分析方法,可以用于求解微分方程的边值问题。
本文将介绍如何使用MATLAB的差分法求解边值问题,包括算法原理、具体步骤和示例代码。
1. 算法原理差分法是一种数值解微分方程的常用方法,它的基本思想是用离散点代替连续函数,然后利用差分代替导数,将微分方程转化为代数方程,最终得到离散点上的数值解。
对于边值问题,差分法可以通过离散化区域,并在区域边界处使用相应的差分格式来求解。
2. 具体步骤(1)离散化区域需要将求解的区域进行离散化,将其划分为若干个离散点,形成一个网格。
这可以通过在区域内部建立均匀或非均匀的网格来实现。
(2)建立代数方程利用差分公式将原微分方程转化为代数方程。
根据边值问题的具体条件,可以构建相应的代数方程组。
(3)求解代数方程组利用MATLAB的线性方程求解器,如“backslash”运算符(\),求解得到代数方程组的解,即为边值问题的数值解。
3. 示例代码下面是一个简单的边值问题求解的MATLAB示例代码,以二阶常微分方程为例:``` MATLAB定义区域范围和离散步长a = 0;b = 1;N = 10; 离散点个数h = (b - a) / N; 离散步长构建代数方程组A = zeros(N-1, N-1);b = zeros(N-1, 1);for i = 1:N-1A(i, i) = 2/h^2;if i > 1A(i, i-1) = -1/h^2;endif i < N-1A(i, i+1) = -1/h^2;endb(i) = f(a + i*h); 右端项end求解代数方程组u = A \ b;绘制数值解x = a:h:b;plot(x, [0; u; 0]);```在这个示例代码中,我们首先定义了求解区域范围和离散步长,然后根据差分格式建立了代数方程组,并使用MATLAB的线性方程求解器求解得到数值解,最后绘制了数值解的图像。
五点差分法(matlab)解椭圆型偏微分方程(1)精选全文
精选全文完整版(可编辑修改)用差分法解椭圆型偏微分方程-(Uxx+Uyy)=(pi*pi-1)e^xsin(pi*y)0<x<2; 0<y<1U(0,y)=sin(pi*y),U(2,y)=e^2sin(pi*y); 0=<y<=1U(x,0)=0, U(x,1)=0;0=<x<=2先自己去看一下关于五点差分法的理论书籍Matlab程序:unction[p e u x y k]=wudianchafenfa(h,m,n,kmax,ep)% g-s迭代法解五点差分法问题%kmax为最大迭代次数%m,n为x,y方向的网格数,例如(2-0)/0.01=200;%e为误差,p为精确解symstemp;u=zeros(n+1,m+1);x=0+(0:m)*h;y=0+(0:n)*h;for(i=1:n+1)u(i,1)=sin(pi*y(i));u(i,m+1)=exp(1)*exp(1)*sin(pi*y(i));endfor(i=1:n)for(j=1:m)f(i,j)=(pi*pi-1)*exp(x(j))*sin(pi*y(i));endendt=zeros(n-1,m-1);for(k=1:kmax)for(i=2:n)for(j=2:m)temp=h*h*f(i,j)/4+(u(i,j+1)+u(i,j-1)+u(i+1,j)+u (i-1,j))/4;t(i,j)=(temp-u(i,j))*(temp-u(i,j));u(i,j)=temp;endendt(i,j)=sqrt(t(i,j));if(k>kmax)break;endif(max(max(t))<ep)break;endendfor(i=1:n+1)for(j=1:m+1)p(i,j)=exp(x(j))*sin(pi*y(i));e(i,j)=abs(u(i,j)-exp(x(j))*sin(pi*y(i)));endEnd在命令窗口中输入:[p e u xyk]=wudianchafenfa(0.1,20,10,10000,1e-6) k=147surf(x,y,u) ;xlabel(‘x’);ylabel(‘y’);zlabel(‘u’);Title(‘五点差分法解椭圆型偏微分方程例1’)就可以得到下图surf(x,y,p)surf(x,y,e)[p e uxy k]=wudianchafenfa(0.05,40,20,10000,1e-6)[pe u x y k]=wudianchafenfa(0.025,80,40,10000,1e-6)为什么分得越小,误差会变大呢?我们试试运行:[pe u x yk]=wudianchafenfa(0.025,80,40,10000,1e-8)K=2164surf(x,y,e)误差变小了吧还可以试试[p e ux y k]=wudianchafenfa(0.025,80,40,10000,1e-10) K=3355误差又大了一点再试试[peu x y k]=wudianchafenfa(0.025,80,40,10000,1e-11)k=3952 误差趋于稳定总结:最终的误差曲面与网格数有关,也与设定的迭代前后两次差值(ep,看程序)有关;固定网格数,随着设定的迭代前后两次差值变小,误差由大比变小,中间有一个最小值,随着又增大一点,最后趋于稳定。
matlab差分法解偏微分方程
Matlab 差分法解偏微分方程1.引言解偏微分方程是数学和工程领域中的一项重要课题,它在科学研究和工程实践中具有广泛的应用。
而 Matlab 差分法是一种常用的数值方法,用于求解偏微分方程。
本文将介绍 Matlab 差分法在解偏微分方程中的应用,包括原理、步骤和实例。
2. Matlab 差分法原理差分法是一种离散化求解微分方程的方法,通过近似替代微分项来求解微分方程的数值解。
在 Matlab 中,差分法可以通过有限差分法或者差分格式来实现。
有限差分法将微分方程中的导数用有限差分替代,而差分格式指的是使用不同的差分格式来近似微分方程中的各个项,通常包括前向差分、后向差分和中心差分等。
3. Matlab 差分法步骤使用 Matlab 差分法解偏微分方程一般包括以下步骤:(1)建立离散化的区域:将求解区域离散化为网格点或节点,并确定网格间距。
(2)建立离散化的时间步长:对于时间相关的偏微分方程,需要建立离散化的时间步长。
(3)建立离散化的微分方程:使用差分法将偏微分方程中的微分项转化为离散形式。
(4)建立迭代方程:根据离散化的微分方程建立迭代方程,求解数值解。
(5)编写 Matlab 代码:根据建立的迭代方程编写 Matlab 代码求解数值解。
(6)求解并分析结果:使用 Matlab 对建立的代码进行求解,并对结果进行分析和后处理。
4. Matlab 差分法解偏微分方程实例假设我们要使用 Matlab 差分法解决以下一维热传导方程:∂u/∂t = α * ∂^2u/∂x^2其中 u(x, t) 是热传导方程的温度分布,α 是热扩散系数。
4.1. 离散化区域和时间步长我们将求解区域离散化为网格点,分别为 x_i,i=1,2,...,N。
时间步长为Δt。
4.2. 离散化的微分方程使用中心差分格式将偏微分方程中的导数项离散化得到:∂u/∂t ≈ (u_i(t+Δt) - u_i(t))/Δt∂^2u/∂x^2 ≈ (u_i-1(t) - 2u_i(t) + u_i+1(t))/(Δx)^2代入原偏微分方程可得离散化的微分方程:(u_i(t+Δt) - u_i(t))/Δt = α * (u_i-1(t) - 2u_i(t) + u_i+1(t))/(Δx)^24.3. 建立迭代方程根据离散化的微分方程建立迭代方程:u_i(t+Δt) = u_i(t) + α * Δt * (u_i-1(t) - 2u_i(t) + u_i+1(t))/(Δx)^24.4. 编写 Matlab 代码使用以上建立的迭代方程编写 Matlab 代码求解热传导方程。
使用matlab差分法解偏微分方程
使用matlab差分法解偏微分方程1. 引言差分法是一种常用的数值方法,用于求解偏微分方程(Partial Differential Equations,简称PDE)的数值解。
在工程学和科学研究中,PDE广泛应用于描述各种物理现象和过程。
本文将介绍使用MATLAB差分法来解偏微分方程的方法和步骤,并探讨其优势和局限性。
2. 差分法简介差分法是一种基于离散点的数值求解方法,它将连续的空间或时间变量离散化为有限个点,通过对这些离散点上的方程进行逼近,得到PDE的数值解。
其中,MATLAB作为一种功能强大的数值计算工具,提供了快速而高效的差分法求解PDE的功能。
3. 二阶偏微分方程的差分方法在本节中,我们将以一个简单的二阶偏微分方程为例,说明如何使用差分法来解决。
考虑一个二维的泊松方程,即:∂²u/∂x² + ∂²u/∂y² = f(x, y)其中,u是未知函数,f(x, y)是已知函数。
为了使用差分法求解该方程,我们需要将空间离散化,假设网格步长为Δx和Δy。
我们可以使用中心差分法来逼近二阶导数,从而将偏微分方程转化为一个代数方程组。
在MATLAB中,我们可以通过设置好网格步长和边界条件,构建对应的代数方程组,并使用线性代数求解方法(如直接解法或迭代解法)获得数值解。
4. 差分法的优势和局限性差分法作为一种数值方法,具有许多优势和应用范围,但也存在一些局限性。
优势:- 简单易懂:差分法的思想直观明了,易于理解和实现。
- 适应性广泛:差分法可以用于求解各种类型的偏微分方程,包括常微分方程和偏微分方程。
- 准确度可控:通过调整网格步长,可以控制数值解的精度和稳定性。
局限性:- 离散误差:当空间或时间步长过大时,差分法的数值解可能会出现较大的离散误差。
- 边界条件:合适的边界条件对于差分法的求解结果至关重要,不合理的边界条件可能导致数值解的不准确。
- 计算效率:对于复杂的偏微分方程,差分法的计算成本可能较高,需要耗费大量的计算资源和时间。
偏微分方程—matlab
基础知识偏微分方程的定解问题各种物理性质的定常(即不随时间变化)过程,都可用椭圆型方程来描述。
其最典型、最简单的形式是泊松(Poisson)方程),(2222y x f yux u u =∂∂+∂∂=∆ (1)特别地,当 f ( x , y ) ≡ 0 时,即为拉普拉斯(Laplace)方程,又称为调和方程02222=∂∂+∂∂=∆yux u u (2)带有稳定热源或内部无热源的稳定温度场的温度分布,不可压缩流体的稳定无旋流动及静电场的电势等均满足这类方程。
Poisson 方程的第一边值问题为⎪⎩⎪⎨⎧Ω∂=Γ=Ω∈=∂∂+∂∂=∆Γ∈),(),(),(),(),(2222y x y x u y x y x f y ux u u y x ϕ (3) 其 中 Ω 为 以 Γ 为 边 界 的 有 界区 域 , Γ 为 分 段 光 滑 曲 线, Ω U Γ 称 为 定 解区 域 ,f (x, y),ϕ(x, y) 分别为 Ω,Γ 上的已知连续函数。
第二类和第三类边界条件可统一表示成)0(0),(>=⎪⎭⎫⎝⎛+∂∂Γ∈a u n u y x α (4) 其中 n 为边界 Γ 的外法线方向。
当α = 0 时为第二类边界条件,α ≠ 0 时为第三类边界条件。
在研究热传导过程,气体扩散现象及电磁场的传播等随时间变化的非定常物理问题时,常常会遇到抛物型方程。
其最简单的形式为一维热传导方程)0(022>=∂∂-∂∂a xua t u (5) 方程(5)可以有两种不同类型的定解问题: 初值问题(也称为 Cauchy 问题)⎪⎩⎪⎨⎧+∞<<∞-=+∞<<-∞>=∂∂-∂∂x x x u x t x ua tu )()0,(,0022ϕ (6) 初边值问题⎪⎪⎪⎩⎪⎪⎪⎨⎧<<===<<<<=∂∂-∂∂lx t g t l u t g t u x x u l x T t x ua t u 0),(),(),(),0()()0,(0,002122ϕ (7) 其中ϕ )(),(),(21x g x g x ϕ为已知函数,且满足连接条件)0()(),0()0(21g l g ==ϕϕ问题(7)中的边界条件)(),(),(),0(21t g t l u t g t u ==称为第一类界条件。
有限差分法求解偏微分方程
有限差分法求解偏微分方程摘要:本文主要使用有限差分法求解计算力学中的系统数学模型,推导了有限差分法的理论基础,并在此基础上给出了部分有限差分法求解偏微分方程的算例验证了推导的正确性及操作可行性。
关键词:计算力学,偏微分方程,有限差分法Abstract:This dissertation mainly focuses on solving the mathematic model of computation mechanics with finite-difference method. The theoretical basis of finite-difference is derived in the second part of the dissertation, and then I use MATLAB to program the algorithms to solve some partial differential equations to confirm the correctness of the derivation and the feasibility of the method.Key words:Computation Mechanics, Partial Differential Equations, Finite-Difference Method1 引言机械系统设计常常需要从力学观点进行结构设计以及结构分析,而这些分析的前提就是建立工程问题的数学模型。
通过对机械系统应用自然的基本定律和原理得到带有相关边界条件和初始条件的微分积分方程,这些微分积分方程构成了系统的数学模型。
求解这些数学模型的方法大致分为解析法和数值法两种,而解析法的局限性众所周知,当系统的边界条件和受载情况复杂一点,往往求不出问题的解析解或近似解。
另一方面,计算机技术的发展使得计算更精确、更迅速。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
南京理工大学课程考核论文课程名称:高等数值分析论文题目:有限差分法求解偏微分方程姓名:罗晨学号:成绩:有限差分法求解偏微分方程一、主要内容1.有限差分法求解偏微分方程,偏微分方程如一般形式的一维抛物线型方程:具体求解的偏微分方程如下:2.推导五种差分格式、截断误差并分析其稳定性;3.编写MATLAB程序实现五种差分格式对偏微分方程的求解及误差分析;4.结论及完成本次实验报告的感想。
二、推导几种差分格式的过程:有限差分法(finite-differencemethods )是一种数值方法通过有限个微分方程近似求导从而寻求微分方程的近似解。
有限差分法的基本思想是把连续的定解区域用有限个离散点构成的网格来代替;把连续定解区域上的连续变量的函数用在网格上定义的离散变量函数来近似;把原方程和定解条件中的微商用差商来近似,积分用积分和来近似,于是原微分方程和定解条件就近似地代之以代数方程组,即有限差分方程组,解此方程组就可以得到原问题在离散点上的近似解。
推导差分方程的过程中需要用到的泰勒展开公式如下:()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 u u x t u x t x x x x o x x x xu 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 u u 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 uo h x h+--+∂=+∂(2-9) 将式(2-5)、(2-9)代入一般形式的抛物线型偏微分方程得(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 τ+。
2.1.2古典显格式稳定性分析古典显格式(2-13)写成矩阵形式为 ()112k k k h h h u ra I raC u f τ+=-++⎡⎤⎣⎦(2-14)上面的C 矩阵的特征值是:2cos()1,2,......,1C j h j N λπ==-()()()212=122cos()121cos()14sin 1,2,......,12H j C ra ra ra ra j h ra j h j hra j N λλπππ=-+-+=--=-=-(2-15)使()1H ρ≤,即结论:当102ra ≤≤时,所以古典显格式是稳定的。
2.2古典隐格式2.2.1古典隐格式的推导 将1k t t -=代入式(2-3)得21,11(,)(,)()()(())j k j k j k k k k k uu x t u x t t t o t t t---∂=+-+-∂(2-16) 21,(,)(,)()()j k j k j k uu x t u x t o tττ-∂=-⋅+∂(2-17)得到对时间的一阶偏导数1,(,)(,)()=()j k j k j k u x t u x t u o t ττ--∂+∂(2-18) 将式(2-9)、(2-18)原方程得到(2-19)为了方便把(2-19)写成11122k k k k kj jj j j k j u u u u u f h ατ-+-⎡⎤--+-=⎢⎥⎢⎥⎣⎦(2-20) ()11122k k kk k kj jj j j j u u uu u f h τατ-+----+=(2-21)最后得到古典隐格式的差分格式为()111(12)k k k k k j j j jj ra u r u u u f ατ-+-+-+=+(2-22) 2r h τ=其中,古典隐格式的差分格式的截断误差是2()o h τ+。
2.2.2古典隐格式稳定性分析将古典隐格式(2-22)写成矩阵形式如下()1212()k k khh h ra I raC u u f r hττ++-=+=⎡⎤⎣⎦(2-23)误差传播方程()112k k h h ra I raC v v ++-=⎡⎤⎣⎦(2-24) 所以误差方程的系数矩阵为 使()1H ρ≤,显然1H j λ≤恒成立。
结论:对于0r ∀>,即任意网格比下,古典隐格式是绝对稳定的。
2.3Richardson 格式2.3.1Richardson 格式的推导 将11k k t t t t +-==和,代入式(2-3)得21,1121,11(,)(,)()()(())(,)(,)()()(())i k i k i k k k k k i k i k i k k k k ku u x t u x t t t o t t t u u x t u x t t t o t t t +++---∂⎧=+-+-⎪⎪∂⎨∂⎪=+-+-⎪∂⎩(2-25) 即21,21,(,)(,)()()(,)(,)()()i k i k i k i k i k i ku u x t u x t o t u u x t u x t o t ττττ+-∂⎧=+⋅+⎪⎪∂⎨∂⎪=-⋅+⎪∂⎩(2-26) 由此得到可得211,(,)(,)()()2i k i k i k u x t u x t uo t ττ++-∂=+∂(2-27) 将式(2-9)、(2-27)代入原方程得到下式 (2-28)为了方便可以把式(2-28)写成1111222k k k k k k i i i i i i u u u u u f h ατ+-+-⎡⎤--+-=⎢⎥⎣⎦(2-29) 即()111122k k kk k k i i i i i i u u uu u f h τατ+-+----+=(2-30)最后得到Richardson 显格式的差分格式为()1111222k k k k k k i i i i i i u r u u u u f ατ+-+-=-+++(2-31)2r hτ=其中,古典显格式的差分格式的截断误差是22()o h τ+。
2.3.2Richardson 稳定性分析将Richardson 显格式(2-31)写成如下矩阵形式 ()11222k k k k h h h h u r C I u u f ατ+-=-++(2-32)误差传播方程矩阵形式()1122k k k h h hkkh hv r C I v v v v α+-⎧=-+⎪⎨=⎪⎩(2-33) 再将上面的方程组写成矩阵形式112(2)0k k k hk ra C I I v ww I v ++-⎛⎫⎡⎤== ⎪⎢⎥⎣⎦⎝⎭(2-34) 系数矩阵的特征值是228sin 102j hra πλλ+-=(2-35) 解得特征值为1,2λ={}212,=4sin 12j h Max ra πλλ>(恒成立)(2-37) 结论:上式对任意的网比都恒成立,即Richardson 格式是绝对不稳定的。
4.Crank-Nicholson 格式3.4.1Crank-Nicholson 格式的推导 将12k t t +=代入式(2-9)得1112221112222,2+1,1+1+1(,)(,)()()(())(,)(,)()()(())j j k j k k k k k k j j k j k k k k k k u u x t u x t t t o t t t u u x t u x t t t o t t t +++++++∂⎧=+-+-⎪⎪∂⎨∂⎪=+-+-⎪∂⎩(2-40) 即12122,2+1,1(,)(,)()()2(,)(,)()()2j j k j k k j j k j k k u u x t u x t o t u u x t u x t o t ττττ+++∂⎧=+⋅+⎪⎪∂⎨∂⎪=-⋅+⎪∂⎩(2-41) 得到如下方程()()12122,12,12(,)(,)()=()2(,)(,)()=()j j k k j k j j k k j k u x t u x t u o t u x t u x t u o tττττ++++⎧⎡⎤-∂⎪⎢⎥+⎪⎢⎥∂⎢⎥⎪⎣⎦⎨⎡⎤⎪-∂⎢⎥⎪-+⎢⎥∂⎪⎢⎥⎣⎦⎩(2-42) 所以12k t t +=处的一阶偏导数可以用下式表示:()()112212,1,122(,)(,)2(,)(,)11()()()22(,)(,)()j j k j j k k k j k j k j k j k u x t u x t u x t u x t u u o t t u x t u x t o τττττ+++++⎡⎤--∂∂⎡⎤⎢⎥+=-+⎢⎥⎢⎥∂∂⎣⎦⎢⎥⎣⎦-=+(2-43)将k t t =,11j j x x x x +-==和代入式(2-6)可以得到式(2-9); 同理1k t t +=,11j j x x x x +-==和代入式(2-6)可以得到2111112,122(,)2(,)(,)()()j k j k j k j k u x t u x t u x t u o h x h+++-++-+∂=+∂(2-44) 所以12k t t +=,j x 处的二阶偏导数用式(2-6)、(2-44)表示:(2-45)所以12k t t +=,j x 处的函数值可用下式表示: 11(,)(,)2j k j k f x t f x t +⎡⎤+⎣⎦(2-46) 原方程变为:()2212,1,,,12211()()()()()222k k j k j k j k j k j j u u u u f f o h t t x x α+++⎡⎤∂∂∂∂⎡⎤+-+=++⎢⎥⎢⎥∂∂∂∂⎣⎦⎣⎦(2-47) 将差分格式代入上式得:1111111122221(,)(,)(,)2(,)(,)(,)2(,)(,)21(,)(,)()2j k j k j k j k j k j k j k j k j k j k u x t u x t u x t u x t u x t u x t u x t u x t h h f x t f x t o h αττ++++-++-+--+-+⎡⎤-+⎢⎥⎣⎦⎡⎤=+++⎣⎦(2-48)为了方便写成:()11111111112222k k k k k k k k k k j j j j j j j j j j r u u u u u u u u f f ατ++++++-+-⎡⎤⎡⎤---++-+=+⎣⎦⎢⎥⎣⎦(2-49) 最后得到Crank-Nicholson 格式的差分格式为()()()()()1111111111=1+222k k k k k k k k j j j j j j j j r r r u u u r u u u f f αααατ+++++-+-⎡⎤+-+-+++⎢⎥⎣⎦(2-50) 2r hτ=其中,Crank-Nicholson 格式的差分格式的截断误差是22()o h τ+。