首页 > 解决方案 > 通过for循环为R中的雅可比矩阵生成一个函数

问题描述

假设我有以下两个变量 y 和 z 以及变量 x

y = 1:10
z = 1:10

现在我想创建以下功能的雅可比

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 写一个向量?

标签: rfunctionloopsfor-loopnonlinear-functions

解决方案


您可以尝试以下功能的方式f

f <- function(x) tcrossprod(cbind(y, z), t(x))

推荐阅读