Matlab:对数和的最大化

时间:2017-02-05 00:08:39

标签: matlab matrix optimization logarithm maximization

我有以下矢量/矩阵:

a --> nx1 
b --> nx1
C --> nxn

鉴于我知道a和C,我想通过改变向量b来最大化Matlab中的以下内容:

S = a(1)*log(sum(b.*C(:,1),1))+...+a(n)*log(sum(b.*C(:,n),1))

因此,要最大化的和S的每个元素由以下形成:

  1. 我将矢量a的元素乘以(2)
  2. (3)的自然对数
  3. 在(4)
  4. 中获得的元素的总和
  5. 向量b的元素逐个元素乘以矩阵C的第i列元素
  6. 问题的限制因素是b的每个元素必须是> = 0且< = 1,并且它们必须总和为1。

    我假设我必须使用fmincon函数并尽量减少-S但不确定如何设置函数S.

1 个答案:

答案 0 :(得分:0)

因为你知道C和a,这几乎是一个简单的问题。只需在主要问题的文件夹中定义一个函数,例如此名称“min_sum_log.m”。

函数S = min_sum_log(b)

S = sum(repmat(b,1,n)。* C)* a;

在上面的代码中,你必须在函数体中定义一个和C,我留给你。你也可以将它们定义为全局,并在其他地方定义它们。然后在主程序中,你需要使用定义的函数句柄调用fmincon :(类似这样)

[b_opt,value] = fmincon(@ min_sum_log,b_0,[],[],[],[],零(n,1),ones(n,1));

其中b_0是b的解的向量空间中的初始点。 (因为这个问题很简单,也可以考虑使用CVX)