首页 理论教育 Matlab微分方程高效解法:打靶法实现及结果

Matlab微分方程高效解法:打靶法实现及结果

时间:2023-10-31 理论教育 版权反馈
【摘要】:对于更复杂的边界条件,照样可以用打靶法解决。根据打靶法思想,确定m取值的流程如图1-6所示,相应代码如下:程序1-4主程序代码如下:文件shoot.m代码如下:图1-6 打靶法流程图代码中使用的m的前两个猜测值为1和0.9,程序仅经过了5次循环,就满足条件|β5+2|<10-6,得到结果如图1-7所示。

Matlab微分方程高效解法:打靶法实现及结果

对于二阶常微分方程(1-65)及边界条件(1-67),利用代换u1=u、u2=u′,可将其写为等价的方程组形式:

978-7-111-51623-1-Part01-62.jpg

它与初值问题的不同之处在于,u2(a)的值是未知的,已知条件中取而代之的是u1(b)的值,否则就可以直接通过odesolver数值求解了。假如可以确定一个值m,使初值问题(1-69)的解u1(x)满足|u1(b)-β|<ε,其中ε为可允许的误差,那么边值问题(1-68)和初值问题(1-69)的解就是近似相等的,也就相当于把边值问题转化成了初值问题。

978-7-111-51623-1-Part01-63.jpg

打靶法就是用来确定m值的,大致思路如下:

(1)随意选取m的起始值。

(2)求出初值问题(1-69)的解u1(x)。

(3)若不符合|u1(b)-β|<ε,就修正m的值。

(4)重复前面两项,直到符合|u1(b)-β|<ε,此时的u1(x)就是数值解。

修正m取值的方法可以是线性插值法、牛顿法等,这里使用比较简单的线性插值法。设m=mn时初值问题(1-69)的解u1(x)在x=b处有u1(b)n,其中n=1,2,…。若假设mnβn是线性关系,为了让m取最新修正值mn+2时有βn+2,则mn+2需要满足(mn+2-mn)/(β-βn)=(mn+1-mn)/(βn+1-βn),即:

978-7-111-51623-1-Part01-64.jpg

其中的mnβnmn+1βn+1为已知,这就是说如果使用线性插值法修正m的取值,在打靶法开始时需要先随意选取2个m的起始值m1m2,计算出相应的β1β2,才可以根据上式得到修正值m3,进而得到β3,然后得到修正值m4……直到找到满足|βn-β|<εm值。此时初值问题(1-69)的解即近似为边值问题(1-68)的解,而初值问题是容易数值求解的。

打靶法的过程如图1-5所示,虽然mm1m2时,最终结果在x=b处的取值与应有的边界条件相差甚远,但通过一次一次地修正,逐渐缩小距离目标的差距,最终总会得到在一定误差内满足x=b处边界条件的解。

对于更复杂的边界条件(1-66),照样可以用打靶法解决。尽管u(a)和u′(a)的值都是未知的,但只要猜测它们其中一个的取值,就可以通过关系α1u(a)+β1u′(a)1得到另外一个的值。有了u(a)和u′(a)的值,再通过odesolver求解式(1-65)得到u(b)和u(b)的值(当然需要变量代换u1=uu2=u′),然后使用|α2u(b)+β2u′(b)-γ2|<ε判断猜测的初始值是否符合要求,如失败就修正猜测值后继续尝试,直到符合要求。这样一来,同样可以将边界条件(1-66)下的边值问题当做初值问题处理。

978-7-111-51623-1-Part01-65.jpg

图1-5 打靶法示意图

下面举一个例子,考虑如下二阶常微分方程:

u′′+|u|=0,0<x<4 (1-71)

其边界条件为:(www.xing528.com)

u(0)=0,u(4)=-2 (1-72)

做代换u1=uu2=u′,写为一阶常微分方程组形式:

978-7-111-51623-1-Part01-66.jpg

将此问题转化为初值问题,就需要找到一个m=mn,使式(1-74)的解u1(x)在x=4处的值u1(4)=βn满足|βn+2|<10-6。

978-7-111-51623-1-Part01-67.jpg

根据打靶法思想,确定m取值的流程如图1-6所示,相应代码如下:

程序1-4

主程序代码如下:

978-7-111-51623-1-Part01-68.jpg

文件shoot.m代码如下:

978-7-111-51623-1-Part01-69.jpg

978-7-111-51623-1-Part01-70.jpg

图1-6 打靶法流程图

代码中使用的m的前两个猜测值为1和0.9,程序仅经过了5次循环,就满足条件|β5+2|<10-6,得到结果如图1-7所示。如选取m的前两个猜测值为-1和-1.1,还会得到另外一个截然不同的解。因为边值问题的解往往不是唯一的,所求得的解与猜测值的选取有关,这是边值问题与初值问题的一个很大不同。

978-7-111-51623-1-Part01-71.jpg

图1-7 边值问题的解

查看程序运行后mnβn的前5个值,可发现线性插值法的修正效率还比较令人满意。

978-7-111-51623-1-Part01-72.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈