二阶常微分方程边值问题的数值解法文档格式.doc
《二阶常微分方程边值问题的数值解法文档格式.doc》由会员分享,可在线阅读,更多相关《二阶常微分方程边值问题的数值解法文档格式.doc(24页珍藏版)》请在冰豆网上搜索。
第一章引言 -1-
第二章二阶线性常微分方程 -3-
2.1试射法(“打靶”法) -4-
2.1.1简单的试射法 -4-
2.1.2基于叠加原理的试射法 -5-
2.2有限差分法 -11-
2.2.1有限差分逼近的相关概念 -12-
2.2.2有限差分方程的建立 -14-
2.2.3其他边值条件的有限差分方程 -15-
2.2.4有限差分方程的解法 -17-
第三章二阶非线性微分方程 -22-
3.1基于牛顿迭代法的打靶法 -22-
3.1.1第一类边值条件推导 -22-
3.1.2其他边值条件的推导 -24-
3.1.3算法及程序代码 -25-
3.2基于改进的牛顿迭代法的打靶法 -31-
3.2.1算法的推导 -31-
3.2.2算法及代码 -32-
第四章改进算法的算例 -38-
第五章总结 -45-
参考文献 -46-
致谢 -47-
第一章引言
微分方程是现代数学中一个很重要的分支,从早期的微积分时代起,这个学科就成为了理论研究和实践应用的一个重要领域。
在微分方程理论中,定解条件通常有两种提法:
一种是给出了积分曲线在初始时刻的性态,相应的定解条件称为初值问题;
另一种是给出了积分曲线首末两端的性态,这类条件则称为边界条件,相应的定解问题称为边值问题。
常微分方程边值问题在应用科学与工程技术中有着非常重要的应用,例如工程学、力学、天文学、经济学以及生物学等领域中的许多实际问题通常会归结为常微分方程边值问题[12]的求解。
文献[9]给出了边值问题求解的方法,虽然求解常微分方程边值问题有很多解析方法可以求解,但这些方法只能用来求解一些特殊类型的方程,对从实际问题中提炼出来的微分方程往往不再适用,因而对常微分方程边值问题的数值方法的研究显得尤为重要。
经典的数值方法主要有:
试射法(打靶法)和有限差分法,见文献[2]。
对于二阶线性边值问题,差分法的优点在于稳定性较好,但它的精度不高。
而用打靶法求解线性问题时,解的精度较高,这是因为打靶法将边值问题的求解转化为相应的初值问题的求解,因而可以使用具有较高精度的Runge-Kutta法(见文献[1]),但是算法稳定性较差。
在本文中,我们首先总结了二阶线性边值问题的数值算法:
打靶法、有限差分法。
对每种方法都列出了详细的计算步骤和Matlab程序代码,通过具体的算例对这两类方法的优缺点进行了细致的比较。
由于简单的打靶法过分依赖经验,我们考虑了基于线性叠加原理的打靶法,将线性边值问题转化为两个初值问题,并通过线性叠加得到原边值问题的解。
第二章二阶线性常微分方程
二阶常微分方程一般可表示成如下的形式:
,
(1)
边值条件有如下三类[9]:
第一类边值条件
,
(2)
第二类边值条件
,(3)
第三类边值条件[19]
,(4)
其中,,,。
在对边值问题用数值方法求解之前,应该从理论上分析该边值问题的解是否存在,若问题的解不存在,用数值方法计算出来的数据没有任何意义。
下面的定理给出了边值问题存在唯一解的充分条件。
定理1.1设方程(2.1)中的函数及,在区域
内连续,并且
(ⅰ);
(ⅱ)在内有界,即存在常数,使得
,,
则边值问题(2.1)-(2.4)的解存在且唯一[18]。
本章我们假设函数可以简单地表示成
,
即边值问题(2.1)-(2.2)为具有如下形式的二阶线性边值问题
(2.5)
此时,解的存在唯一性定理(定理1.1)可以简单地表述为下述推论。
推论2.1设,,在[a,b]上连续,且在[a,b]内,则线性边值问题(2.5)的解存在且唯一.
注:
如无特别说明,本文中用到的(2.5)中的微分方程均满足推论2.1中的条件。
对于一般的边值问题(2.5),尽管我们可以从理论上保证解的存在唯一性,但通常很难用解析方法求出其精确解,从实际问题中归结出来的微分方程往往不是解析方法所适用的特殊类型,此时数值方法显得尤为重要。
下面我们先给出求解边值问题(2.5)的两种常用的数值方法,即试射法和有限差分法。
2.1试射法(“打靶”法)
2.1.1简单的试射法
对于边值问题(2.5)的求解,“试射法”的基本思想是将边值问题转化成初值问题来求解,即根据边界条件(2.2),寻求与之等价的初始条件(2.6),也就是说,反复是调整初始时刻的斜率值,使得初值问题(2.7)的积分曲线能“命中”.
设凭借经验能够提供的两个预测值,,我们按这两个斜率“试射”,通过Runge-Kutta算法求解相应的初值问题(2.7)可以得到的两个预测值分别为,。
若和都不满足预定的精度,则可用线性插值的方法校正,得到新的斜率值
(2.8)
然后再按斜率试射,求解相应的初值问题(2.7)又得到新的结果.若或[16],则可将作为的近似值;
否则,继续过程(2.8)直到找到计算结果与相当符合为止。
上述试射法中初值的选取过分依赖于经验,局限性很大。
下面介绍基于线性叠加原理的试射法。
2.1.2基于叠加原理的试射法
设二阶线性常微分方程边值问题(2.5)的解存在并且唯一,并定义线性算子:
.(2.9)
由于线性微分方程的解具有叠加性,即非齐次线性微分方程的解可由它的一个特解和相应的齐次线性微分方程的解的线性组合来表示,因此我们可以考虑如下的两个线性微分方程的初值问题:
(2.10)
和
(2.11)
事实上,设和分别为问题(2.10)和(2.11)的解,则不难验证
(2.12)
是问题(2.5)的解,其中.
通过上述描述,我们可以得到基于叠加原理的打靶法的基本步骤为:
1.根据边值问题(2.5)构造相应的初值问题(2.10)和(2.11);
2.分别求出两个初值问题(2.10)和(2.11)的解和;
3.将和按(2.12)式做组合,所得的函数就是边值问题(2.5)的解.其几何图像见图2.1。
图2.1打靶法求解结果的几何图像
(2.10)和(2.11)均为二阶常微分方程初值问题,求解时可通过引入变量代换将其化成相应的一阶方程组初值问题。
如令:
(2.13)
则(2.10)式可以写成
(2.14)
(2.11)式可以写成
(2.15)
这样就可以利用Runge-Kutta方法求解(2.14)和(2.15)。
对于更一般的线性边值问题:
(2.16)
用基于叠加原理的打靶法的步骤为:
1.根据(2.16)式,构造两个相应的初值问题:
(2.17)
(2.18)
其中和是满足条件的两个任意的常量.
2.求解初值问题(2.17)和(2.18)式,设其解分别为和.
3.将和做线性组合
由此计算得到的函数就是(2.16)式的解,其具体的数值计算格式可描述为如下算法:
算法1基于叠加原理的试射法求解线性边值问题(2.5)的算法如下:
1.输入区间的端点,,及边界条件常数,,区间等分数
2.计算步长,,,,
3.fori=0,1,2,…,N-1
3.1
3.2计算
3.3计算
endfor(i)
4.计算
5.输出,,
6.fori=1,2,…,N
6.1计算
6.2输出,,(说明:
,分别是,的近似值)
endfor(i)
代码1将上面的算法在matlab实现代码如下:
function[x,y]=lsh(func1,func2,a,b,ya,yb,N)
%利用RK方法计算二阶线性微分方程的边值问题,
%由微分方程知识可以知道,对于二阶微分方程可以化为一阶微分方程组
%func1为第一个微分方程组第二个函数,func2为第二个微分方程组第二个函数
%初始时刻为a,结束时为b,初始端点函数值为ya,末端点函数值yb
%N为分成的区间数目
h=(b-a)/N;
u(1,1)=ya;
u(1,2)=0;
v(1,1)=0;
v(1,2)=1;
fori=1:
N
x(i,:
)=a+(i-1)*h;
K1=h*u(i,2);
L1=h*feval(func1,x(i,:
),u(i,1),u(i,2));
K2=h*(u(i,2)+1/2*L1);
L2=h*feval(func1,x(i,:
)+1/2*h,u(i,1)+1/2*K1,u(i,2)+1/2*L1);
K3=h*(u(i,2)+1/2*L2);
L3=h*feval(func1,x(i,:
)+1/2*h,u(i,1)+1/2*K2,u(i,2)+1/2*L2);
K4=h*(u(i,2)+L3);
L4=h*feval(func1,x(i,:
)+h,u(i,1)+K3,u(i,2)+L3);