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

Python zu Matlab übersetzen?

 

eniem
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.07.15
Wohnort: Graz, Österreich
Version: ---
     Beitrag Verfasst am: 02.07.2015, 13:20     Titel: Python zu Matlab übersetzen?
  Antworten mit Zitat      
Hallo Leute,

ich arbeite derzeit an einem Projekt, für das ich eine (steife) Differentialgleichung 4ter Ordnung lösen muss. Das funktioniert soweit ganz gut mit ode23s.
Das Problem ist nun, dass ich meinen derzeitigen Matlab-Code in eine Sprache (kaum bekannt, nennt sich 'CADINP') portieren muss, und darauf angewiesen bin, das Integrationsverfahren für die DGL selbst zu schreiben. Ich habe mich nun dazu entschieden, das Rosenbrock-Wanner Verfahren zu implementieren, welches auch ode23s nutzt.

Ich bin gestern Abend dann über einen Python-Code gestolpert, welcher offenbar eine Implementierung des Rosenbrock-Verfahrens darstellt (pdf-Dokument Seite 15ff; bzw. Seite 10ff).

Nun ist das Problem, dass ich mich überhaupt nicht in Python auskenne und bereits daran scheitere, die erste Funktion "row_2_step()" nach Matlab zu übertragen.
Konkret geht es um die Zeile

Code:
yi = atleast_2d(yi)


wobei - soviel weiß ich bisher - atleast_2d aus dem Python-Import numpy stammt. (In meinem Crossposting heißt es: "... atleast_2d take an array and expands its dimensions until it has at least 2 dimensions. So a 0D array becomes a 2D array, a 1D array (which MATLAB doesn't have) becomes a 2D array, a 2D array stays a 2D array, a 3D arrays stays a 3D array, a 4D array stays a 4D array, etc.")

Nur ... irgendwie komme ich damit nicht ganz zu recht. Ich würde mich freuen, wenn mir jemand weiterhelfen könnte.

Vielen lieben Dank,
eniem

P.S.: Bzw. - weiß jemand, ob es bereits fertige Implementierungen des Rosenbrock-Wanner Verfahrens für Matlab gibt?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.07.2015, 14:16     Titel: Re: Python zu Matlab übersetzen?
  Antworten mit Zitat      
Hallo eniem,

Was genau ist deine Frage?
Du suchst nach einer Matlab-Implementation des Rosenbrock-Verfahrens, aber erklärst, dass ode23 es bereits benutzt. Also kennst Du selbst eine Matlab-Implementierung, oder?
Zitat:
Nun ist das Problem, dass ich mich überhaupt nicht in Python auskenne und bereits daran scheitere, die erste Funktion "row_2_step()" nach Matlab zu übertragen.
Konkret geht es um die Zeile
Code:
yi = atleast_2d(yi)

In Matlab sind alle Arrays mindestens 2D. Selbst ein Skalar hat die Größe [1 x 1]. Diese Zeile kann man deshalb in Matlab einfach weglassen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
eniem
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.07.15
Wohnort: Graz, Österreich
Version: ---
     Beitrag Verfasst am: 02.07.2015, 14:51     Titel:
  Antworten mit Zitat      
Hallo Jan,

mh, das stimmt, ich kann mir den Quelltext von ode23s ansehen, ja, ... aber ich finde diesen etwas schwer nachzuvollziehen und hätte daher eine nachvollziehbare Implementierung des Rosenbrockverfahrens gesucht ... oder eine ausreichend kommentierte/dokumentierte ...
- und ansich fand ich diesen gefundenen Python-Code recht nachvollziehbar, allerdings mangelt es mir an Python-Kenntnissen, dass ich nicht so sicher bin, ob sich denn der Code "so einfach" übersetzen lässt :/

Zitat:
In Matlab sind alle Arrays mindestens 2D. Selbst ein Skalar hat die Größe [1 x 1]. Diese Zeile kann man deshalb in Matlab einfach weglassen.


Oh. Das wusste ich nicht. ...

Danke!

LG,
eniem
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2015, 16:44     Titel:
  Antworten mit Zitat      
Hallo,

einen ODE-Solver inkl. Schrittweitensteuerung wirklich gut zu programmieren ist ein ziemlicher Aufwand. Wenn es irgendwie geht, würde ich bei den fertigen, ausführlich getesteten Solvern bleiben.

Ein Gedanke: hat dieses CADINP denn ein Interface zu C? Dann könnte man z.B. aus MATLAB heraus mit MATLAB Coder C-Code generieren. Allerdings wird hinsichtlich ODE-Solvern derzeit wohl nur ode23 und ode45 unterstützt.
http://www.mathworks.com/help/coder.....n--alphabetical-list.html

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.07.15
Wohnort: Graz, Österreich
Version: ---
     Beitrag Verfasst am: 03.07.2015, 00:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
einen ODE-Solver inkl. Schrittweitensteuerung wirklich gut zu programmieren ist ein ziemlicher Aufwand. Wenn es irgendwie geht, würde ich bei den fertigen, ausführlich getesteten Solvern bleiben.


Das könnte stimmen ... wobei ich dachte, dass sich besonders das Rosenbrock-Verfahren sehr gut zur Implementierung eignet und den Aufwand vergleichsweise gering hält. Aber um das beurteilen zu können, bin ich leider viel zu wenig Mathematiker ...

Code:
Ein Gedanke: hat dieses CADINP denn ein Interface zu C?


Soweit ich weiß, leider nicht ...

LG
eniem
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.07.2015, 00:09     Titel:
  Antworten mit Zitat      
Hallo,

implizite Verfahren sind generell schwieriger zu implementieren, da in jedem Schritt ein nichtlineares Gleichungssystem zu lösen ist. Wenn du das dann auch noch händisch programmieren musst, viel Spaß...

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 02.07.15
Wohnort: Graz, Österreich
Version: ---
     Beitrag Verfasst am: 05.07.2015, 17:23     Titel:
  Antworten mit Zitat      
Hallo Harald,

das stimmt. Allerdings hat das Rosenbrock-Verfahren den Vorteil, dass sich keine nichtlinearen Gleichungssysteme ergeben, sondern stets lineare. - Und für die linearen Gls hab ich mir irgendwann schon mal einen Löser geschrieben ...

Mir mangelts noch halt irgendwo an einer anschaulichen Darstellung des Rosenbrock-Verfahrens, um die Umsetzung zu vereinfachen. (Ich habe zwar schon einige Aufsätze und Paper darüber gelesen, und dachte daher, dass es durchaus machbar ist, diesen erwähnten Python-Code zu übersetzen ... (zunächst nach MATLAB dann nach CADINP) allerdings fehlt es mir hierzu sehr sehr viel an Python-Verständnis ... )

Liebe Grüße,
eniem
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.