|
|
|
Leistungsintensive Integration optimieren (Rechenzeit) |
|
| Phil254 |

Forum-Anfänger
|
 |
Beiträge: 35
|
 |
|
 |
Anmeldedatum: 31.01.13
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2012b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 21:22
Titel: Leistungsintensive Integration optimieren (Rechenzeit)
|
 |
| |
 |
|
Hallo an alle Matlab Freunde!
edit: für übereifrige Helfer, die nicht alles durchlesen wollen: es geht eigentlich nur um das Integral in dem Code, ob und wie man das in Hinsicht auf die Rechenzeit optimieren könnte. Ich denke da hauptsächlich an andere Integralbefehle wie quad,. etc. was es noch gibt.
Ich bin Matlab Neuling und habe eine ziemlich komplexe (reelle ) Rechnung mit Doppelintegral am Ende.
Es funktioniert zwar und ist auch OK so, aber ich frage mich ob man die Rechenzeit etwas herabsetzen kann durch intelligentes Programmieren.
Zumal es ja scheinbar ziemlich viele Varianten für das Integrieren in Matlab gibt, und ich einfach nur das 'integral' genommen habe.
Hier mal mein Code:
Kurz als Erklärung:
Ich habe die Eingabeparameter am Anfang, erstelle daraus eine Matrix S und eine Transformationsmatrix T.
Zusammen mit R bilde ich aus den dreien eine neue Matrix.
Die späteren Integrationsvariablen stecken in dem Winkel PHI in der Transformationsmatrix T drin. Die ganze Rechnung passiert symbolisch.
Anschließend muss ich ein Doppelintegral dieser Matrix bilden.
Eine symbolische Integration mit 'int' ist zwar naheliegend, da ich mit bisher syms Variablen gerechnet habe, allerdings viel zu rechenintensiv, also muss ich das ganze numerisch Integrieren. Das einzige mit dem ich da bisher klargekommen bin ist der normale 'integral' / 'integral2' befehl.
Da es im Gegensatz zum Einfachintegral ( => 'arrayvalued',true) bei dem Doppelintegral nicht funktioniert die gesamte Matrix zu integrieren ('arrayvalued' gibt es nicht), mache ich das mit einer Schleife und integriere die einzelnen Einträge.
Da die Einträge noch die syms Variablen x und z enthalten muss ich das ganze mit matlabFunction() umwandeln.
Da hierbei Fehler auftreten sobald ein Eintrag ohne x oder z auftritt, also eine Konstante, habe ich einfach die Fehlerabfrage eingebaut (ich habe keine andere Möglichkeit gefunden die Einträge ohne x oder z zu identifizieren und es war so am einfachsten. Umwege über string comp oder sonstiges sind denke ich fast aufwändiger. ? aber gerne auch hier tipps )
Sodalla.
Ich hoffe sehr mir kann jemand helfen.
Diese Rechnung wird nämlich weiterhin mit unterschiedlichen AL Werten gerechnet um einen Plot zu erstellen. Und es dauert bereits für 10 Werte relativ lange..
Vielen Dank für jede Hilfe und jede Antwort!!
Gruß,
Philipp.
|
|
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 22:06
Titel:
|
 |
Hallo,
"relativ lange" ist relativ. Heute hat jemand hier von einem Beispiel geschrieben, bei dem er mit einer Rechenzeit von 4 Tagen rechnet.
Ich habe dein Programm mal im Profiler durchlaufen lassen. Die meiste Zeit wird gar nicht mit den Integralen, sondern mit symbolischen Berechnungen (insbesondere simplify) verbracht.
Bei R/T werden lineare Gleichungssysteme gelöst, ist das beabsichtigt?
Und wenn dich am Ende ohnehin nur Integrale interessieren, die du numerisch berechnest, warum machst du dann nicht gleich alles numerisch? Multiplizieren von Matrizen und Lösen von Gleichungssystemen geht da ja blitzschnell.
Grüße,
Harald
|
|
|
|
| Phil254 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 35
|
 |
|
 |
Anmeldedatum: 31.01.13
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2012b
|
 |
|
|
 |
|
Verfasst am: 19.02.2013, 23:33
Titel:
|
 |
| |
 |
|
Hallo Harald, danke für deine Antwort!
Ja, das mit dem 'relativ lange' ist natürlich richtig, allerdings sollte es für meine Anwendung möglichst schnell gehen und nicht 4 stunden dauern
Wie meinst du das mit den linearen Gleichungssystemen?
Also grundsätzlich ist R/T die Multiplikation von R mit der Inversen von T, aber wenn ich das mit inv(T) in den Code schreibe, dann sagt Matlab mir mit /T wäre es besser. Ja und den Term R*T/R könnte man auch gleich zusammenziehen, das ist natürlich richtig, das ist eine rein formale Sache und ich war bisher zu faul das zu vereinfachen
Hm ok, ich habe mich natürlich freudig auf die Symbolic Toolbox gestürzt, weil es für mich als Neuling am einfachsten war.
Ich weiss ehrlichgesagt garnicht wie ich die Matrizenrechnung numerisch umsetze, aber das ist natürlich ein guter Hinweis, ich werde mich mal damit beschäftigen, danke!
Trotzdem nochmal die Frage: Lässt sich die Integration irgendwie optimieren oder ist das schon OK so ?
Vielen Dank nochmal für deine Hilfe Harald!
Gruß,
Philipp.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 08:29
Titel:
|
 |
Hallo,
ohne symbolische Matrizen wird das nicht wirklich komplizierter.
Ich würde die Berechnung von S_trans in eine eigene Funktion auslagern:
und darauf beim Aufruf von integral2 verweisen.
Das Integrieren dauerte in dem Fall bei mir nur ca. 1s von insgesamt 20s, ist also quasi vernachlässigbar und auch gut so, sofern sich die Integrale jetzt nicht beispielsweise auf einfache Weise aus einander berechnen lassen. Dann könnte man das ganze auch noch vereinfachen.
Grüße,
Harald
|
|
|
|
| Phil254 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 35
|
 |
|
 |
Anmeldedatum: 31.01.13
|
 |
|
 |
Wohnort: München
|
 |
|
 |
Version: 2012b
|
 |
|
|
 |
|
Verfasst am: 20.02.2013, 20:08
Titel:
|
 |
Hallo Harald,
nur nochmal danke für deine Hilfe! Denke es ist vorerst alles beantwortet.
Gruß,
Phil.
|
|
|
|
|
|
|
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.
|
|