Forum: PC-Programmierung Simulation in C erstellen


von Programmieranfänger (Gast)


Lesenswert?

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?

von René H. (Gast)


Lesenswert?

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é

von Dr. Sommer (Gast)


Lesenswert?

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.

von Max707 (Gast)


Lesenswert?

Warum sollte denn das nicht gehen? Nur ein kleines Programm wird es wohl 
nicht werden.

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

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

von Programmieranfänger (Gast)


Lesenswert?

Dr. Sommer schrieb:
> Simulink ist keine
> Hexerei.

ist Simulink auch in C programmiert? Wenn ja, gibt es irgendwo den 
Quellcode zum Anschauen?

von Programmieranfänger (Gast)


Lesenswert?

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?

von Dr. Sommer (Gast)


Lesenswert?

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...

von Tobias P. (hubertus)


Lesenswert?

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.

von Andre R. (physicist)


Lesenswert?

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
Noch kein Account? Hier anmelden.