Hi, mit Simulink kann man Differentialgleichungen etc. simulieren. Kann man das auch mit einer normalen Programmiersprache wie C machen und mit einem kleinen Programm eine Differentialgleichung lösen?
Programmieranfänger schrieb: > Hi, mit Simulink kann man Differentialgleichungen etc. simulieren. Kann > man das auch mit einer normalen Programmiersprache wie C machen und mit > einem kleinen Programm eine Differentialgleichung lösen? Ja und nein. Bei Deiner Fragestellung eher nein. Grüsse, René
Programmieranfänger schrieb: > Kann > man das auch mit einer normalen Programmiersprache wie C machen Was glaubst du denn womit Simulink geschrieben ist? Klar das, geht in allen turing-vollständigen Sprachen, also auch in C. Simulink ist keine Hexerei. Programmieranfänger schrieb: > mit > einem kleinen Programm eine Differentialgleichung lösen? Analytisch echt lösen? Dürfte i.A. unmöglich sein, natürlich auch mit Simulink. Approximativ lösen ja, aber "klein" wird das Programm eher nicht. Dazu muss man eben diverse Algorithmen implementieren. Für partielle DGL's kann man z.B. die Finite-Elemente-Methode (FEM) zusammen mit den Steepest-Gradient-Algorithmus verwenden. Wenn das ganze dann auch noch effizient sein soll wird es erst recht interessant. Aber im Endeffekt sind das nur ein paar mathematische Algorithmen, und in Simulink sind die eben praktischerweise schon eingebaut.
Warum sollte denn das nicht gehen? Nur ein kleines Programm wird es wohl nicht werden.
Tüllich. Immerhin könnte selbst Simulink in C geschrieben sein. Und guck mal, was es auch gibt https://de.mathworks.com/products/simulink-coder.html
Dr. Sommer schrieb: > Simulink ist keine > Hexerei. ist Simulink auch in C programmiert? Wenn ja, gibt es irgendwo den Quellcode zum Anschauen?
Md M. schrieb: > Tüllich. Immerhin könnte selbst Simulink in C geschrieben sein. > Und guck > mal, was es auch gibt > https://de.mathworks.com/products/simulink-coder.html Da steht was von "Generieren von C- und C++-Code aus Simulink- und Stateflow-Modellen" Was ist ein Stateflow? Meinen die damit eine Wahrheitstabelle?
Programmieranfänger schrieb: > ist Simulink auch in C programmiert? Sicher weiß ich's natürlich nicht, kann aber gut sein. Spielt für die Frage aber auch keine große Rolle, denn in Bezug auf das was sie berechnen können sind alle "üblichen" Programmiersprachen (C, Java, C#, Python, Assembler, ... usw ) identisch (sind alle turing-vollständig). > Wenn ja, gibt es irgendwo den > Quellcode zum Anschauen? Würdest du die ganze Kohle für Matlab/Simulink ausgeben wenn du den Quellcode einfach bekommen könntest? Natürlich nicht... Schau aber mal bei den Open Source Varianten (Octave, Maxima, ...) nach, vielleicht können die das. Besuche eine Numerik-Vorlesung (Mathematik-Studiengang) an einer Uni oder schaue dir entsprechende Bücher an, da siehst du wie das alles funktioniert. Um natürlich ein derart mächtiges Tool wie Simulink zu bauen, welches beliebige DGL's automatisch effizient approximiert ist sehr viel (Fleiß)arbeit nötig. Das fängt schon beim Parsen der Formel an...
Beispielsweise mit den Runge-Kutta Verfahren wie beispielsweise hier https://de.m.wikipedia.org/wiki/Heun-Verfahren lassen sich DGL 1. Ordnung numerisch lösen. Du kannst jede DGL höherer Ordnung auf ein System von DGLs 1. Ordnung herunter brechen. Hier im Forum (Codesammlung) hat mal jemand einen kleinen Parser für mathematische Ausdrücke in C++ veröffentlicht, den ich noch ein wenig aufgebohrt habe. Man könnte also ein Programm erstellen in C oder besser C++, welches die Eingabe eines DGL-Systems 1. Ordnung erlaubt, die Eingaben mittels des Parsers parst und mit Runge Kutta die Lösung findet. Statt des Heun-Verfahrens benutzt man dann aber wohl besser Dormand-Prince, wie das Sinulink standardmässig tut. Zudem muss man die Schrittweite der einzelnen Iterationen in Abhängigkeit des geschätzten Fehlers verkleinern. Aber möglich sollte das sein.
Und falls es sich nicht nur um Lernzwecke handelt ist es natürlich generell am besten fertige Bibliotheken zu verwenden. In denen stecken viele Mannjahre an Entwicklung und sie sind entsprechend geprüft. z.B. http://headmyshoulder.github.io/odeint-v2/ https://en.wikipedia.org/wiki/Deal.II
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.