R - 函数输入和优化

时间:2015-07-15 20:52:20

标签: r matrix sum mathematical-optimization

我通常在输入R中的函数时遇到问题,但它们总是很简单的功能,我设法解决它。然而,现在我手头有一个非常复杂的问题,需要具有未知数,求和函数和矩阵的函数。我无能为力从哪里开始。 (这不是我的作业问题,只是尝试使用不同的方法来解决问题,希望它有效)

所以我想输入一个功能:
A =Σ i = 1 N exp ^ [Σ j = 1 M 矩阵 ij * unknown j ]

然后最小化功能:
B = log A - Σ j = 1 M 未知 j * C j

所以我的目标是找到最小化函数B的j个未知参数。

但这很复杂。你不必直接给我答案。您可以使用另一个示例间接回答我的问题。任何帮助/提示/指导表示赞赏。

1 个答案:

答案 0 :(得分:2)

让我们看看我们是否可以将问题分解成更小的东西:

让我们先命名一些变量:

  • Q成为包含N行和M列的矩阵
  • x成为长度为M的(列)向量(暂时认为它不是“未知”)
  • C成为长度为M
  • 的(列)向量

请注意,AB都是“标量”(或者,在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的起始值。