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

von .m in .c (Unterschied Matlab und C++ Syntax)

 

Eiergust
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.09.2011, 16:33     Titel: von .m in .c (Unterschied Matlab und C++ Syntax)
  Antworten mit Zitat      
Hi,
ich bin gerade dabei einen Gleichstrommotor mit Hilfe Matlab/Simulink unter Verwendung von S-Functions zu simulieren. Dabei müssen für das dynamische Verhalten so einige DGL´s gelöst werden. Ich bewerkstellige dies per Runge-Kutta-Verfahren in m-Files.
Kleines Beispiel:
Code:

i=rk4(t,dt,y0,@DGL)

function [y1] = rk4(t,dt,y0,h2dgl)
  k1=feval(h2dgl,t,y0);  
  yhlp=y0+dt/2*k1;
  k2=feval(h2dgl,t+dt/2,yhlp);
  yhlp=y0+dt/2*k2;
  k3=feval(h2dgl,t+dt/2,yhlp);
  yhlp=y0+dt*k3;
  k4=feval(h2dgl,t+dt,yhlp);
  yhlp=y0+dt*(k1/6+k2/3+k3/3+k4/6);
  y1=yhlp;
return;

function [dy] = DGL(t,y)  
  global e_ab e_cb
  global v_ab v_cb  
  global R L
     
  dy=(-R/L)*y-(-2*(v_ab-e_ab)+(v_cb-e_cb))/(3*L_strang);  
return;
 

Da es jedoch zu enormen Rechenzeiten führt möchte ich dies in C in eine c-File überführen um es anschlißend per mex-Befehl zu kompilieren.
Da ich bis jetzt noch keine Erfahrung mit Programmieren hatte und die Lösung in Matlab schon viel Zeit in Anspruch nahm, stehe ich in C durch die abweichende Syntax wieder auf dem Schlauch. Kann mir jemand nen Ansatz liefern?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.09.2011, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

eine Frage: warum implementierst du ein RK-Verfahren? Es gibt doch in MATLAB schöne, schnelle Methoden zum Lösen von DGLen (ode*).

Mit MATLAB Coder kannst du MATLAB-Code automatisch in C-Code übersetzen lassen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 19.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2011, 18:31     Titel:
  Antworten mit Zitat      
warum ich das mache...weil mein betreuender hochschullehrer das so will. Very Happy
geht auch darum, dass unterschiedliche programme mit der selben funktion unterschiedliche werte liefern. sucht man zBsp in matlab und mathcad per newton-funktion nullstellen, so geben beide unterschiedliche werte aus. es lässt sich schwer in die algorithmen der programme schauen, daher um es identisch zu halten muss ich halt alle numerischen verfahren per hand eintippern.
das problem mit dem c-code habe ich nun auch lösen können. die ganzen { und } haben es mir doch so verdammt schwer gemacht. vergisst man eine so funzt alles net wie es soll
so far...close
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.09.2011, 19:45     Titel:
  Antworten mit Zitat      
Hallo,

das ist, wie wenn man einen alten klapprigen Käfer, der sich kaum noch vom Fleck bewegt, einer Auswahl von schönen Neuwägen vorzieht, weil man bei dem alten Käfer sieht, was vor sich geht.
Das Runge-Kutta-Verfahren mag dir zwar überall die *gleichen* Ergebnisse liefern, aber es ist doch sehr fraglich, ob es *gute* Ergebnisse liefert. Ich würde bestenfalls zu Übungszwecken selbst einen Löser schreiben.

Grüße,
Harald
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 - 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.