|
|
Bräuchten Hilfe beim Programmieren von impliziten Funktione |
|
Erdnuckel |
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.06.2010, 11:23
Titel: Bräuchten Hilfe beim Programmieren von impliziten Funktione
|
|
|
|
|
Hey Leute!
Wir haben in der Uni die Aufgabe ein mathematisches Problem in Matlab zu programmieren. Es handelt sich dabei um eine Aufgabe zum Thema Implizite Funktionen.
Unser Prof gab uns aber weder eine Vorlesung zum Thema implizite Funktionen noch zu Matlab. Im Endeffekt stehen wir ziemlich bei Null. Das einzige was wir mittlerweile mit unserem Prof zusammen erarbeitet haben, ist folgendes Programm, in dem die Kreisgleichung mit Hilfe von Matlab beschrieben werden soll. Leider verstehen wir aber noch nicht ganz was er mit diesem Programm machen will. Hat Jemand eine Ahnung was dieses Programm Schritt für Schritt macht und was man im Endeffekt am Schluss ausgeben will?
Außerdem hat unser Prof gemeint, dass in diesem Programm noch ein Fehler ist und die Werte noch nicht genau genug ausgegeben werden. Wie könnte man das lösen, dass die Werte genauer werden? Wir sind ziemlich verzweifelt, da wir deswegen mittlerweile ziemlich im Stress sind und bald Abgabe ist.
Wäre echt cool wenn uns jemand helfen könnte.
Vielen Dank schon mal im Vorraus!
Tom
|
|
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 15.06.2010, 13:20
Titel:
|
|
Hallo,
das Programm berechnet für verschiedene x die y, welche die Gleichung:
x^2 + y^2 - 1 = 0
erfüllen. Dazu wird das Newton Verfahren angewandt.
Der Fehler liegt in dieser Zeile:
findet ihr bestimmt, wenn ihr euch das Verfahren mal genauer anseht.
Die Genauigkeit kann verbessert werden indem ihr genau auf einen kleineren Wert setzt.
viele Grüße
Thomas
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2010, 13:20
Titel:
|
|
Hallo,
Erstmal vielen Dank für deine schnelle Antwort!
Wir verstehen jetzt schon ein bisschen mehr...
Folgendes ist uns jedoch noch unklar:
Wir haben nun "genau" auf verschiedene deutlich kleinere Werte gesetzt, jedoch ändert sich beim geplotteten Graphen rein gar nichts. Woran liegt das bzw. was sollte sich denn eigentlich ändern?
Der Graph sieht wie die obere Hälfte eines ovalen Eies aus. Ist diese Tatsache der Fehler in unserem Programm?
Außerdem haben wir uns auch das Newton Verfahren nochmal genauer angesehen, kommen aber nicht auf den Fehler in der von dir zitierten Zeile. Das Newton Verfahren besagt doch folgendes:
y,n+1 = y,n - f(y(n))/f'(y(n))
und genau das haben wir doch in dieser Zeile oder?
Wir wären dir sehr dankbar, wenn du uns nochmal weiter helfen könntest!
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2010, 13:48
Titel:
|
|
Zitat: |
Wir haben nun "genau" auf verschiedene deutlich kleinere Werte gesetzt, jedoch ändert sich beim geplotteten Graphen rein gar nichts. Woran liegt das bzw. was sollte sich denn eigentlich ändern?
|
Ich glaub man muss schon etwas zoomen um die Unterschiede zu erkennen. Ihr könnt ja mal mit der analytischen Lösung vergleichen (y = sqrt(1-x^2) ).
Zitat: |
y,n+1 = y,n - f(y(n))/f'(y(n))
und genau das haben wir doch in dieser Zeile oder?
|
Fast. Wie lautet denn f'(y(n))?
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2010, 08:50
Titel:
|
|
f'(y(n)) = 2y und da y = 1 ist, bleibt doch nur noch die 2 stehen, durch die ich die f(y(n)) teile oder?
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2010, 13:07
Titel:
|
|
y ist doch nicht 1 sondern die gesuchte Lösung der Gleichung:
f(y) = 0 mit f(psi) := x^2 + psi^2 -1
Mit Hilfe des Newton-Verfahrens kann man eine Folge definieren, die gegen die gesucht Lösung konvergiert.
y,n+1 = y,n - f(y,n)/f'(y,n)
Wie lautet jetzt f(y,n) und wie f'(y,n) ?
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.06.2010, 14:15
Titel:
|
|
ganz doofe frage, aber was bedeutet denn das "psi"?
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 24.06.2010, 06:02
Titel:
|
|
psi ist das argument der funktion: Exakt muss es heißen:
f: R -> R , f(psi) := x^2 + psi^2 - 1
Ich hab nur psi verwendet, damit man es nicht mit der gesuchten Lösung verwechselt.
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.06.2010, 13:28
Titel:
|
|
Okay, dann ist f'(y,n) in diesem Fall quasi f'(psi,n) wenn ich das richtig verstanden habe oder? Und das wäre dann ja wie ich oben schon geschrieben habe 2y bzw. 2psi oder?
Und mit f(psi) := x^2 + psi^2 - 1 hätte ich dann folgendes Newtonverfahren:
y,psi+1 = y,psi - (x^2 + psi^2 - 1)/(2psi)
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 25.06.2010, 14:24
Titel:
|
|
Ist ja alles richtig gerechnet, aber du wirfst immer die Notation durcheinander. Daher weiss ich nicht ob du's nicht richtig verstanden hast oder ob das nur Schreibfehler sind.
Also noch mal zusammengefasst:
Du willst folgendes Gleichungssystem lösen:
x^2 + y^2 -1 = 0
Die Lösung ist die Nullstelle der funktion f: R-> R, f(psi) = x^2 + psi^2 - 1.
Jetzt wendest du das Newton Verfahren an um diese Nullstelle zu bestimmen.
Das Newton Verfahren besagt: die Folge
y_{n+1} = y_{n} - f(y_{n})/f'(y-{n})
konvergiert gegen die Nullstelle.
Das heisst du denkst dir ein y_0 aus und berechnest ein y_1, und damit ein y_2 usw.
Jetzt setzen wir mal richtig ein:
f(y_{n}) = x^2 + y_{n}^2 - 1
f'(y_{n}) = 2*y_{n}
Damit folgt:
y_{n+1} = y_{n} - (x^2 + y_{n}^2 - 1)/(2*y_{n})
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 26.06.2010, 17:42
Titel:
|
|
Okay, damit folgt für den Code in besagter Zeile, dass bei dem x(k) das (k) weg muss?
Und bei dem y0 bin ich mir auch nicht sicher ob das so richtig ist, oder ob es y(k) heißen muss:
Ich hoffe ich lieg nicht komplett daneben...
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.06.2010, 05:37
Titel:
|
|
Zitat: |
Und bei dem y0 bin ich mir auch nicht sicher ob das so richtig ist, oder ob es y(k) heißen muss:
|
den Fehler meinte ich.
mit Hilfe der letzten Gleichung kannst du zu jedem x denn y-Wert iterativ berechnen (while Schleife) . Falls du das für mehrere verschiedene x-Werte machen willst, musst du diese natürlich verändern. Dafür ist die for-Schleife da.
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.06.2010, 11:51
Titel:
|
|
Alles klar, vielen Dank, du hast uns bisher wirklich super geholfen!!!
Nun müssen wir noch ne weitere (kompliziertere) implizite Funktion unserer Wahl programmieren. Unsere Frage: Wir können die doch mit genau dem selben Code programmieren, das einzige was wir ändern müssen is doch wieder folgende Zeile, indem wir die neue Fuktion und die neue abgeleitete Funktion einsetzen.
Und zusätzlich noch andere Werte für x0 und y0 vorgeben.
Sehen wir das richtig?
|
|
|
Thomas84 |
Forum-Meister
|
|
Beiträge: 546
|
|
|
|
Anmeldedatum: 10.02.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 28.06.2010, 20:38
Titel:
|
|
ja, stimmt so. wobei x0 in dem programm nie benutzt wird.
|
|
|
Erdnuckel |
Themenstarter
Forum-Newbie
|
|
Beiträge: 8
|
|
|
|
Anmeldedatum: 15.06.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 29.06.2010, 13:41
Titel:
|
|
Also wir wollen jetzt folgendes Gleichungssystem mit unserem Code lösen:
x(1+y²)-e^(2x-6y)+1 = 0
( Nur 2x-6y ist der Exponent)
Wir haben es mit folgendem Code versucht:
Leider bringt er folgende Fehlermeldung:
??? y_neu = y(k) [1/(2*y(k)*x.-exp(2*x.-6*y(k))*(-6)]*[x.*(1+y(k)^2)-exp(2*x.-6*y(k))+1];
|
Error: The input character is not valid in MATLAB statements or expressions.
Wo liegt diesmal unser Fehler und wie müssen wir unser y0 wählen?
Über diese letzte Hilfe wären wir äußerst dankbar, da bald Abgabe ist...
|
|
|
|
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.
|
|