2017-02-05 3 views
0

の和の最大化、私は次のベクトル/行列持っている:私はとCを知って考えるMatlabの:対数

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

を、私はベクトルbを変化させることにより、MATLABで以下を最大化したい:

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

したがって最大化するために和Sの各要素をすることによって形成される:(2)を乗じたベクトルの要素i番目

  1. 行列Cのi番目の列の要素によって、ベクトルbの要素(4)
  2. 要素ごとの乗算で得られた要素(3)
  3. 和の
  4. 自然対数
問題へ

制約は、Bの各要素が> = 0と< = 1でなければならないこと、そして、彼らは1

に合計しなければならないことをしている私は、私はfminconの機能とminimze -Sを使用する必要がありますと仮定したが機能を設定する方法がわからない

答えて

0

あなたはCとaを知っているので、これはほとんど簡単な問題です。例えば ​​"min_sum_log.m"という名前で、主な問題のフォルダ内に関数を定義するだけです。

関数S = min_sum_log(B)

S = SUM(。repmat(B、1、N)* C)*。

上記のコードで終了

あなたは私はあなたにそれを残す機能本体に及びCを定義する必要があります。また、それらをグローバルとして定義し、それらを他の場所に定義することもできます。メインプログラムで、定義された関数ハンドルでfminconを呼び出す必要があります。(このようなもの)

[b_opt、value] = fmincon(@ min_sum_log、b_0、[]、[]、[]、[]、ゼロ(n、1)、1(n、1));

ここで、b_0は、bの解のベクトル空間の初期点です。 (この問題は凸でシンプルなので、CVXを使用することもできます)