WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Extremstellen von Kurvenscharen R^2->R (Hilfe gesucht)

 

Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 16:47     Titel: Extremstellen von Kurvenscharen R^2->R (Hilfe gesucht)
  Antworten mit Zitat      
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:

Code:
function [z]=f1(v,a)
x=v(1)
y=v(2)
z=x.3-y.^3-a.*x.*y
end

a=3
fminsearch(@f1 , [0 0])
 

bzw.
Code:
fminsearch(@(v) f1(v,a), [0 0])
 

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 Smile

[EDITED, Jan, Biotte Code-Umgebung verwenden - Danke!]


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 17:11     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 17:54     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 18:11     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 18:21     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 19:08     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wie änder ich denn die Startwerte?

Was ist denn das zweite Eingabeargument von fminsearch?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 19:46     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 20:22     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 20:46     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 20:54     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 21:40     Titel:
  Antworten mit Zitat      
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 Very Happy

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

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.07.2015, 22:00     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Kemba

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.07.2015, 22:04     Titel:
  Antworten mit Zitat      
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:
Code:

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
Code:

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])
 

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: ---
     Beitrag Verfasst am: 12.07.2015, 22:23     Titel:
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 13.07.2015, 09:28     Titel:
  Antworten mit Zitat      
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?
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.