ニュートン・ラフソン法による 1 変数方程式の解     Last modified: Apr 13, 2004

目的

ニュートン・ラフソン法により一変数間数 f(x)=0 の解を求める。

使用法

newton(fun, x1, delta=1e-5, epsilon=1e-14, max.rotation=100)

引数

fun           関数定義
x1            初期値
delta         数値微分するときの微小数値(1e-5)
epsilon       許容誤差(1e-14)
max.rotation 収束計算上限回数(100)

ソース

インストールは,以下の 1 行をコピーし,R コンソールにペーストする
source("http://aoki2.si.gunma-u.ac.jp/R/src/newton.R", encoding="euc-jp")

# ニュートン・ラフソン法により一変数間数 f(x)=0 の解を求める
newton <- function(  fun,                    # 関数定義
                        x1,                     # 初期値
                        delta=1e-5,             # 数値微分のときの微小数値
                        epsilon=1e-14,          # 許容誤差
                        max.rotation=100)       # 収束計算上限回数
{
        fun2 <- function(x)                  # 数値微分を行う関数
        {
                (fun(x+delta)-fun(x))/delta     # 接線の傾きの近似値
        }
        for (i in 1:max.rotation) {
                x2 <- x1 -fun(x1)/fun2(x1)   # x2 は x1 が改善された解の近似値
                if (abs((x2-x1)/x2) < epsilon) {
                        break
                }
                x1 <- x2
        }
        if (i > max.rotation) {
                warning("収束しませんでした")
        }
        x2
}


使用例

newton(function(x) sin(x)/x, 1)		# sin(x)/x=0
newton(function(x) x^3-2, 1)		# 2 の 3 乗根 x^3=2

出力結果例

> newton(function(x) sin(x)/x, 1)
[1] 3.141593
> newton(function(x) x^3-2, 1)
[1] 1.259921


・ 直前のページへ戻る  ・ E-mail to Shigenobu AOKI ( @si.gunma-u.ac.jp )

Made with Macintosh