|
|
Extremstellen von Kurvenscharen R^2->R (Hilfe gesucht) |
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 16:47
Titel: Extremstellen von Kurvenscharen R^2->R (Hilfe gesucht)
|
|
|
|
|
Ich versuche im Moment die Extremstellen von der Funktion f_a(x,y)= x^3-y^3-a*x*y zu bestimmen.
Mein Wissen über die Programmierung mit MATLAB ist leider nicht sonderlich groß, da wir uns in der Uni nur 5x90 Minuten damit beschäftigt haben.
Das Problem muss leider numerisch und wenn möglich ohne Toolboxen gelöst werden :/
Zur Lösung darf a auch gerne ein Wert zugeordnet werden, meine Funktion muss allerdings trotzdem a als Inputparameter haben.
Ich hatte nun zuletzt folgendes probiert:
bzw.
Was beides natürlich nicht funktioniert.
Ich verstehe allerdings auch den Umgang mit @ noch nicht so richtig und hatte deswegen auch nur verschiedene Sachen aus dem Internet für mein Problem adaptiert.
Ich hatte es vorher auch schonmal über gradient versuch und dann die Stelle gesucht, an der der Gradient 0 ist, aber das geht dann natürlich nur für alle a mit 3|a. Allerdings hat das mit dem finden sowieso nicht so ganz geklappt :/
Daher möchte ich mich nun gerne an euch wenden. Vllt kennt hier ja jmd die Lösung
[EDITED, Jan, Biotte Code-Umgebung verwenden - Danke!]
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 17:11
Titel:
|
|
Hallo,
Zitat: |
Was beides natürlich nicht funktioniert. |
Was bedeutet "es funktioniert nicht"? Bekommst du eine Fehlermeldung? Welche? Ein unerwartetes Verhalten? Inwiefern?
Zunächst bitte erstmal den Tippfehler in der Funktion beheben. Das wird ja im Editor sogar entsprechend rot angezeigt.
Wenn du dann a=3 und den unteren fminsearch-Befehl ausführst, läuft der Code ja durch. Er findet nur kein lokales Minimum, d.h. du musst andere Startwerte wählen.
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 17:54
Titel:
|
|
|
|
|
Harald hat Folgendes geschrieben: |
Hallo,
Zitat: |
Was beides natürlich nicht funktioniert. |
Was bedeutet "es funktioniert nicht"? Bekommst du eine Fehlermeldung? Welche? Ein unerwartetes Verhalten? Inwiefern?
Zunächst bitte erstmal den Tippfehler in der Funktion beheben. Das wird ja im Editor sogar entsprechend rot angezeigt.
Wenn du dann a=3 und den unteren fminsearch-Befehl ausführst, läuft der Code ja durch. Er findet nur kein lokales Minimum, d.h. du musst andere Startwerte wählen.
Grüße,
Harald |
Der Tippfehler hat sich nur hier beim Abtippen eingeschlichen
So einmal hier die erste Fehlermeldung
>> fminsearch(@(v) fu1(v,a), [0 0])
Error using fu1
Too many input arguments.
Error in @(v)fu1(v,a)
Error in fminsearch (line 190)
fv(:,1) = funfcn(x,varargin{:});
In der anderen Variante erhalte ich nun sogar eine Lösung. Allerdings eine sehr merkwürdige, die aber vmtl für die mögliche Lösung (0,0) steht
Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: -4093246706746275800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
ans =
1.0e+41 *
0.8796 1.6838
Leider hilft mir das nur nich so weiter, da ich zum einen eher den a/3 Wert benötige, um später weiter arbeiten zu können und zum anderen ist der Wert zum weiterrechnen ja auch nicht soooo geeignet
Aber es scheint, als ob die Variante die Lösung darstellt. Wie kann ich mir denn die anderen Lösungen anzeigen lassen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 18:11
Titel:
|
|
Hallo,
wie gesagt:
Zitat: |
du musst andere Startwerte wählen. |
Ich würde ja die Symbolic Math Toolbox vorschlagen. Da kannst du den Gradienten 0 setzen.
Der Sinn solcher Aufgaben erschließt sich mir immer nicht recht.
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 18:21
Titel:
|
|
Harald hat Folgendes geschrieben: |
Hallo,
wie gesagt:
Zitat: |
du musst andere Startwerte wählen. |
Ich würde ja die Symbolic Math Toolbox vorschlagen. Da kannst du den Gradienten 0 setzen.
Der Sinn solcher Aufgaben erschließt sich mir immer nicht recht.
Grüße,
Harald |
Mir auch nicht :/
Mein Dozent meint, wir sollen programmieren und nicht symbolisch rechnen...
Wie änder ich denn die Startwerte?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 19:08
Titel:
|
|
Hallo,
Zitat: |
Wie änder ich denn die Startwerte? |
Was ist denn das zweite Eingabeargument von fminsearch?
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 19:46
Titel:
|
|
Harald hat Folgendes geschrieben: |
Hallo,
Zitat: |
Wie änder ich denn die Startwerte? |
Was ist denn das zweite Eingabeargument von fminsearch?
Grüße,
Harald |
Ich nehmemal an der Entwicklungspunkt.
Aber selbst wenn ich den auf [-1 1] (also die vermutete Lösung für a=3) setze, erhalte ich Ergebnisse nahe 0
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 20:22
Titel:
|
|
Hallo,
Zitat: |
Ich nehmemal an der Entwicklungspunkt. |
In der Dokumentation kannst du die Annahme leicht bestätigen lassen.
Zitat: |
Aber selbst wenn ich den auf [-1 1] (also die vermutete Lösung für a=3) setze, |
Soll diese vermutete Lösung denn ein Minimum sein (wie es fminsearch naheliegenderweise sucht) oder nicht doch eher ein Maximum?
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 20:46
Titel:
|
|
Harald hat Folgendes geschrieben: |
Hallo,
Zitat: |
Ich nehmemal an der Entwicklungspunkt. |
In der Dokumentation kannst du die Annahme leicht bestätigen lassen.
Zitat: |
Aber selbst wenn ich den auf [-1 1] (also die vermutete Lösung für a=3) setze, |
Soll diese vermutete Lösung denn ein Minimum sein (wie es fminsearch naheliegenderweise sucht) oder nicht doch eher ein Maximum?
Grüße,
Harald |
Meine Hesse Matrix wäre [-2a -a; -a -2a]
Die ist für a=3 positiv definit, also sollte es ein Minimum sein.
Wie würde man denn ein Maximum bestimmen?
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 20:54
Titel:
|
|
Hallo,
Zitat: |
Meine Hesse Matrix wäre [-2a -a; -a -2a]
Die ist für a=3 positiv definit, also sollte es ein Minimum sein. |
Bist du dir da sicher? Hast du denn mal die Eigenwerte der Hessematrix bestimmt? Die sind für eine positiv definite Matrix etwas negativ.
Zitat: |
Wie würde man denn ein Maximum bestimmen? |
Versuche doch bitte, dir deine Fragen erst durch Nachdenken zu beantworten. Wenn du dann nicht selbst darauf kommt, ist die Dokumentation oder Google das nächste Mittel der Wahl.
http://de.mathworks.com/help/optim/.....-functions.html#brhkghv-5
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 21:40
Titel:
|
|
|
|
|
Harald hat Folgendes geschrieben: |
Hallo,
Zitat: |
Meine Hesse Matrix wäre [-2a -a; -a -2a]
Die ist für a=3 positiv definit, also sollte es ein Minimum sein. |
Bist du dir da sicher? Hast du denn mal die Eigenwerte der Hessematrix bestimmt? Die sind für eine positiv definite Matrix etwas negativ.
Zitat: |
Wie würde man denn ein Maximum bestimmen? |
Versuche doch bitte, dir deine Fragen erst durch Nachdenken zu beantworten. Wenn du dann nicht selbst darauf kommt, ist die Dokumentation oder Google das nächste Mittel der Wahl.
http://de.mathworks.com/help/optim/.....-functions.html#brhkghv-5
Grüße,
Harald |
Da hast du Recht, das war wirklich eine sehr dumme Frage.
Allerdings schaff ich es gerade ja nicht mal vernünftig die Eigenwerte einer 2x2 Matrix zu bestimmen, also was will man erwarten
Vielen Dank für deine Hilfe und vor allem für deine Geduld
Mein Ziel wird es sein, am Ende die Ortskurve der Extremwerte zu zeichnen.
Das werde ich dann so versuchen:
Für verschiedene a Extremstellen in for-Schleife bestimmen und Ergebnisse festhalten
z-Werte der Extremstellen bestimmen (wieder in Forschleife)
Und zuletzt dann einen Fit für die Punkte erstellen, der dann ja meiner Ortskurve entsprechen sollte
Hat dieser Plan irgendeinen ganz blöden Fehler, den ich jetzt nur noch nicht sehe?
(Das alles wäre so einfach, wenn man es symbolisch machen dürfte :/ )
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 12.07.2015, 22:00
Titel:
|
|
Hallo,
Zitat: |
Allerdings schaff ich es gerade ja nicht mal vernünftig die Eigenwerte einer 2x2 Matrix zu bestimmen |
Bei mir ist es auch schon eine Weile her, dass ich das getan habe, aber dafür gibt's ja
eig
in MATLAB.
Zitat: |
Das werde ich dann so versuchen:
Für verschiedene a Extremstellen in for-Schleife bestimmen und Ergebnisse festhalten
z-Werte der Extremstellen bestimmen (wieder in Forschleife)
Und zuletzt dann einen Fit für die Punkte erstellen, der dann ja meiner Ortskurve entsprechen sollte |
Klingt soweit sinnvoll. Lediglich die separate for-Schleife für die z-Werte ist unnötig - du brauchst dir ja nur das zweite Rückgabeargument von fminsearch zu holen.
Grüße,
Harald
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 22:04
Titel:
|
|
|
|
|
Kemba hat Folgendes geschrieben: |
Mein Ziel wird es sein, am Ende die Ortskurve der Extremwerte zu zeichnen.
Das werde ich dann so versuchen:
Für verschiedene a Extremstellen in for-Schleife bestimmen und Ergebnisse festhalten
z-Werte der Extremstellen bestimmen (wieder in Forschleife)
Und zuletzt dann einen Fit für die Punkte erstellen, der dann ja meiner Ortskurve entsprechen sollte
Hat dieser Plan irgendeinen ganz blöden Fehler, den ich jetzt nur noch nicht sehe?
(Das alles wäre so einfach, wenn man es symbolisch machen dürfte :/ ) |
Da ist gleich schon das nächste Problem. Wenn ich [E1 E2 E3] = fminsearch(....) eintippe, dann erhalte ich sofort meinen Extrempunkt, wobei E1 der x-Wert, E2 der y-Wert und E3 der z-Wert ist.
Ich dachte nun für mehrere Lösungen kann ich das denn so machen:
aber irgendwie krieg ich dann von MATLAB immer eine Fehlermeldung
Die Fehlermeldung ist egtl sehr selbsterklärend, aber mir ist gerade nicht klar, wie ich das sonst machen könnte :/
[EDITED, Jan, Biotte Code-Umgebung verwenden - Danke!]
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 12.07.2015, 22:23
Titel:
|
|
|
|
|
Kemba hat Folgendes geschrieben: |
Kemba hat Folgendes geschrieben: |
Mein Ziel wird es sein, am Ende die Ortskurve der Extremwerte zu zeichnen.
Das werde ich dann so versuchen:
Für verschiedene a Extremstellen in for-Schleife bestimmen und Ergebnisse festhalten
z-Werte der Extremstellen bestimmen (wieder in Forschleife)
Und zuletzt dann einen Fit für die Punkte erstellen, der dann ja meiner Ortskurve entsprechen sollte
Hat dieser Plan irgendeinen ganz blöden Fehler, den ich jetzt nur noch nicht sehe?
(Das alles wäre so einfach, wenn man es symbolisch machen dürfte :/ ) |
Da ist gleich schon das nächste Problem. Wenn ich [E1 E2 E3] = fminsearch(....) eintippe, dann erhalte ich sofort meinen Extrempunkt, wobei E1 der x-Wert, E2 der y-Wert und E3 der z-Wert ist.
Ich dachte nun für mehrere Lösungen kann ich das denn so machen:
[quote=MATLAB]
for a=-10:10
b=a+11
if a<0
[Ex(b) Ey(b) Ez(b)]=fminsearch(@(v) f1(v,a), [-a/3 a/3])
else
[Ex(b) Ey(b) Ez(b)]=fminsearch(@(v) g1(v,a), [-a/3 a/3])
end
end
|
aber irgendwie krieg ich dann von MATLAB immer eine Fehlermeldung
[quote=MATLAB]
In an assignment A(I) = B, the number of elements in B and I must be the same.
Error in fortest (line 4)
[Ex(b) Ey(b) Ez(b)]=fminsearch(@(v) f1(v,a), [-a/3 a/3])
[/quote]
Die Fehlermeldung ist egtl sehr selbsterklärend, aber mir ist gerade nicht klar, wie ich das sonst machen könnte :/[/quote]
Ich hätte mir meinen [E1 E2 E3] Vektor vllt etwas genauer ansehen sollen
Hab dieses Problem nun Gelöst
Ergebnis wird als [E Ez] ausgegeben und danach setze ich Ex(b)=E(1) und Ey(b)=E(2)
|
|
|
Kemba |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.07.2015, 09:28
Titel:
|
|
|
|
|
Nachdem ich es nun gestern theoretisch geschafft habe meine Extrempunkte aus der For-Schleife festzuhalten, entsteht bei mir in der Praxis dadurch ein neues und sehr mysteriöses Problem. Hier noch einmal meine For-Schleife:
Zitat: |
for a=-10:10
b=a+11
if a<0
[E Ez]=fminsearch(@(v) f1(v,a), [-a/3 a/3])
else
[E Ez]=fminsearch(@(v) g1(v,a), [-a/3 a/3])
end
Ex(b)=E(1)
Ey(b)=E(2)
Ez(b)=Ez
end |
Wenn ich nun in meinem Workspace z.B. Ex öffne, dann erhalte ich in dieser Variablentabelle die richtigen Werte.
Wenn ich allerdings in MATLAB einfach Ex eintippe, erhalte ich folgende Ausgabe
Zitat: |
>>Ex
Ex =
1.0e+41 *
Columns 1 through 9
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
Columns 10 through 18
0.0000 5.1163 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000 -0.0000
Columns 19 through 21
-0.0000 -0.0000 -0.0000 |
Da die Werte egtl von 10/3 bis -10/3 in 1/3-Schritte laufen, ist das ein sehr seltsamer Unterschied.
Ich habe denn mal mit einem Plot überprüft, mit welcher Variante MATLAB weiter arbeitet, aber da ist es leider die falsche :/
Weiß jemand woran das liegen kann und was man dagegen tun kann?
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|