【问题标题】:Matlab: Maximization of sum of logarithmsMatlab:对数和的最大化
【发布时间】:2017-02-05 00:08:38
【问题描述】:

我有以下向量/矩阵:

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 的第 i 个元素乘以 (2)
  2. (3) 的自然对数
  3. (4)中得到的元素总和
  4. 向量 b 的元素与矩阵 C 的第 i 列的元素的逐个元素相乘

问题的约束是 b 的每个元素必须 >=0 和

我假设我必须使用 fmincon 函数和 minimze -S 但不确定如何设置函数 S。

【问题讨论】:

    标签: matlab matrix optimization logarithm maximization


    【解决方案1】:

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

    函数 S = min_sum_log(b)

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

    结束

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多