【发布时间】:2021-09-10 08:33:48
【问题描述】:
library('pracma')
q <-function(beta){
beta[1] +
beta[3]*(
3 *exp(1*beta[2])/(exp(1*beta[2])+exp(2*beta[2])) +
4 *exp(2*beta[2])/(exp(1*beta[2])+exp(2*beta[2]))
)
}
jacobian(q,c(1,1,1))
[,1] [,2] [,3]
[1,] 1 0.1966119 3.731059
为产生相同结果的指数部分创建一个 for 循环:
g <-function(beta) {
j = 1:2
sumeal <- sum(exp(j*beta[2]))
eal <- c()
for (i in j) {
eal[i] <-(exp(i*beta[2]))/sumeal
}
beta[1]+beta[3]*(3*eal[1]+2*eal[2])
}
[,1] [,2] [,3]
[1,] 1 0.1966119 3.731059
现在我想为一组值生成这个函数。所以例如也适用于 5 和 6
q <-function(beta){
beta[1] +
beta[3]*(
5 *exp(1*beta[2])/(exp(1*beta[2])+exp(2*beta[2])) +
6 *exp(2*beta[2])/(exp(1*beta[2])+exp(2*beta[2]))
)
}
jacobian(q,c(1,1,1))
[,1] [,2] [,3]
[1,] 1 0.1966119 5.731059
目标是使用 for 循环编写函数,以便获得以下输出
[,1] [,2] [,3]
[1,] 1 0.1966119 3.731059
[2,] 1 0.1966119 5.731059
我尝试了以下方法,但似乎不起作用
g <-function(beta) {
j = 1:2
sumeal <- sum(exp(j*beta[2]))
eal <- c()
for (i in j) {
eal[i] <-(exp(i*beta[2]))/sumeal
}
xlag <- matrix(c(3,5,4,6), ncol = 2)
ealx <- xlag * eal[col(xlag)] #2x2 matrix which multiplies the values by the exponential part
beta[1]+beta[3]*(ealx) #probably where it goes wrong with the multiplication
}
jacobian(g,c(1,1,1))
[,1] [,2] [,3]
[1,] 1 -0.5898358 0.8068243
[2,] 1 0.9830597 3.6552929
[3,] 1 -0.7864477 1.0757657
[4,] 1 1.1796716 4.3863515
哪个尺寸不正确,值不正确
【问题讨论】:
-
我看不出第一个结构和下一个结构有什么区别,除了 3, 4 改为 5, 6
-
这个不同,另一个有一个简单的错误,我想出了如何解决。确实 3,4 更改为 5,6 y 但是,我想要获得的是一个函数,它可以从 1 个函数输出 3,4 和 5,6 的情况。而不是手动将 3,4 更改为 5,6。
-
您是否尝试将这两个参数(即 3、4 更改为 5、6)
-
是的,没错。
-
最好从矩阵中获得值 3、4、5 和 6