【发布时间】:2021-09-07 12:07:12
【问题描述】:
雅可比矩阵包
install.packages('pracma')
library('pracma')
假设我有以下一组非线性函数
f <- function(beta) c(y[1]*beta[1]+z[1]*1/beta[2],
y[2]*beta[1]+z[2]*1/beta[2],
: : : :
y[i]*beta[1]^2+z[i]*1/beta[2])
现在假设 i 变得很大,写出 i 的所有函数非常耗时。
如何编写这样的函数? 我尝试了以下方法:
f <- function(beta) cbind(y, z) %*% (c(beta^2,(beta^-1)), ncol = 1, nrow = 2)
当我应用这个函数来构造雅可比矩阵时,它不是我想要的格式
y = 1:10
z = 10:19
f <- function(beta) cbind(y, z) %*% matrix(cbind(beta^2,1/beta), ncol = 1, nrow = 2)
jacobian(f, c(1,1))
第一列的输出正确,第二列的输出正确:
[,1] [,2]
[1,] 2 20
[2,] 4 22
[3,] 6 24
[4,] 8 26
[5,] 10 28
[6,] 12 30
[7,] 14 32
[8,] 16 34
[9,] 18 36
[10,] 20 38
再试一次:
f <- function(beta) cbind(y, z) %*% cbind(beta^2,1/beta)
jacobian(f, c(1,1))
给出以下结果:
[,1] [,2]
[1,] 2 20
[2,] 4 22
[3,] 6 24
[4,] 8 26
[5,] 10 28
[6,] 12 30
[7,] 14 32
[8,] 16 34
[9,] 18 36
[10,] 20 38
[11,] -1 -10
[12,] -2 -11
[13,] -3 -12
[14,] -4 -13
[15,] -5 -14
[16,] -6 -15
[17,] -7 -16
[18,] -8 -17
[19,] -9 -18
[20,] -10 -19
第一列的前 10 个观察值和第二列的 11:20 观察值是我需要的一次。
有谁知道如何获得这两个向量?我应该在函数内部创建一个循环吗?
【问题讨论】:
标签: r function for-loop matrix nonlinear-functions