|
|
Einfache Gleichung iterieren |
|
Schmankerl |

Forum-Fortgeschrittener
|
 |
Beiträge: 77
|
 |
|
 |
Anmeldedatum: 05.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.02.2013, 15:01
Titel: Einfache Gleichung iterieren
|
 |
Hallo,
ich möchte eine Gleichung in Matlab iterieren und denke, dass dazu die Fixpunktiteration ausreichend ist.
Dazu habe ich die ganze Gleichung nach der gesuchten Größe "p19" umgestellt, wobei links weiterhin Terme mit p19 stehen bleiben: p19=p19(p19,k,R,t0,....) .
Dazu habe ich mir nun einen kleinen Code geschrieben welches mir für bestimmte Bedingungen (Machzahl Ma19 >1) diese Iteration ausführen soll:
Ich weiß nicht recht wieso ich nun für p19 immer p0=30000 erhalte, normalerweise müsste es mir doch p19 iterieren, sodass ich für p19 unterschiedliche Werte, je nach Ers(L) erhalte?
Hat jemand eine Idee?
|
|
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 13.02.2013, 03:31
Titel:
|
 |
|
|
Schmankerl |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 77
|
 |
|
 |
Anmeldedatum: 05.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.02.2013, 17:48
Titel:
|
 |
Aha!
Wie müsste ich das dann machen?
Habe dann
gemacht.
Ist das logisch korrekt?
2) Nun erhalte ich die Fehlermeldung:
Zitat: |
Error using *
Inner matrix dimensions must agree.
Error in Untitled (line 30)
p19(L)=((((c0-(p19alt(L)-p0)*(R*t0*(p19alt(L)./p0).^(R/cp))./... |
Meiner Meinung nach sind die Matrizen doch gleich groß die ich nutze?
Danke für die späte Hilfe, brauche es nämlich immer noch!
|
|
|
Schmankerl |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 77
|
 |
|
 |
Anmeldedatum: 05.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 13.02.2013, 18:16
Titel:
|
 |
Ok ich habe meinen Fehler gefunden, mein Code lautet nun:
Weiß jemand wieso der Computer solange rechnet?
Ich glaube irgendwas stimmt an der Logik meines Codes noch nicht, hat mir jemand vielleicht einen Tipp?
Ich denke es ist klar was ich machen möchte oder?
Ich glaube es hapert mit der logischen Indizierung?
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 13.02.2013, 20:42
Titel:
|
 |
|
 |
|
Hi,
Ein paar Anregungen:
Dein L ist erst eine 3x3 Matrix, wird dann aber in der while-Schleife zu einem logischen Vektor. Ist das Absicht?
L ist zunächst abhängig von der Machzahl Ma19>1 und in der Schleife dann abh. von p19. Ist das gewollt? (Ich kenn mich mit Iterationen nicht so sehr aus.)
Ich hab die Berechnung jetzt nach 3166662 Schleifendurchläufen abgebrochen. L ist nach dem ersten Schleifendurchlauf ein 4x1 logical und jetzt eine logische 1. Vielleicht wird das iwann 0 und die while-Schleife wird verlassen. Dann musst du entscheiden, ob die Iteration so viele Schritte durchlaufen sollte. Wenn es nie 0 wird, stimmt definitiv etwas nicht.
Das Abbruchkriterium scheint mir nicht "sauber" gewählt zu sein.
2 Vorschläge:
1. Debugge den Code und schau, ob auch wirklich das geschieht, was du dir vorstellst.
2. Poste mal, was die Abbruchbedingung sein soll. In Worten, Pseudocode, ... Zum einen können wir es dann besser nachvollziehen und zum anderen kann es dir helfen, dein Kriterium noch mal zu überdenken.
Grüße,
Seban
_________________
Richtig fragen
Debugging
|
|
|
Schmankerl |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 77
|
 |
|
 |
Anmeldedatum: 05.12.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.02.2013, 17:30
Titel:
|
 |
|
 |
|
Zitat: |
Dein L ist erst eine 3x3 Matrix, wird dann aber in der while-Schleife zu einem logischen Vektor. Ist das Absicht?
|
Ist L nicht bereits am anfang eine logische Matrix, das ist zumindest die Absicht.
Innerhalb der While Schleife soll die logische Matrix Struktur aufrecht erhalten bleiben.
Die Iteration sollte folgendermaßen gehen:
Ich habe eine Matrix Ma19, eine Ers, und eine p19 , die alle gleich groß sind.
An denjenigen Stellen, an denen Ma19 > 1 ist, soll das entsprechende p19 (an der gleichen Stelle in der Matrix wo Ma19>1 ist) neu berechnet werden.
Für diejenigen p19, für die Ma19> 1 , muss iteriert werden.
While Schleife:
Diese wird solange durchlaufen, bis in der Matrix L, die hier nun aus einem Abbruchkriterium gebildet wird, keine 1er mehr auftauchen.
Das Abbruchkriterium lautet:
Wenn die Differenz zwischen altem und neuem p19 größer als ein gewisses Epsiolon ist, DANN soll p19 ( das neue ) wieder verwendet werden und nochmals in die Fixpunktgleichung eingesetzt werden. Dann erhält man wieder ein p19 welches mit dem alten p19 verglichen wird, wenn auch hier die Differenz wieder zu groß ist, wird das nochmal gemacht....
L ist dann quasi eine logische Matrix, die an jeder Stelle, wo das p19alt - p19(aktuell) > eps ist, eine 1 hat, somit weiß die Schleife, dass noch 1er drin sind und nochmal iterriert werden muss.
Ist das verständlich?
Bitte um verspätete Hilfe
|
|
|
Seban |

Forum-Meister
|
 |
Beiträge: 600
|
 |
|
 |
Anmeldedatum: 19.01.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ab R2014b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 20:04
Titel:
|
 |
|
 |
|
Hallo,
Ja, jetzt ist es verständlicher
Schmankerl hat Folgendes geschrieben: |
Zitat: |
Dein L ist erst eine 3x3 Matrix, wird dann aber in der while-Schleife zu einem logischen Vektor. Ist das Absicht?
|
Ist L nicht bereits am anfang eine logische Matrix, das ist zumindest die Absicht.
Innerhalb der While Schleife soll die logische Matrix Struktur aufrecht erhalten bleiben. |
Doch, da habe ich mich unglücklich ausgedrückt, es ist erst ein logisches 3x3 und wird dann in der while-Schleife zu einem log 4x1 usw.
Wenn du in der 3. Zeile in der while-Schleife
durch
ersetzt, erhältst du immer ein 3x3 log. Ersteres gibt ja nur die Werte zurück, für die die Bedingung erfüllt ist (also in einer logischen Matrix nur die 1er).
Zitat: |
Das Abbruchkriterium lautet:
Wenn die Differenz zwischen altem und neuem p19 größer als ein gewisses Epsiolon ist, DANN soll p19 ( das neue ) wieder verwendet werden und nochmals in die Fixpunktgleichung eingesetzt werden. Dann erhält man wieder ein p19 welches mit dem alten p19 verglichen wird, wenn auch hier die Differenz wieder zu groß ist, wird das nochmal gemacht....
L ist dann quasi eine logische Matrix, die an jeder Stelle, wo das p19alt - p19(aktuell) > eps ist, eine 1 hat, somit weiß die Schleife, dass noch 1er drin sind und nochmal iterriert werden muss. |
Ich habe jetzt die while -Schleife ~1,8 Mio durchlaufen, L(2, 3) wird nicht 0.
L(1, 2), L(1, 3), L(3, 3) sind jetzt NaN.
Ich hab das
mal in die Schleife eingefügt (vorher noch i=0 setzen) und dann in einem anderen m-file
ausgeführt und D32 dann mal geplottet.
zB bei 3.7332*10^5 gibt es eine Erhöhung, die bei 1.7786*10^6 ist ja direkt ersichtlich (für i~1.8Mio). Wenn du die figure entsprechend skalierst, siehst du, dass es immer mal solche Ausreißer gibt. Schau dir das am besten mal an und überlege, ob du deine Bedingung anpassen kannst.
Grüße
|
|
|
|
|
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 - 2025
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.
|
|