- こちらで連立方程式の解を求めたい
- パッケージ"rootSolve" の中の uniroot.all() で解を出す
- この uniroot.all() はパッケージ"base" の中の uniroot() 関数を使っている
- uniroot()の中身の一部
val <- .Internal(zeroin2(function(arg) f(arg, ...), lower, upper, f.lower, f.upper, tol, as.integer(maxiter)))
iter <- as.integer(val[2L])
- uniroot() の中身の調べ方を教えてもらう
- .Internal() は 関数zeroin2() を呼び出すもの
- zeroin2について
- まずRのソースコードをダウンロードする
- R-2.12.2/src/main 以下に cで書かれたソースが見られる
- 名前のついたcのソースが見当たらない場合は name.c を参照
- src/main/optimize.c にzeroin2()が書いてある(google検索)
- 中身を見ると今度は R_zeroin2() を読み込んでいる
- src/appl/zeroin.cにR_zeroin2()は書かれている(google検索)
- ようやく中身にたどり着いた
- 内容は解の差分が許容する誤差内に収まれば終了するもの
- なので に対しても解として値を返すことがある
- $f.root が からずれる
- 解を としてを計算してももちろん ではない
f<-function(x){1/x}
a<-uniroot(f,c(-2,0))
a
f(a)
> f<-function(x){1/x}
> a<-uniroot(f,c(-2,0))
> a
$root
[1] -6.103702e-05
$f.root
[1] -16383.5
$iter
[1] 16
$estim.prec
[1] 6.103702e-05
> f(a)
以下にエラー 1/x : 二項演算子の引数が数値ではありません
- もう一つ"L"について
- こちらの中のこの部分を参照する
- 実数のあとに"L"をつけると整数型(Int型)でないときに警告が出る