我通常在输入R中的函数时遇到问题,但它们总是很简单的功能,我设法解决它。然而,现在我手头有一个非常复杂的问题,需要具有未知数,求和函数和矩阵的函数。我无能为力从哪里开始。 (这不是我的作业问题,只是尝试使用不同的方法来解决问题,希望它有效)
所以我想输入一个功能:
A =Σ i = 1 N exp ^ [Σ j = 1 M 矩阵 ij * unknown j ]
然后最小化功能:
B = log A - Σ j = 1 M 未知 j * C j
所以我的目标是找到最小化函数B的j个未知参数。
但这很复杂。你不必直接给我答案。您可以使用另一个示例间接回答我的问题。任何帮助/提示/指导表示赞赏。
答案 0 :(得分:2)
让我们看看我们是否可以将问题分解成更小的东西:
让我们先命名一些变量:
Q
成为包含N
行和M
列的矩阵x
成为长度为M
的(列)向量(暂时认为它不是“未知”)C
成为长度为M
请注意,A
和B
都是“标量”(或者,在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
的起始值。