2017-02-05 17 views
0

Ich habe folgende Vektoren/Matrizen:Matlab: Maximierung der Summe der Logarithmen

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

Given Ich weiß ein und C, ich möchte folgendes in Matlab durch Variation Vektor b maximieren:

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

  1. i'th a des Vektorelements multipliziert mit (2)
  2. :

    jedes Element der Summe S So maximiert werden wird gebildet durch

  3. natürlichen Logarithmus von (3)
  4. Summe der Elemente in (4)
  5. Element-für-Element-Multiplikation der Elemente des Vektors b die von den Elementen der i-ten Spalte der Matrix C erhalten

die Einschränkungen für das Problem sind, dass jedes Element von b> sein muss = 0 und < = 1, und dass sie 1.

zusammenzufassen ich nehme an, ich würde die fmincon Funktion verwenden und minimze eS aber nicht sicher, wie man Funktion S. einstellt.

Antwort

0

seit du C und a kennst, ist das ein fast einfaches Problem. Definieren Sie einfach eine Funktion innerhalb des Ordners des Hauptproblems mit zB diesem Namen "min_sum_log.m".

Funktion S = min_sum_log (b)

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

Ende

in dem obigen Code müssen Sie und C in Funktionskörper definieren, die ich es Ihnen überlassen. Sie können sie auch als global definieren und anderswo definieren. dann müssen Sie im Hauptprogramm fmincon mit der definierten Funktion aufrufen: (so etwas)

[b_opt, Wert] = fmincon (@ min_sum_log, b_0, [], [], [], [], Nullen (n, 1), Einsen (n, 1));

wobei b_0 ein Anfangspunkt im Vektorraum von Lösungen von b ist. (weil dieses Problem konvex und einfach ist, können Sie auch CVX verwenden)

Verwandte Themen