【发布时间】:2021-09-08 00:35:17
【问题描述】:
假设我要构造如下函数:
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])
假设我有以下数据。
y = 1:10
z = 10:19
f <- function(beta) cbind(y) %*% beta^2
jacobian(f, c(1)) #where c(1) is the value for beta.
g <- function(beta) cbind(z) %*% 1/beta
jacobian(g, c(1)) #where c(1) is the value for beta.
分别为 f 和 g 产生所需的输出:
[,1]
[1,] 2
[2,] 4
[3,] 6
[4,] 8
[5,] 10
[6,] 12
[7,] 14
[8,] 16
[9,] 18
[10,] 20
#and
[,1]
[1,] -10
[2,] -11
[3,] -12
[4,] -13
[5,] -14
[6,] -15
[7,] -16
[8,] -17
[9,] -18
[10,] -19
现在我可以合并这两个矩阵来获得 f 和 g 的雅可比。但是,我只想要一个函数来获得所需的输出。
我尝试了以下方法,但这并没有产生我想要的结果:
u <- function(beta) (cbind(y, z) %*% cbind(beta^2,1/beta))
jacobian(u, 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
有谁知道如何组合函数 f 和 g 以获得 10 x 2 雅可比矩阵?
雅可比函数的结构如下
library('pracma')
jacobian(f, x0, heps = .Machine$double.eps^(1/3), ...)
f: m functions of n variables.
x0: Numeric vector of length n.
heps: This is h in the derivative formula.
jacobian(): Computes the derivative of each function f_j by variable x_i separately, taking the discrete step h.
我想要得到的输出是
[,1] [,2]
[1,] 2 -10
[2,] 4 -11
[3,] 6 -12
[4,] 8 -13
[5,] 10 -14
[6,] 12 -15
[7,] 14 -16
[8,] 16 -17
[9,] 18 -18
[10,] 20 -19
【问题讨论】:
-
您能否举例说明您确实想要的输出?我想它可以从您在最顶部对
f的定义中推断出来,但您似乎打错了一两个:beta[1]^2中的指数^2缺少i∈ {1,2}. -
另外,您能否消除您的
jacobian()函数的歧义?快速搜索会发现numDeriv::jacobian()和pracma::jacobian()等函数;我想还有更多带有jacobian()功能的软件包。哪个是你的? -
感谢您的考虑。我已经编辑了最初的帖子以回答您的问题
-
太棒了!我有你的答案;只需输入即可。
-
太棒了!慢慢来。
标签: r function matrix nonlinear-functions