割線法(secant method)とは、方程式 $f(x)=0$ の解を、直前の 2 点 $x_{n-1},x_n$ を通る割線と $x$ 軸の交点 $x_{n+1}=x_n-f(x_n)(x_n-x_{n-1})/(f(x_n)-f(x_{n-1}))$ を次の近似値として求める反復法である。Newton 法の導関数を差分商で置き換えたもので、1 回の反復で新しく計算する関数値は 1 つだけである。$f$ が $C^2$ 級で零点が単根なら、零点に十分近い 2 点から出発した列は超 1 次収束し、さらに $f''(x^*)\ne0$ なら収束の次数は黄金比 $\frac{1+\sqrt5}2=1.618\ldots$ である。
前提知識: Newton法, 平均値の定理, Taylorの定理, Fibonacci数列
割線法(secant method)は、方程式 $f(x)=0$ の解を、直前の 2 点を通る直線(割線)と $x$ 軸の交点を次の近似値とする反復で求める方法である。Newton法 は接線を使うので毎回 $f'(x_n)$ を計算するが、割線法は導関数の代わりに差分商
$$
\frac{f(x_n)-f(x_{n-1})}{x_n-x_{n-1}}
$$
を使う。1 回の反復で新しく計算する関数値は $f(x_n)$ の 1 つだけである。
その代わり、単根の近くでの収束は Newton 法の 2 次収束より遅く、誤差の減り方の指数は黄金比 $\varphi=\frac{1+\sqrt5}2=1.618\ldots$ になる。この記事では、割線法の誤差を 2 つ前までの誤差の積で表す等式を示し、そこから局所収束と、収束の次数が $\varphi$ であることを証明する。指数に Fibonacci 数が現れる理由も、この等式から見える。
$I\subset\mathbb R$ を開区間(区間)、$f\colon I\to\mathbb R$ を連続関数とする。相異なる初期値 $x_0,x_1\in I$ から出発し、$f(x_n)\ne f(x_{n-1})$ である限り
$$
x_{n+1}:=x_n-f(x_n)\,\frac{x_n-x_{n-1}}{f(x_n)-f(x_{n-1})}\qquad(n=1,2,\ldots)
$$
で数列 $(x_n)$ を定める反復を、方程式 $f(x)=0$ に対する 割線法 という。$f(x_n)=0$ となったら $x_n$ が解なので反復を止める。
$x_{n+1}$ は、2 点 $(x_{n-1},f(x_{n-1}))$、$(x_n,f(x_n))$ を通る直線と $x$ 軸の交点の $x$ 座標である。この記事では次の記号を使う。
使える条件をまとめる。
$f$ が区間 $J$ で $C^1$ 級なら、すべての $a,b\in J$ について
$$
f[a,b]=\int_0^1f'\bigl(b+s(a-b)\bigr)\,ds
$$
である。とくに $f[a,b]=f[b,a]$ で、$f[a,b]$ は $(a,b)$ について連続である。
$a=b$ なら両辺とも $f'(b)$ である。$a\ne b$ なら $g(s):=f(b+s(a-b))$ は $C^1$ 級で $g'(s)=(a-b)f'(b+s(a-b))$ だから、微積分学の基本定理 により $f(a)-f(b)=g(1)-g(0)=(a-b)\int_0^1f'(b+s(a-b))\,ds$ である。両辺を $a-b$ で割ればよい。連続性は、被積分関数が $(a,b,s)$ について連続で、$[0,1]$ 上の積分は一様連続な被積分関数について連続に動くことによる。$\square$
| 公式 | 使える条件 | 根拠 |
|---|---|---|
| $x_{n+1}=x_n-\dfrac{f(x_n)}{f[x_{n-1},x_n]}=\dfrac{f(x_n)x_{n-1}-f(x_{n-1})x_n}{f(x_n)-f(x_{n-1})}$ | $f(x_n)\ne f(x_{n-1})$ | def-sec-main |
| $e_{n+1}=e_n\,e_{n-1}\,\dfrac{G_n}{f[x_{n-1},x_n]}$、$G_n\to\dfrac{f''(x^*)}2$ | $f$ は $C^2$ 級、$f[x_{n-1},x_n]\ne0$ | lem-sec-error |
| $\lvert e_{n+1}\rvert\le C\lvert e_n\rvert\lvert e_{n-1}\rvert$、$C=\dfrac{\max\lvert f''\rvert}{2\min\lvert f'\rvert}$ | 単根の近く | thm-sec-local |
| $C\lvert e_n\rvert\le q^{F_{n+1}}$($F_n$ は Fibonacci 数) | $x_0,x_1\in J_0$ が相異なり $C\lvert e_0\rvert,C\lvert e_1\rvert\le q<1$ | thm-sec-local |
| $\dfrac{\lvert e_{n+1}\rvert}{\lvert e_n\rvert^{\varphi}}\to\left\lvert\dfrac{f''(x^*)}{2f'(x^*)}\right\rvert^{1/\varphi}$ | 単根の近くから始めて反復が止まらない、$f''(x^*)\ne0$ | thm-sec-order |
| $f(x)=x^2-2$ のとき $x_{n+1}-\sqrt2=\dfrac{(x_n-\sqrt2)(x_{n-1}-\sqrt2)}{x_n+x_{n-1}}$ | $x_n+x_{n-1}\ne0$ | ex-sec-sqrt2 |
| 割線法の収束の次数は $\frac{1+\sqrt5}2$ | 単根の近くで局所的に | DLMF §3.8(iii)(この記事の thm-sec-order で証明する) |
$f$ を区間 $J$ で $C^2$ 級とし、$x^*\in J$、$f(x^*)=0$ とする。$a,b\in J$ が $f[a,b]\ne0$ を満たすとき $c:=b-f(b)/f[a,b]$ とおくと
$$
c-x^*=(b-x^*)(a-x^*)\,\frac{G(a,b)}{f[a,b]},\qquad G(a,b):=\int_0^1\!\!\int_0^1s\,f''\bigl(b+s(x^*-b)+us(a-x^*)\bigr)\,du\,ds
$$
が成り立つ。$J$ 上で $\lvert f''\rvert\le M$ なら $\lvert G(a,b)\rvert\le M/2$ であり、$a,b\to x^*$ のとき $G(a,b)\to f''(x^*)/2$ である。
$f(x^*)=0$ と差分商の定義から $f(b)=f(b)-f(x^*)=f[x^*,b]\,(b-x^*)$ である($b=x^*$ でも両辺 $0$)。したがって
$$
c-x^*=(b-x^*)-\frac{f[x^*,b](b-x^*)}{f[a,b]}=(b-x^*)\,\frac{f[a,b]-f[x^*,b]}{f[a,b]}.
$$
lem-sec-integral で $f[a,b]=\int_0^1f'(b+s(a-b))\,ds$、$f[x^*,b]=\int_0^1f'(b+s(x^*-b))\,ds$ と書く。$P_s:=b+s(x^*-b)$ とおくと $b+s(a-b)=P_s+s(a-x^*)$ なので、微積分学の基本定理により
$$
f'\bigl(P_s+s(a-x^*)\bigr)-f'(P_s)=s(a-x^*)\int_0^1f''\bigl(P_s+us(a-x^*)\bigr)\,du
$$
である。$s$ について積分すると $f[a,b]-f[x^*,b]=(a-x^*)G(a,b)$ となり、等式を得る。点 $P_s+us(a-x^*)=(1-s)b+s\bigl((1-u)x^*+ua\bigr)$ は $J$ の点の凸結合なので $J$ に入る。$\lvert G\rvert\le M\int_0^1s\,ds=M/2$ である。$a,b\to x^*$ のとき被積分関数の $f''$ の引数は $(s,u)$ について一様に $x^*$ に近づくので、$f''$ の連続性から $G(a,b)\to f''(x^*)\int_0^1s\,ds=f''(x^*)/2$ である。$\square$
$a=x_{n-1}$、$b=x_n$ とすると $c=x_{n+1}$ であり、$G_n:=G(x_{n-1},x_n)$ とおけば
$$
e_{n+1}=e_n\,e_{n-1}\,\frac{G_n}{f[x_{n-1},x_n]}
$$
となる。Newton 法の誤差の等式 $e_{n+1}=\frac{f''(\xi)}{2f'(x_n)}e_n^2$(Newton法 の定理「局所収束と2次収束」の証明)の $e_n^2$ が、割線法では $e_ne_{n-1}$ に替わる。指数の列が「前の 2 つの和」になることが、Fibonacci 数と黄金比の出どころである。
$f\colon I\to\mathbb R$ を開区間 $I$ 上の $C^2$ 級の関数、$x^*\in I$ を $f(x^*)=0$、$f'(x^*)\ne0$ を満たす点とする。$\delta_0>0$ を、$J_0:=[x^*-\delta_0,x^*+\delta_0]\subset I$ かつ $J_0$ 上で $\lvert f'\rvert\ge m>0$ となるようにとり、$M:=\max_{J_0}\lvert f''\rvert$、$C:=M/(2m)$ とおく。$0<\delta\le\delta_0$ を $q:=C\delta<1$ となるようにとり、$J:=[x^*-\delta,x^*+\delta]$ とおく。相異なる $x_0,x_1\in J$ から割線法を始めると、次が成り立つ。
$J_0$ 上で $f'$ は符号を変えない($\lvert f'\rvert\ge m$ と中間値の定理)ので $f$ は $J_0$ 上で狭義単調であり、$J$ の中の零点は $x^*$ だけである。
$x_{n-1},x_n\in J$ が相異なるとする。平均値の定理 により、$x_{n-1}$ と $x_n$ の間の $\eta$ で $f[x_{n-1},x_n]=f'(\eta)$ となり、$\lvert f[x_{n-1},x_n]\rvert\ge m>0$ である。よって $x_{n+1}$ が定まる。lem-sec-error を $J$ 上で使うと $\lvert G_n\rvert\le M/2$ だから
$$
\lvert e_{n+1}\rvert\le\frac{M}{2m}\lvert e_n\rvert\lvert e_{n-1}\rvert=C\lvert e_n\rvert\lvert e_{n-1}\rvert\le C\delta\,\lvert e_n\rvert<\lvert e_n\rvert\le\delta
$$
($e_n=0$ のときは $e_{n+1}=0$)であり、$x_{n+1}\in J$ となる。また $x_{n+1}=x_n$ となるのは $f(x_n)=0$、すなわち $x_n=x^*$ のときに限る。したがって、$f(x_n)\ne0$ なら $x_{n+1}\ne x_n$ で、次の段もこの議論が使える。$x_0\ne x_1$ から帰納法で 1 と 2 が従う。
3:$\varepsilon_n:=C\lvert e_n\rvert$ とおくと 2 は $\varepsilon_{n+1}\le\varepsilon_n\varepsilon_{n-1}$ である。$\varepsilon_0,\varepsilon_1\le C\delta=q=q^{F_1}=q^{F_2}$ であり、$\varepsilon_{n-1}\le q^{F_n}$、$\varepsilon_n\le q^{F_{n+1}}$ なら $\varepsilon_{n+1}\le q^{F_{n+1}+F_n}=q^{F_{n+2}}$ である。$F_n\to\infty$ と $q<1$ から $\varepsilon_n\to0$ である($C=0$ なら $f$ は $J_0$ で 1 次式で、$x_2=x^*$ である)。4 は 2 を $\lvert e_n\rvert$ で割ればよい。$\square$
Fibonacci数列 の一般項 $F_n=(\varphi^n-(-\varphi)^{-n})/\sqrt5$ から $F_{n+1}\approx\varphi^{n+1}/\sqrt5$ であり、3 の評価は「正しい桁数が反復ごとにおよそ $\varphi$ 倍になる」ことを表す。
thm-sec-local の仮定に加えて $f''(x^*)\ne0$ とし、反復が止まらない(すべての $n$ で $x_n\ne x^*$)とする。$A:=\left\lvert\dfrac{f''(x^*)}{2f'(x^*)}\right\rvert$ とおくと
$$
\lim_{n\to\infty}\frac{\lvert e_{n+1}\rvert}{\lvert e_n\rvert^{\varphi}}=A^{1/\varphi},\qquad\varphi=\frac{1+\sqrt5}2
$$
である。とくに割線法の収束の次数は $\varphi=1.618\ldots$ である。
$c_n:=\lvert G_n\rvert/\lvert f[x_{n-1},x_n]\rvert$ とおくと、lem-sec-error から $\lvert e_{n+1}\rvert=c_n\lvert e_n\rvert\lvert e_{n-1}\rvert$ である。$x_{n-1},x_n\to x^*$ だから、lem-sec-error と lem-sec-integral により $G_n\to f''(x^*)/2$、$f[x_{n-1},x_n]\to f'(x^*)$ であり、$c_n\to A>0$ である。$n_0$ を $n\ge n_0$ で $c_n>0$ となるようにとる。
$a_n:=\lvert e_{n+1}\rvert/\lvert e_n\rvert^{\varphi}$ とおく。$\varphi^2=\varphi+1$ から $1-\varphi=-1/\varphi$ なので、$n>n_0$ で
$$
a_n=c_n\lvert e_n\rvert^{1-\varphi}\lvert e_{n-1}\rvert=c_n\bigl(\lvert e_n\rvert\,\lvert e_{n-1}\rvert^{-\varphi}\bigr)^{-1/\varphi}=c_n\,a_{n-1}^{-1/\varphi}
$$
である。$b_n:=\log a_n$、$\ell_n:=\log c_n$、$\ell:=\log A$ とおくと $b_n=\ell_n-b_{n-1}/\varphi$ である。$\beta:=\ell/\varphi$ とおくと $\beta(1+1/\varphi)=\ell(\varphi+1)/\varphi^2=\ell$ なので、$d_n:=b_n-\beta$ は
$$
d_n=(\ell_n-\ell)-\frac{d_{n-1}}{\varphi}
$$
を満たす。$\rho:=1/\varphi<1$ とおき、$\varepsilon>0$ に対して $N$ を $n\ge N$ で $\lvert\ell_n-\ell\rvert\le\varepsilon$ となるようにとると、$n>N$ で $\lvert d_n\rvert\le\varepsilon+\rho\lvert d_{n-1}\rvert$ であり、帰納的に
$$
\lvert d_n\rvert\le\varepsilon(1+\rho+\dots+\rho^{n-N-1})+\rho^{n-N}\lvert d_N\rvert\le\frac{\varepsilon}{1-\rho}+\rho^{n-N}\lvert d_N\rvert
$$
となる。よって $\limsup\lvert d_n\rvert\le\varepsilon/(1-\rho)$ で、$\varepsilon$ は任意だから $d_n\to0$ である。すなわち $a_n=e^{b_n}\to e^{\beta}=A^{1/\varphi}$ である。収束の次数の一意性から、次数は $\varphi$ である。$\square$
Newton 法は 1 回の反復で $f(x_n)$ と $f'(x_n)$ の 2 つを計算し、正しい桁数がおよそ 2 倍になる。割線法は 1 回の反復で新しい関数値を 1 つだけ計算し、桁数がおよそ $\varphi$ 倍になる。$f'$ の計算の手間が $f$ と同じ程度なら、関数値を 2 回計算する間に Newton 法は桁数を約 $2$ 倍、割線法は約 $\varphi^2=2.618\ldots$ 倍にする。導関数が高価な、または式で得られない場面で割線法が好まれるのはこのためである(DLMF §3.8(iii) も、関数値 1 回あたりの効率では割線法が最終的に Newton 法を上回ると述べる)。
超 1 次収束する列では、$e_n\ne0$ のとき
$$
\frac{\lvert x_{n+1}-x_n\rvert}{\lvert e_n\rvert}=\left\lvert\frac{e_{n+1}}{e_n}-1\right\rvert\to1
$$
である。したがって、零点の近くでは隣り合う 2 点の差 $\lvert x_{n+1}-x_n\rvert$ が、まだ分からない誤差 $\lvert e_n\rvert$ のよい見積もりになる($x_{n+1}$ の誤差はそれよりずっと小さい)。
問い:$f(x)=x^2-2$、$x_0=1$、$x_1=2$ から割線法で $\sqrt2$ を求める。
使う公式:def-sec-main、lem-sec-error。
答え:$f[a,b]=a+b$ なので漸化式は $x_{n+1}=\dfrac{x_nx_{n-1}+2}{x_n+x_{n-1}}$ で、すべて有理数になる。
| $n$ | $x_n$ | $e_n=x_n-\sqrt2$ |
|---|---|---|
| 2 | $4/3$ | $-8.09\times10^{-2}$ |
| 3 | $7/5$ | $-1.42\times10^{-2}$ |
| 4 | $58/41$ | $4.21\times10^{-4}$ |
| 5 | $816/577$ | $-2.12\times10^{-6}$ |
| 6 | $47321/33461$ | $-3.16\times10^{-10}$ |
| 7 | $77227930/54608393$ | $2.37\times10^{-16}$ |
この $f$ では誤差の等式が $e_{n+1}=\dfrac{e_ne_{n-1}}{x_n+x_{n-1}}$ という厳密な形になる($G\equiv1$)。$\lvert e_{n+1}\rvert/\lvert e_n\rvert^{\varphi}$ は $n=5,6$ で $0.477$、$0.559$ と、極限 $A^{1/\varphi}=(2\sqrt2)^{-1/\varphi}=0.5259\ldots$ の両側を振れながら近づく。
$x_{n+1}-\sqrt2=\dfrac{x_nx_{n-1}-\sqrt2x_n-\sqrt2x_{n-1}+2}{x_n+x_{n-1}}=\dfrac{(x_n-\sqrt2)(x_{n-1}-\sqrt2)}{x_n+x_{n-1}}$ である。$x_2=\frac{2\cdot1+2}{3}=\frac43$、$x_3=\frac{(4/3)\cdot2+2}{10/3}=\frac75$、$x_4=\frac{(7/5)(4/3)+2}{41/15}=\frac{58}{41}$ と続く。thm-sec-order の証明の $d_n=(\ell_n-\ell)-d_{n-1}/\varphi$ で、$\lvert\ell_n-\ell\rvert$ が $\lvert d_{n-1}\rvert$ に比べて小さい間は $d_n\approx-d_{n-1}/\varphi$ となる。比が極限の上下を交互にとるのはこのためである。
問い:$f(x)=x-\cos x$ の零点 $x^*=0.7390851332\ldots$ を、割線法($x_0=0$、$x_1=1$)と Newton 法($x_0=1$)で求め、関数値を計算した回数で比べる。
使う公式:def-sec-main、rem-sec-efficiency。
答え:
| 割線法 | 誤差 | Newton 法 | 誤差 |
|---|---|---|---|
| $x_3=0.73629899\ldots$ | $-2.79\times10^{-3}$ | $x_1=0.75036386\ldots$ | $1.13\times10^{-2}$ |
| $x_4=0.73911936\ldots$ | $3.42\times10^{-5}$ | $x_2=0.73911289\ldots$ | $2.78\times10^{-5}$ |
| $x_5=0.73908511\ldots$ | $-2.11\times10^{-8}$ | $x_3=0.73908513\ldots$ | $1.70\times10^{-10}$ |
| $x_6$ | $-1.59\times10^{-13}$ | $x_4$ | $6.39\times10^{-21}$ |
| $x_7$ | $7.42\times10^{-22}$ |
割線法の $x_7$ までに計算する関数値は $f(x_0),\ldots,f(x_6)$ の 7 個、Newton 法の $x_4$ までは $f$ と $f'$ を 4 回ずつで 8 個である。同じ程度の手間で同じ程度の精度に達している。
問い:$f(x)=x^2$(零点 $0$ は重根)に、$x_0=1$、$x_1=\frac12$ から割線法を当てる。
答え:$x_n=1/F_{n+2}$($F_n$ は Fibonacci 数)で、$x_{n+1}/x_n\to1/\varphi=0.618\ldots$。1 次収束で、超 1 次収束しない。
$f[a,b]=a+b$ から $x_{n+1}=x_n-\dfrac{x_n^2}{x_n+x_{n-1}}=\dfrac{x_nx_{n-1}}{x_n+x_{n-1}}$、すなわち $\dfrac1{x_{n+1}}=\dfrac1{x_n}+\dfrac1{x_{n-1}}$ である。$1/x_0=1=F_2$、$1/x_1=2=F_3$ なので $1/x_n=F_{n+2}$ で、$x_n$ は $1,\frac12,\frac13,\frac15,\frac18,\frac1{13},\ldots$ となる。$F_{n+3}/F_{n+2}\to\varphi$(Fibonacci数列 の一般項から)なので $x_{n+1}/x_n\to1/\varphi$ である。
| 外す条件 | 反例 | 成り立たなくなること |
|---|---|---|
| 単根であること($f'(x^*)\ne0$) | $f(x)=x^2$、$x_0=1$、$x_1=\frac12$(ex-sec-double) | 誤差の比が $1/\varphi$ に近づき、thm-sec-local の 4(超 1 次収束)と thm-sec-order が成り立たない |
| 初期の 2 点がどちらも同じ零点に十分近いこと | $f(x)=x^2-2$、$x_0=-1$、$x_1=1$ | $f(x_1)=f(x_0)=-1$ で割線が $x$ 軸と平行になり、$x_2$ が定まらない(thm-sec-local の 1 が成り立たない) |
2 行目で $\lvert f'\rvert$ が正の下界をもつ区間 $J$ は $\sqrt2$ の近くか $-\sqrt2$ の近くに限られ、$-1$ と $1$ を同時に含む $J$ はとれない($f'(0)=0$)。
| 誤り | 正しくは | なぜ |
|---|---|---|
| はさみうち法(regula falsi)と同じ速さだと考える | はさみうち法は符号の異なる 2 点を保つように古い点を選び、収束は 1 次である。割線法は常に直前の 2 点を使う | DLMF §3.8(iii) |
| 割線法にも、初期の 2 点で $f$ の符号が異なることが必要だとする | 符号の条件は要らない。必要なのは 2 点が単根に十分近いこと | thm-sec-local |
| 重根でも次数 $\varphi$ で収束するとする | 重根では 1 次収束になる | ex-sec-double |
| $\lvert f(x_n)\rvert$ が小さいことだけで止める | $\lvert f'(x^*)\rvert$ が小さいと $\lvert f(x_n)\rvert$ が小さくても誤差は大きい。隣り合う差も見る | rem-sec-stop |
Mathpediaは寄付と、参考文献の書籍リンク(Amazonアソシエイト)の紹介料で運営されています。 支援について / 寄付する