通过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))