JacobianMat_JPH {lazy.symbolic} | R Documentation |
ヤコビ行列の計算
Description
英語のヘルプファイルは: JacobianMat
Arguments
..x.. |
パラメータのベクトル |
..func.. |
第一引数に x を持つ関数 |
..eps.. |
微小値 |
... |
"..func.." への追加の引数 |
Details
この関数は次を返す:
スカラー値関数の場合、
Jacobian[j] = d f(x) / d x[j]
ベクトル値関数の場合、
Jacobian[i,j] = d f(x)[i] / d x[j]
このプログラムは "..func.." の "..x.." に関するヤコビ行列を計算する。
"..func.." はスカラーまたはベクトル値関数、"..x.." はスカラーまたはベクトル値パラメータである。
"..func.." への追加パラメータは ... 引数を通して渡すことができる。 さらに、"..func.." 内で定義されていない変数の値は、"..func.." が定義されている環境から取得される。
この関数の典型的な使用例は、最小二乗法で y を yhat(param) によって近似する統計モデルのヤコビ行列を計算する場合である。 yhat(param) が多変量の場合(nobs x nvar の Yhat(param) 行列)、"..f.."("..x..") は c(Yhat(param)) を返す必要がある。
このパッケージの NR
や GN
関数、または ExamplesOfGNNR
の例を参照。
Value
スカラー値関数の場合、
Jacobian[j] = d func(x) / d x[j]
ベクトル値関数の場合、
Jacobian[i,j] = d func(x)[i] / d x[j]
Examples
# スカラー値関数(追加引数なし)
f <- function(x){ a*log(x)^2 + d*x + 1 }
dfdx <- function(x, a){
cat("\n使用する値: a = ", a, ", d = ", d, "\n")
2*a*log(x)/x + d
}
a <- 1; d <- 2; x <- 1
Jac <- JacobianMat(x, f)
Print(Jac, dfdx(x, a))
# スカラー値関数(追加引数あり)
ff <- function(x, a){ a*log(x)^2 + d*x + 1 }
dffdx <- function(x, a){
cat("\n使用する値: a = ", a, ", d = ", d, "\n")
2*a*log(x)/x + d
}
a <- NA; d <- 2; x <- 1
Jac <- JacobianMat(x, ff, a=1)
Print(Jac, dffdx(x, a=1))
# ベクトル値関数(追加引数なし)
f2 <- function(x){
f1 <- a[1]*x[1] + a[2]*x[2]^2
f2 <- b[1]*x[1]^2 + b[2]*x[2]
f3 <- a[1]*x[1]^2 + b[1]*x[2]^2
return(c(f1, f2, f3))
}
df2dx <- function(x){
df1dx1 <- a[1]; df1dx2 <- 2*a[2]*x[2]
df2dx1 <- 2*b[1]*x[1]; df2dx2 <- b[2]
df3dx1 <- 2*a[1]*x[1]; df3dx2 <- 2*b[1]*x[2]
Jac <- matrix(c(df1dx1, df2dx1, df3dx1, df1dx2, df2dx2, df3dx2), 3)
return(Jac)
}
a <- 1:2; b <- 2:3; x <- 1:2
Jac <- JacobianMat(x, f2)
Print(df2dx(x), Jac)
# ベクトル値関数(追加引数あり)
ff2 <- function(x, a){
f1 <- a[1]*x[1] + a[2]*x[2]^2
f2 <- b[1]*x[1]^2 + b[2]*x[2]
f3 <- a[1]*x[1]^2 + b[1]*x[2]^2
return(c(f1, f2, f3))
}
dff2dx <- function(x, a){
df1dx1 <- a[1]; df1dx2 <- 2*a[2]*x[2]
df2dx1 <- 2*b[1]*x[1]; df2dx2 <- b[2]
df3dx1 <- 2*a[1]*x[1]; df3dx2 <- 2*b[1]*x[2]
Jac <- matrix(c(df1dx1, df2dx1, df3dx1, df1dx2, df2dx2, df3dx2), 3)
return(Jac)
}
a <- NA; b <- 2:3; x <- 1:2
Jac <- JacobianMat(x, ff2, a=1:2)
Print(dff2dx(x, a=1:2), Jac)
[Package lazy.symbolic version 1.0.0.20250830 ]