R - 函数输入和优化
R - function input and optimization
我通常在 R 中输入函数时遇到问题,但它们总是我设法解决的简单函数。但是现在我手头有一个非常复杂的问题,它需要具有未知数、求和和矩阵的函数。我不知道从哪里开始。 (这不是我的作业题,只是尝试用不同的方法算出一些东西,希望它能奏效)
所以我要输入一个函数:
A=∑i=1Nexp^[∑j=1M 矩阵 ij * 未知j ]
然后最小化函数:
B=log A - ∑j=1M未知j*Cj
所以我的目标是找到最小化函数 B 的 j 个未知参数。
但这很复杂。你不必直接给我答案。您可以使用另一个示例来间接回答我的问题。任何 help/tips/guidance 表示赞赏。
让我们看看能否将问题分解成更小的问题:
让我们先命名一些变量:
- 设
Q
为 N
行和 M
列的矩阵
- 让
x
成为长度为M
的(列)向量(暂时认为它不是"unknown")
- 设
C
为长度为 M
的(列)向量
请注意,A
和 B
都将是 "scalars"(或者,用 R 的说法,1x1 向量)。
提示: 在 R 中,您可以使用 %*%
运算符进行矩阵乘法。参见 Quick-R: Matrix algebra。
正在处理函数 A
Q %*% x
是指数函数内和内积,所以:
A <- function (Q, x) {
y <- Q %*% x # This will be a (column) vector of length `N`
return(sum(exp(y)) # This will be a scalar (more precisely, a 1x1 vector)
}
没那么难吧?
正在处理函数 B
B <- function(Q, C, x) {
y <- sum(x * C) # or, since both x and C are column vectors:
# y <- t(x) %*% C
a <- A(Q, x)
return(log(a) - y)
}
所以,这就是您输入函数的方式。
至于优化,建议你看看optimx
package;您需要为向量 x
.
提供起始值
我通常在 R 中输入函数时遇到问题,但它们总是我设法解决的简单函数。但是现在我手头有一个非常复杂的问题,它需要具有未知数、求和和矩阵的函数。我不知道从哪里开始。 (这不是我的作业题,只是尝试用不同的方法算出一些东西,希望它能奏效)
所以我要输入一个函数:
A=∑i=1Nexp^[∑j=1M 矩阵 ij * 未知j ]
然后最小化函数:
B=log A - ∑j=1M未知j*Cj
所以我的目标是找到最小化函数 B 的 j 个未知参数。
但这很复杂。你不必直接给我答案。您可以使用另一个示例来间接回答我的问题。任何 help/tips/guidance 表示赞赏。
让我们看看能否将问题分解成更小的问题:
让我们先命名一些变量:
- 设
Q
为N
行和M
列的矩阵 - 让
x
成为长度为M
的(列)向量(暂时认为它不是"unknown") - 设
C
为长度为M
的(列)向量
请注意,A
和 B
都将是 "scalars"(或者,用 R 的说法,1x1 向量)。
提示: 在 R 中,您可以使用 %*%
运算符进行矩阵乘法。参见 Quick-R: Matrix algebra。
正在处理函数 A
Q %*% x
是指数函数内和内积,所以:
A <- function (Q, x) {
y <- Q %*% x # This will be a (column) vector of length `N`
return(sum(exp(y)) # This will be a scalar (more precisely, a 1x1 vector)
}
没那么难吧?
正在处理函数 B
B <- function(Q, C, x) {
y <- sum(x * C) # or, since both x and C are column vectors:
# y <- t(x) %*% C
a <- A(Q, x)
return(log(a) - y)
}
所以,这就是您输入函数的方式。
至于优化,建议你看看optimx
package;您需要为向量 x
.