通过for循环为R中的雅可比矩阵生成函数
Generating a function via for-loop for the Jacobian matrix in R
假设我有以下两个变量 y 和 z 以及变量 x
y = 1:10
z = 1:10
现在我想创建一个具有以下函数的 jacobian
f <- function(x) c(y[1]*x[1]+z[1]*x[2],
y[2]*x[1]+z[2]*x[2],
: : : :
y[10]*x[1]+z[10]*x[2])
那么得到雅可比行列式就可以很容易的得到
jacobian(f, c(1,1))
现在假设
y= 1:i.
当i变大时,手动计算函数就变成了一个耗时的任务。
有没有办法为 i 构造相同的函数?
我尝试了以下方法:
for (i in 1:10) {
f[i] <- function(x) c(y[i]*x[1]+z[i]*x[2])
}
jacobian(f, c(1,1))
ThomasIsCoding 建议:
f <- function(x) tcrossprod(cbind(y, z), t(x))
这非常适合这种情况。
现在假设函数更复杂
y[1]*x[1]^2+z[1]/x[2]
建议的 t(x) 不再有效。我现在如何为 x 编写向量?
函数f
可以试试下面的方法
f <- function(x) tcrossprod(cbind(y, z), t(x))
假设我有以下两个变量 y 和 z 以及变量 x
y = 1:10
z = 1:10
现在我想创建一个具有以下函数的 jacobian
f <- function(x) c(y[1]*x[1]+z[1]*x[2],
y[2]*x[1]+z[2]*x[2],
: : : :
y[10]*x[1]+z[10]*x[2])
那么得到雅可比行列式就可以很容易的得到
jacobian(f, c(1,1))
现在假设
y= 1:i.
当i变大时,手动计算函数就变成了一个耗时的任务。
有没有办法为 i 构造相同的函数?
我尝试了以下方法:
for (i in 1:10) {
f[i] <- function(x) c(y[i]*x[1]+z[i]*x[2])
}
jacobian(f, c(1,1))
ThomasIsCoding 建议:
f <- function(x) tcrossprod(cbind(y, z), t(x))
这非常适合这种情况。
现在假设函数更复杂
y[1]*x[1]^2+z[1]/x[2]
建议的 t(x) 不再有效。我现在如何为 x 编写向量?
函数f
f <- function(x) tcrossprod(cbind(y, z), t(x))