打靶法

打靶法()是数值分析中在求解边界值问题時,将解归约为求解數個初值问题的方法。下面的讨论在打靶法的解释中有详细注释。

对于一个二阶常微分方程的边界值问题,该方法表述如下:

: y*(t) = f(t, y(t), y'(t)), \quad y(t_0) = y_0, \quad y(t_1) = y_1

为边界值问题。
y(t1; a) 代表下列初值问题的一个解

: y*(t) = f(t, y(t), y'(t)), \quad y(t_0) = y_0, \quad y'(t_0) = a

定义函数F(a)为y(t1; a)和给定边界值y1的差

: F(a) = y(t_1; a) - y_1 \,

若边界值问题有解,则F有一个根,而这个根就是y'(t0)的给出边界问题解y(t)的取值。

上述問題的求解可以采用通常的求根方法,例如二分法或者牛顿法。

线性打靶法
边界值问题是线性的,若f形为
: f(t, y(t), y'(t))=p(t)y'(t)+q(t)y(t)+r(t). \,
这个情况下,边界值问题的解通常给出为
:y(t) = y_{(1)}(t)+\frac{y_1-y_{(1)}(t_1)}{y_{(2)}(t_1)}y_{(2)}(t)
其中y_{(1)}(t)是下面的初值问题的一个解
:y*(t) = f(t, y(t), y'(t)),\quad y(t_0) = y_0, \quad y'(t_0) = 0,
而y_{(2)}(t)是下面的初值问题的解:
:y*(t) = p(t)y'(t)+q(t)y(t),\quad y(t_0) = 0, \quad y'(t_0) = 1.
结果成立的精确条件请参看[https://web.archive.org/web/20060425044733/http://mathews.ecs.fullerton.edu/n2003/shootingmethod/ShootingProof.pdf 证明]。

例子
Stoer及Burlisch曾提出一個如下的边界值问题(Section 7.3.1)

: w*(t) = \frac{3}{2} w^2, \quad w(0) = 4, \quad w(1) = 1

以下的初值問題

: w*(t) = \frac{3}{2} w^2, \quad w(0) = 4, \quad w'(0) = s

s = −1, −2, −3, ..., −100等條件下求解,且令F(s) = w(1;s) − 1,其圖形繪製在第一圖中,根據圖中可知,其解接近−8及−36。
第二圖繪出一些w(t;s)的軌跡。

初值問題的解是由LSODE演算法計算,利用數學軟體GNU Octave實現。

Stoer及Bulirsch列出有二個解,可以用代數法求解。
對應初始條件約w′(0) = −8及 and w′(0) = −35.9時的值。

参考

  • Josef Stoer and Roland Bulirsch. Introduction to Numerical Analysis. New York: Springer-Verlag, 1980. (See Section 7.3.)

评论 (0)

  • 还没有评论,来抢沙发吧。