Simulation in C erstellen

Gast #4850115
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.
Gast #4850135
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...
#4850481
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren