|
Autor |
NMinimize/Numerical Nonlinear Global Optimization, Funktionsweise unklar für freie Variablen |
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Themenstart: 2019-08-21
|
Liebe alle, die folgende Frage ist von theoretischer Natur, ich hoffe, dass klappt. Ich habe eine Simulation, der Code dafür ist ewig lang, weshalb ich kein Minimalbeispiel geben kann. diese Simulation hängt von drei Parametern ab. Die Simulation ist also für mich eine Funktion, im folgenden function, von drei Variablen, bisl wie im folgenden Zufallsbeispiel.
\sourceon mathematica
f[x_, a_, b_] := a*x^2 + b
NMinimize[
{(f[x, a, 1] - 70)^2, 3<= x <= 4}, {{a, 0, 4}, x}]
\sourceoff
Sie, also meine function, hat als Return eine ganze Zahl. Zum Beispiel
\sourceon mathematica
function[3.2,1, 2]=70
\sourceoff
Wenn ich nun einen der Parameter schätzen möchte für ein gewünschtes Ergebnis, versuche ich es mit
\sourceon mathematica
NMinimize[
{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}]
\sourceoff
Dann setzt er keine Zahlen ein. Zumindest kommt in der Fehlermeldung
\sourceon mathematica
E^(-0.00476071 x)
\sourceoff
da sollte eigentlich was ausgerechnet werden für ausgewertete x. Was mache ich denn da falsch im Aufbau?
|
Profil
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Beitrag No.1, vom Themenstarter, eingetragen 2019-08-21
|
Ich verstehe es nicht ganz, aber das ist die Antwort
https://eternaldisturbanceincosmos.wordpress.com/2011/04/27/nminimize-in-mathematica-could-drive-you-insane/
EDIT: Nein, anscheinend doch nicht. Das unterbindet die Fehlermeldung aber ich vermute, es klappt etwas noch nicht
|
Profil
|
Primentus
Senior  Dabei seit: 18.02.2016 Mitteilungen: 2180
Wohnort: Deutschland
 | Beitrag No.2, eingetragen 2019-08-21
|
Hallo dilch,
also wenn ich
\sourceon Mathematica
function[x_, a_, b_] := a*x^2 + b
NMinimize[(function[x, 1, 2] - 70)^2, 3 < x < 4, {x}]
\sourceoff
eingebe, bringt Mathematica mir die Ausgabe
\sourceon Mathematica
{2704., {x -> 4.}}
\sourceoff
was bedeutet, dass für alle x zwischen 3 und 4 der Ausdruck (function[x, 1, 2] - 70)^2 genau dann den kleinsten Wert 2704 hat, wenn x=4 ist. Das sollte doch soweit richtig sein.
Das einzige, was man daran bemängeln könnte, ist, warum er den exakten Wert x=4 noch zulässt, obwohl die Bedingung ja x < 4 war. Eventuell ist das ein Rundungsfehler der numerischen Funktion NMinimize.
Aber eine Fehlermeldung erhalte ich da jedenfalls nicht. Wahrscheinlich ist in Deinem Code doch irgendetwas anders bzw. fehlerhaft, was in diesem Minimalbeispiel so nicht auftritt - vielleicht irgendwelche Variablen ungewollt mit Werten belegt anstatt dass diese Variablen weiterhin Symbole sind?
LG Primentus
|
Profil
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Beitrag No.3, vom Themenstarter, eingetragen 2019-08-21
|
Lieber Primentus,
ja, das geht bei mir auch. Tut mir Leid, dass ich es missverständlich geschrieben habe, als f geht, function nicht, an f habe ich versucht darzustellen,
ja, das muss es auch sein. Ich verstehe nur nicht, muss ich denn die Variablen in einer Funktion am Ende clearen oder ähnliches? Hatte ich auch schon versucht.
Kurz gesagt, den einzigen Fehler, den ich irgendwie sehe, ist, dass die Variable x nicht besetzt wird von NMinize
Siehe:
https://www.matheplanet.com/matheplanet/nuke/html/uploads/b/23790_danke_im_Voraus.png
|
Profil
|
Primentus
Senior  Dabei seit: 18.02.2016 Mitteilungen: 2180
Wohnort: Deutschland
 | Beitrag No.4, eingetragen 2019-08-21
|
Hallo dilch,
naja, die Fehlermeldung weist darauf hin, dass Du irgendwo die Mathematica-Funktion RandomChoice verwendet hast, wahrscheinlich mit einer falschen Notation.
Der Aufruf sollte ungefähr eine Gestalt haben wie
\sourceon Mathematica
RandomChoice[{0.2, 0.5, 0.3} -> {3, 6, 9}]
\sourceoff
Also in der ersten Liste Werte zwischen 0 und 1 und in der zweiten Liste beliebige Zufallswertkandidaten. Diese beiden Listen müssen auch gleich viele Elemente enthalten. Die Elemente der ersten Liste müssen zudem positive Wahrscheinlichkeitswerte sein. Die Fehlermeldung weist darauf hin, dass eins von beidem nicht der Fall ist.
LG Primentus
|
Profil
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Beitrag No.5, vom Themenstarter, eingetragen 2019-08-21
|
Das liegt daran, dass in der rechten Liste der Wert x nicht eingesetzt+ausgerechnet wird. Das sollte aber doch vom NMinimize geschehen, denn daher kommt das x
\sourceon mathematica
NMinimize[
{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}]
\sourceoff
Dazu kommt noch dieses Times[<<2>>], auch hier steht im Code ein x*einer Zahl
Liebe Grüße und danke für die bisherige Hilfe
|
Profil
|
Primentus
Senior  Dabei seit: 18.02.2016 Mitteilungen: 2180
Wohnort: Deutschland
 | Beitrag No.6, eingetragen 2019-08-21
|
Hallo dilch,
ach so ja, jetzt verstehe ich, woran es hakt.
NMinimze liefert ja eine Liste als Ergebnis zurück.
Listenelement 1 ist das Minimum und Listenelement 2 ist ein x, das auf den Wert für x verweist.
Um den genauen Wert für x weiterzuverwenden, musst Du folgenden Ausdruck angeben:
\sourceon Mathematica
x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]
\sourceoff
Sprich dem x wird mit Hilfe des zweiten Listenelementes des NMinimze-Ergebnisses durch Regelanwendung von x -> 4 der Wert 4 zugewiesen (aber dies ohne dass x den Symbolstatus verliert - es ist also keine "harte" Zuweisung, wenn man so will, sondern nur eine temporäre Belegung mit dem Wert).
So sollte es dann klappen. Den Audruck musst Du überall verwenden, wo Du das x benötigst.
LG Primentus
|
Profil
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Beitrag No.7, vom Themenstarter, eingetragen 2019-08-22
|
Lieber Primentus,
vielen vielen Dank.
Ich stelle mich gerade doof an beim Umsetzen.
Verstehe ich richtig
\sourceon mate
function[x_,y_,z_]:=(...)
x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]
\sourceoff
Das klappt nämlich bei mir gerade nicht, aber ich verstehe auch den Satz nicht
"So sollte es dann klappen. Den Audruck musst Du überall verwenden, wo Du das x benötigst."
Danke :)
|
Profil
|
Primentus
Senior  Dabei seit: 18.02.2016 Mitteilungen: 2180
Wohnort: Deutschland
 | Beitrag No.8, eingetragen 2019-08-22
|
Hallo dilch,
naja, Du möchtest offensichtlich in der ersten Liste, die Du der Funktion RandomChoice übergibst (was die Wahrscheinlichkeitswerte sind) den Wert x einsetzen. Dort musst Du dann anstelle von x sozusagen den Ausdruck
\sourceon Mathematica
(x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]])
\sourceoff
verwenden (aber setze wie hier gezeigt vorsichtshalber noch runde Klammern außenrum, damit der Ausdruck auch wirklich beisammen bleibt).
Also zum Beispiel müsstest Du anstelle von
E^(-0.00476071*x)
folgendes schreiben:
\sourceon Mathematica
E^(-0.00476071*(x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]))
\sourceoff
Und dieses Einsetzen für x musst Du eben an allen Stellen machen, wo anstelle von x die Lösung von NMinimize verwendet werden soll. Der Ausdruck
(x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]])
liefert sozusagen den Wert 4.
Wobei ich jetzt aber nicht weiß, ob Du überall den gleichen Wert x benötigst, oder ob Du verschiedene NMinimize-Aufrufe mit unterschiedlichen Ergebnissen hast - aber die Vorgehensweise bleibt ja die gleiche.
LG Primentus
|
Profil
|
dilch
Ehemals Aktiv  Dabei seit: 25.09.2008 Mitteilungen: 205
 | Beitrag No.9, vom Themenstarter, eingetragen 2019-11-04
|
Profil
|
dilch hat die Antworten auf ihre/seine Frage gesehen. dilch hat selbst das Ok-Häkchen gesetzt. |
|
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2023 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen. Lesen Sie die
Nutzungsbedingungen,
die Distanzierung,
die Datenschutzerklärung und das Impressum.
[Seitenanfang]
|