開平法
[Wikipedia|▼Menu]
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%;font-size:90%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}html.client-js body.skin-minerva .mw-parser-output .mbox-text-span{margin-left:23px!important}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}

この記事は検証可能参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方
出典検索?: "開平法" ? ニュース ・ 書籍 ・ スカラー ・ CiNii ・ J-STAGE ・ NDL ・ dlib.jp ・ ジャパンサーチ ・ TWL(2016年7月)

開平法(かいへいほう、: extraction of square root)とは、平方根小数表示を求めていくアルゴリズムである。開平や開平算、開平計算とも。平方根を求めることを開平するという。開法の一種。
開平法の原理

与えられた正の数の正の平方根の小数表示を求めるために、ここではまず漸化式を立てて、一般的な求値法を求める。そして、求値の明確化のために、開平法と呼ばれる筆算の原理を導出する。以下は十進法表示の場合だが、他の位取り記数法でも同様な計算で求められる。ここで述べるのと基本的には同じ方法で、立方根を求める開立法や、もっと一般に n 乗根を求めることも可能である。手続きを簡略化した筆算による方法については「#筆算による求値」を参照
問題の定式化

与えられた √x (x > 0) に対し、10k の位 ak (k ? n) を求める: x = ∑ k ≤ n 10 k a k = 10 n a n + 10 n − 1 a n − 1 + ⋯ + 10 2 a 2 + 10 a 1 + a 0 + 10 − 1 a − 1 + 10 − 2 a − 2 + ⋯ {\displaystyle {\begin{aligned}{\sqrt {x}}&=\textstyle \sum \limits _{k\leq n}10^{k}a_{k}\\&=10^{n}a_{n}+10^{n-1}a_{n-1}+\cdots +10^{2}a_{2}+10a_{1}+a_{0}+10^{-1}a_{-1}+10^{-2}a_{-2}+\cdots \end{aligned}}}

x の首位を an とする。つまり、n は √x < 10k+1 を満たす最小の k とする。また便宜上 ak = 0 (k > n) とする。

√x の 10m の位より上(かみ)の位 pm は分かっているとし、10m の位 am を求めるとする。すなわち p m = ∑ k = m + 1 n 10 k − m − 1 a k = 10 n − m − 1 a n + 10 n − m − 2 a n − 1 + ⋯ + 10 a m + 2 + a m + 1 {\displaystyle p_{m}=\textstyle \sum \limits _{k=m+1}^{n}10^{k-m-1}a_{k}=10^{n-m-1}a_{n}+10^{n-m-2}a_{n-1}+\cdots +10a_{m+2}+a_{m+1}}

とおく。正方形ABCD の面積は 10−2mx, 青い正方形の面積は 100pm2 で、橙色と桃色の部分の面積の和が (20pm + am)am = rm である。pm の値はすでに決まっていて、am をどこまで大きく取れるのかが問題である。

am は 10m+1pm + 10mam ? √xを満たす最大の am、すなわち(20pm + am)am ? 10−2mx − 100pm2 … (1)

を満たす最大の am である。これを見つける。am の値は 0 から 9 までの 10 通りなので、順に試していけば am は求まる。m = n のとき、pn = 0 よりan2 ? 10−2nxm < n のとき、20pmam ? (20pm + am)am ? 10−2mx − 100pm2

pm ≠ 0 より a m ≤ 10 − 2 m x − 100 p m 2 20 p m {\displaystyle a_{m}\leq {\frac {10^{-2m}x-100{p_{m}}^{2}}{20p_{m}}}} 右辺の計算値により、am の値の見当を付けることができる。

これにより am が求まれば、pm−1 = 10pm + am

の値が分かるから、(20pm−1 + am−1)am−1 ? 10−2(m−1)x − 100pm−12

を満たす最大の am−1 を見つければよい。

このようにして、帰納的に ak (k ? n) の値が求まる。
漸化式の簡略化

不等式(1) を簡略化する。「20」を基数 10 と合わせるため 10 × 2 とする。そのためqm = 2pmym = 10−2mx − 100pm2

とおくと、不等式(1) は(10qm + am)am ? ym … (1')

である。qm = 2pm    = 2(10pm+1 + am+1)    = 10qm+1 + 2am+1 … (2)

(1') を満たす最大の am を求めるために、ym の整数部分 zm を、zm+1 から求める。

rm = (10qm + am)am とおくと、ym = 10−2mx − 100pm2    = 100{10−2(m+1)x − (10pm+1 + am+1)2}     = 100{10−2(m+1)x − 100pm+12} − 100(20pm+1 + am+1)am+1    = 100ym+1 − 100rm+1

100ym+1 = 10−2mx − 10000pm+12 の整数部分は、x の 10i の位を xi とすると、100zm+1 + 10x2m+1 + x2m に等しい。したがって、zm = (100zm+1 + 10x2m+1 + x2m) − 100rm+1    = 100(zm+1 − rm+1) + 10x2m+1 + x2m … (3)

(2), (3) から、(1') を満たす最大の am を求めていく。
筆算による効率化

pm から不等式(1') を満たす最大の am を求めていくには、筆算による帰納的計算が明確である。

                                              am
               √    …   …          x2m+1  x2m  
                         zm+1
                         rm+1         ↓    ↓
qm  am           zm+1 − rm+1   x2m+1  x2m  
     am                       (10qm + am)am  
    qm−1                               zm − rm  

zm = 100(zm+1 − rm+1) + 10x2m+1 + x2m から rm = (10qm + am)am を引き、負とならない最大の am を求める。(主算)

次の am−1 を求めるために、qm−1 = (10qm + am) + am を求めておく。(副算)

具体的な計算方法

例として、ここでは x = 5630738.132 の正の平方根 √x の小数表示を求める。初期値は、

x6 = 5, x5 = 6, x4 = 3, x3 = 0, x2 = 7, x1 = 3, x0 = 8, x−1 = 1, x−2 = 3, x−3 = 2, xi = 0 (i < −3)

漸化式による求値

106 ? x < 108 より、n = 3

まずは a3 を求める。

z4 = 0

r4 = 0

p3 = 0 より q3 = 0
z3 = 100(z4 − r4) + 10x7 + x6 = 100 × (0 − 0) + 5 = 5r3 = (10q3 + a3)a3 = a32a32 ? 5 を満たす最大の a3 は、a3 = 2 である。

次に、a2 を求める。

q2 = (10q3 + a3) + a3 = 2 + 2 = 4
z2 = 100(z3 − r3) + 10x5 + x4 = 100 × (5 − 4) + 63 = 163r2 = (10q2 + a2)a2 = (40 + a2)a2(40 + a2)a2 ? 163 を満たす最大の a2 は、a2 = 3 である。

a1 を求める。

q1 = (10q2 + a2) + a2 = 43 + 3 = 46
z1 = 100(z2 − r2) + 10x3 + x2 = 100 × (163 − 129) + 7 = 3407r1 = (10q1 + a1)a1 = (460 + a1)a1(460 + a1)a1 ? 3407 を満たす最大の a1 は、a1 = 7 である。

同様の計算を繰り返すと、各項の値は次の表のようになる。


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:27 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef