Die Mathe-Redaktion - 18.09.2019 09:56 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte / Top 15
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
Listenpunkt? im neuen Schwätz
ListenpunktWerde Mathe-Millionär!
ListenpunktAnmeldung MPCT Sept.
ListenpunktFormeleditor fedgeo
Schwarzes Brett
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden. Mitglieder können den Matheplanet-Newsletter bestellen, der etwa alle 2 Monate erscheint.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 659 Gäste und 17 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von Spock mire2
Mathematische Software & Apps » Mathematica » NMinimize/Numerical Nonlinear Global Optimization, Funktionsweise unklar für freie Variablen
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule NMinimize/Numerical Nonlinear Global Optimization, Funktionsweise unklar für freie Variablen
dilch
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 25.09.2008
Mitteilungen: 192
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2019-08-21 11:53


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.
mathematica
f[x_, a_, b_] := a*x^2 + b
NMinimize[
 {(f[x, a, 1] - 70)^2, 3<= x <= 4}, {{a, 0, 4}, x}]

Sie, also meine function, hat als Return eine ganze Zahl. Zum Beispiel
mathematica
function[3.2,1, 2]=70

Wenn ich nun einen der Parameter schätzen möchte für ein gewünschtes Ergebnis, versuche ich es mit
mathematica
NMinimize[
 {(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}]

Dann setzt er keine Zahlen ein. Zumindest kommt in der Fehlermeldung
mathematica
E^(-0.00476071 x)
da sollte eigentlich was ausgerechnet werden für ausgewertete x. Was mache ich denn da falsch im Aufbau?



  Profil  Quote  Link auf diesen Beitrag Link
dilch
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 25.09.2008
Mitteilungen: 192
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, vom Themenstarter, eingetragen 2019-08-21 16:46


Ich verstehe es nicht ganz, aber das ist die Antwort
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  Quote  Link auf diesen Beitrag Link
Primentus
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2016
Mitteilungen: 987
Aus: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2019-08-21 19:09


Hallo dilch,

also wenn ich
Mathematica
function[x_, a_, b_] := a*x^2 + b
NMinimize[(function[x, 1, 2] - 70)^2, 3 < x < 4, {x}]
eingebe, bringt Mathematica mir die Ausgabe
Mathematica
{2704., {x -> 4.}}
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  Quote  Link auf diesen Beitrag Link
dilch
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 25.09.2008
Mitteilungen: 192
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2019-08-21 20:01


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:



  Profil  Quote  Link auf diesen Beitrag Link
Primentus
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2016
Mitteilungen: 987
Aus: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2019-08-21 20:57


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
Mathematica
RandomChoice[{0.2, 0.5, 0.3} -> {3, 6, 9}]

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  Quote  Link auf diesen Beitrag Link
dilch
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 25.09.2008
Mitteilungen: 192
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2019-08-21 22:32


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
mathematica
NMinimize[
 {(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}]

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  Quote  Link auf diesen Beitrag Link
Primentus
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2016
Mitteilungen: 987
Aus: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2019-08-21 23:05


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:
Mathematica
x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]
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  Quote  Link auf diesen Beitrag Link
dilch
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 25.09.2008
Mitteilungen: 192
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.7, vom Themenstarter, eingetragen 2019-08-22 15:08


Lieber Primentus,
vielen vielen Dank.
Ich stelle mich gerade doof an beim Umsetzen.
Verstehe ich richtig
mate
function[x_,y_,z_]:=(...)
 
x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]
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  Quote  Link auf diesen Beitrag Link
Primentus
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 18.02.2016
Mitteilungen: 987
Aus: Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.8, eingetragen 2019-08-22 16:06


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
Mathematica
(x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]])

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:
Mathematica
E^(-0.00476071*(x /. NMinimize[{(function[x,1, 2] - 70)^2, 3 < x < 4}, {x, 3, 4}][[2]]))

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  Quote  Link auf diesen Beitrag Link
dilch hat die Antworten auf ihre/seine Frage gesehen.
dilch hatte hier bereits selbst das Ok-Häkchen gesetzt.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2019 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. 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]