2016-05-03 10 views
2

lassen Sie uns annehmen, dass wir Aufgabe folgende haben: Finden Sie den optimalen Wert von GewichtenNonlinear quadratische Optimierungsaufgabe in Matlab

enter image description here

dass so minimieren folgende Gleichung

enter image description here

wo var- bedeutet Varianz von gegeben x1 Variable, auch wir haben Einschränkung, dass die Summe dieser Gewichte gleich sein sollte 1 enter image description here

i haben anonyme Funktion und Gewichte für die Anfangspunkte

w=[0.5; 0.5]; 


    >> [email protected](x1,x2) (w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2)) 

f = 

    @(x1,x2)(w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2)) 

i i Funktion denken initialisiert fmincon verwenden sollten, i eine Matrix

A=[1;1]; 

und B-Säule

b=[1]; 
geschaffen

dann versuchte ich folgenden Spaß

weighs=fmincon(f(x1,x2),w,A,b) 

aber es gibt mir Fehler

Error using optimfcnchk (line 287) 
FUN must be a function, a valid string expression, or an inline function 
object. 

könnten Sie mir bitte helfen, was falsch ist? Vielen Dank im Voraus

Antwort

2

Sie müssen die Funktion in fmincon als Funktion Handle oder anonyme Funktion angeben; f(x1,x2) wertet ein skalares Double aus, kein Function-Handle. fmincon möchte diese Funktion mit aktuellen Werten von w auswerten, um nach der Qualität der Lösung zu suchen, also benötigt sie eine Möglichkeit, w als Eingabe einzugeben.

So müssen Sie

  • Ändern Sie die Funktionsdefinition f(w,x1,x2), dh [email protected](w,x1,x2) (w(1)*w(1)*var(x1)+w(2)*w(2)*var(x2))
  • Schreiben Sie den fmincon Ruf als fmincon(@(u)f(u,x1,x2),...)

Allerdings würde ich vorschlagen, 1-w(2) für w(1) ersetzen (oder umgekehrt) in Ihrem Problem, es als unbeschränkte Optimierung einer Variablen neu zu formulieren (es sei denn, w ist ein echtes Gewicht, und muss zwischen 0 und 1 bleiben, in diesem Fall brauchen Sie noch eine Einschränkung).

+0

so wie meine Funktion eine endgültige Form haben wird? –

+1

Wie Gewichte, müssen wir wahrscheinlich die Grenzen 0 <= w (i) <= 1 hinzufügen. Also kein unbeschränktes Problem mehr. –

+0

@ErwinKalvelagen: guter Punkt, behoben. – Jonas