maxima入門

ここではmaximaでニュートン法のプログラムを書いてみます。

ニュートン法は近似的に解を求めるためのアルゴリズムの一つです。
ニュートン法自体についてはwikipedia
に譲るとして、一般にプログラムでニュートン法を使う場合
求める関数の微分はあらかじめ求めておく必要があります。
しかしmaximaには微分を行う関数があるため、
この箇所を自動化することができます。

以下f(x)は入力となる式です。
以下のt(f)をそのまま使ってもよいのですが
g(x,k)のようにすれば2や3の平方根が計算出来ます。

ニュートン法

f(x):=x^2-a$ t(f):=block([fd,h],fd:diff(f(x),x),h:x-f(x)/fd,return(rat(h)))$ t(f); g(x,k):=if x=1 then (1+k)/2 else (g(x-1,k)^2+k)/(2*g(x-1,k)); bfloat(g(10,2)); /* sqrt(2) */ bfloat(g(10,3)); /* sqrt(3) */
ここでは自分でニュートン法のアルゴリズム通りに計算しましたが ニュートン法を使って特定の関数の値を求めたい場合は mnewtonパッケージが利用できます これについては方程式を解く、の項で使い方を説明しています。
since 2014/03/23