问题描述
假设我有以下两个变量 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,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))