目的 ニュートン・ラフソン法により一変数間数 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