あらきけいすけの雑記帳

 | 

2010-08-11 (Wed)

[][][]累乗根の近似値を具体的に計算する方法を習わずにn乗根を受け入れていたんだなあ

教育用の覚え。指数法則の教材を整理しながら、指数を有理数に拡張し、n乗根と分数の指数の関係  を導入するところで、正の数のn乗根が必ず存在することを天下り的に保証してしまっていることと*1、n乗根の値を求める算法をまったく与えていない*2ことに気がつく(何をいまさら>あらき)。ググっても上位のページは「受験向き」の形式的な指数の算法の話が多いように思われる*3

a の n 乗根、すなわち方程式 xn=a (x>0, a>0, nは整数)の解は漸化式  で決まる数列 xn の極限値  で与えられる*4。この漸化式は方程式 xn=a の解をニュートン法*5で求める計算を、高校数学の漸化式っぽく書き下したものであり、実際には無限の計算はせずに、適当な正の数を初期値にとって、(いまどきなら表計算ソフトを使って*6)必要とする桁数まで収束したところで漸化式を解くのをやめればよい。漸化式をC言語の関数で書くと次のようになる*7
[追記:2014.12.7] math.h の pow を使わないバージョンを http://d.hatena.ne.jp/arakik10/20141202/p1 に書いた。

#include <stdio.h>
#include <math.h>
double myNthRoot ( // n乗根の計算をする関数
    double base    // (base) の (1/order) 乗の近似値を求める
   ,double order   //
   ,double EPS     // 収束の精度
){
    double root=base ,root_prev=0.;
    while ( fabs(root-root_prev)/fabs(root_prev) > EPS ) {
        root_prev= root;
        root=((order-1)*root)/order + base/(order*pow(root,order-1));
    }
    return x;
}


蛇足近似についてというページによれば、 a が 1 に近いとき、a の n 乗根が で与えられるそうだ。へぇうまい Pade 近似だなあ*8

*1:n次関数 f(x):=xn が正の実数 x に対して全単射であることを前提している。…てゆーか、指数の四則のうち ax+y, ax-y, axy までは「安直に a を並べて書いて」導入できるのに、商だけは「それがある」ことを考えるだけでも実数の連続性や極限の概念必要としている…ってのがひっかかっているのだ。指数を無理数に拡張することよりも、深刻なギャップがある…ような気がしているのだ。

*2:何なのだろうね、これに限らないけど、高校数学における具体的な数値を求める算法の軽視は。

*3Google: 累乗根 計算

*4:n=2のとき、有名な「平方根のバビロニア式算法」になる。Methods of computing square roots - Wikipedia, the free encyclopedia. 残念ながら日本語版にバビロニア式の開平アルゴリズムの項目はないようだ。

*5ニュートン法 - Wikipedia

*6:表計算ソフトなら =2^(1/3) でOK…というツッコミは今はなしで。分数のまま処理しようとすると、分母の桁数の増えるペースが速いので、筆算は途中でいやになるだろう。漸化式の収束のペースは速い。
 2の3乗根(1.25992...)の場合に計算を3回繰り返すと次のようになる

*7pow(base,1./order)で済むのではないか…というツッコミは今はなしで。

*8Padé approximant - Wikipedia, the free encyclopedia. 残念ながら日本語版にパデ近似の項目はないようだ。

トラックバック - http://d.hatena.ne.jp/arakik10/20100811/p1
リンク元
 |