ニュートン・ラフソン法による 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 )