常微分方程的差分方法分解54页PPT
- 格式:ppt
- 大小:3.84 MB
- 文档页数:36
i.常微分方程初值问题差分法i.1 常微分方程差分法考虑常微分方程初值问题:求函数()u t 满足(,), 0du f t u t T dt=<≤ (i.1a ) 0(0)u u = (i.1b)其中(,)f t u 是定义在区域G : 0t T ≤≤, u <∞上的连续函数,0u 和T 是给定的常数。
我们假设(,)f t u 对u 满足Lipschitz 条件,即存在常数L 使得121212(,)(,), [0,]; ,(,)f t u f t u L u u t T u u -≤-∀∈∈-∞∞ (i.2) 这一条件保证了(i.1)的解是适定的,即存在、唯一,并且连续依赖于初值0u 。
常微分方程初值问题(i.1)的精确解是从给定初始点00(,)t u 出发的一条连续曲线,通常情况下不可能用简单的解析表达式给出,只能求近似解。
差分法是常微分方程初值问题的主要数值解法,其目的是求得若干个离散点来逼近这条解曲线。
本章讨论常微分方程最常用的近似数值解法—差分方法。
构造差分法有两个基本途径。
一个是简单地用离散点上的差商近似替代微商。
另一个是先对微分方程积分得到积分方程,再利用离散点作数值积分。
先来看最简单的Euler 方法。
为此,首先将求解区域[0,]T 离散化为若干个离散点n t hn =:0110N N t t t t T -=<<<<= (i.3) 其中0h >称为步长。
在微积分课程中我们熟知,微商(即导数)是差商的极限。
反过来,差商就是微商的近似。
在0t t =处,在(i.1a )中用向前差商10()()u t u t h-代替微商du dt ,便得10000()()(,())u t u t hf t u t ε=++ 如果忽略误差项0ε,再换个记号,用i u 代替()i u t 便得到1000(,)u u hf t u -=一般地,我们有1Euler (,), 0,1,,1n n n n u u hf t u n N +=+=-方法: (i.4) 从(i.1b) 给出的初始值0u 出发,由上式可以依次算出1,,N t t 上的差分解1,,N u u 。
常微分方程两点边值问题的差分方法说实话常微分方程两点边值问题的差分方法,我一开始也是瞎摸索。
我就知道这是个挺难搞的事儿,但我就想把它弄明白。
我最早尝试直接用我之前学过的常微分方程的一些解法,可发现对于两点边值问题完全行不通,这才意识到这个问题很特殊,需要专门的方法来对付。
那我就开始了解差分方法呗。
这个差分啊,简单来说就有点像我们数东西的时候不是一个一个数,而是隔几个数一个那样,在数学里就是把连续的函数离散化。
比如说我们有个常微分方程,在一个区间上的两点边值问题,我要做的第一步,不妨就把这个区间分成好多小份,这个小份的大小我开始还不确定选多少好呢,我就试了好几个不同的值。
我试着先在网格点上近似导数。
我最开始想当然地用了一种很简单的近似方法,就像我们估算速度的时候,直接用两个点的函数值之差除以距离嘛,但是发现这样得到的结果那叫一个惨不忍睹啊,误差大得很。
后来仔细研究才知道,要根据这个常微分方程的具体形式来更好地构造近似导数,才能减小误差。
还有在处理边界条件的时候,这个可千万不能马虎。
我一开始就没太重视边界条件,结果算出的结果也完全不对。
其实就像是盖房子必须要打好地基一样,这个边界条件对于两点边值问题就是根基,如果根基歪了,那整个房子肯定也立不住。
我后来发现了一个比较靠谱的步骤。
就是在差分的时候,对于方程中的每一项,根据泰勒公式来构建合理的差分格式。
这个就像搭积木,每个部分都要搭得准确才能让整体稳固。
我把方程中的项都按照精心设计的差分格式替换掉之后,就得到了一个代数方程组,解这个方程组就能够求出在离散点上的近似解了。
不过这里面还有个小窍门,在求解方程组的时候,我刚开始没注意方程组矩阵的性质,有时候得到的解是不准确的。
我后来发现有的矩阵如果是稀疏友好型的,那就要选择专门针对稀疏矩阵的算法来求解,这样速度又快结果又准确。
我不确定我现在的方法是不是最完美的,但就目前我做的一些练习题还有自己研究的小例子来说,这个方法已经相当好用了。