Minimierungsaufgabe < Mathematica < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | b = {1, 1, 1}
A = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}
MatrixForm[b]
MatrixForm[A]
X = Table[x[i], {i, 1, 3}];
Length[X]
f =.
f := (A.X - b).(A.X - b)
g := Total[X]
NMinimize[{f, g == 1, x[1] >=
0, x[2] >= 0,
x[3] >= 0}, {x[1], x[2], x[3]}, Method -> {"SimulatedAnnealing"}]
|
Wenn ich wie oben eingeben, dann liefert Mathematica mir die richtige Lösung.
Jetzt will ich die Nebenbedingungen abkürzen, z.B x[i],{i,1,3}. Es sieht nun so aus:
Ich habe X in eine Array umgewandelt mit
X = Array[x, 3]
NMinimize[{f, g == 1, X >=0}, X, Method -> {"SimulatedAnnealing"}]
und es kamm immer die Fehlermeldung.Könnte jemand mir erklären warum es hier nicht richtig ist.
und wenn ich
NMinimize[{f, g == 1, X[[1]] >= 0}, X, Method -> {"SimulatedAnnealing"}]
eingeben, wurde auch richtige Lösung geliefert aber allerdings habe ich nur eine Nebenbedingung für x[1]>=0.
Kann man hier auch für andere x[2] und x[3] in der NMinimize einbauen.
Ich bedanke mich im Voraus und freue mich sehr auf Eure Hilfe, ich bin in Eile.
LG
Stuttgarter.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hallo,
das Problem ist, dass man die [mm] $\ge$-Relation [/mm] nicht auf Lists oder Tables anwenden kann.
Das Einzige, was ich hinbekommen habe, ist die Erzeugung der Nebenbedingungen in einer eigenen Table und Hinzufügen per Flatten:
Y = Table[x[i] >= 0, {i, 1, 3}]
NMinimize[Flatten[{f, g == 1, Y}], X, Method -> {"SimulatedAnnealing"}]
Ich meine, das Ergebnis sieht genauso aus wie bei deinem Originalaufruf. Überprüf das aber bitte selber nochmal.
Gruß
Martin
|
|
|
|
|
Hi Martin,
vielen Dank!
es hat funktioniert. Ich habe eine Testberechnung für 300-dimensionale Vektor X durchgeführt und es hat auch geklappt.
Vielen Dank für deine schnelle Antwort und Hilfbereitschaft.
LG
Stuttgarter
|
|
|
|