gbさんからの質問3に答えることにする。
それは x1=1, xn+1=(axn+b)/(cxn+d) という漸化式で,
x1=1, xn+1=(3xn+4)/(2xn+3) よりも
√2 にもっと速く収束するものを求める、というものだった。
結果を示す。
fn(xn)=(axn+b)/(cxn+d)
f1(xn)=(xn+2)/(xn+1)
f2(xn)=(3xn+4)/(2xn+3)
f3(xn)=(7n+10)/(5xn+7)
f4(xn)=(17xn+24)/(12xn+17)
f5(xn)=(41n+58)/(29xn+41)
f6(xn)=(99xn+140)/(70xn+99)
f7(xn)=(239xn+338)/(169xn+239)
各函数の作り方は
f2(xn)=f1((f1(xn))=f1((xn+2)/(xn+1))
f3(xn)=f2((f1(xn))=f2((xn+2)/(xn+1))
・・・・・・・・・・・・・
それぞれの収束の様子を表にすると
数は計算回数
すなわちnの値
√2 =1.414213562373095048801 で小数点以下20桁。
「小数点以下一致桁数」は x20 の値。
「10桁一致」は 1.4142135623 に一致するまでのnの値
「20桁一致」は 1.414213562373095048801に一致するまでのnの値
函数 | 小数点以下一致桁数 | 10桁一致 | 20桁一致 |
---|---|---|---|
(xn+2)/(xn+1) | 14 | 14 | × |
(3xn+4)/(2xn+3) | 30 | 7 | 14 |
(7xn+10)/(5xn+7) | 46 | 5 | 9 |
(17xn+24)/(12xn+17) | 61 | 4 | 7 |
(41xn+58)/(29xn+41) | 75 | 3 | 6 |
(99xn+140)/(70xn+99) | 92 | 3 | 5 |
(239xn+338)/(169xn+239) | 107 | 2 | 4 |
取り急ぎ作成したので、数に多少のずれがあっても勘弁願いたい。
下の函数ほど収束が速いことが分かる。
各関数はf1(xn)=(xn+2)/(xn+1)から導かれるが
関数f1の導き方については後日アップする。