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

Matlab-function aus mex-function aufrufen

 

Borste
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 11:54     Titel: Matlab-function aus mex-function aufrufen
  Antworten mit Zitat      
Moin moin,

ich habe folgende Frage: Ist es theoretisch möglich, aus einer mex-function eine Matlab-function aufzurufen? Wenn ich den folgenden Code in eine mex-function umwandeln möchte, bekomme ich nämlich einen Fehler. Habe dazu im Netz bisher nichts gefunden.

Code:

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
    double a, b, summe;
   
    a = mxGetScalar(prhs[0]);
    b = mxGetScalar(prhs[1]);

    summe = call_matlabfunction(a,b); // Matlabfunktion wird aufgerufen

    plhs[0]= mxCreateDoubleScalar(sum) ;
}
 


Vielen Dank schonmal
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: 06.06.2017, 13:58     Titel:
  Antworten mit Zitat      
Hallo,

welchen Fehler bekommst du?

Versuchst du es genau so? Wenn nicht, wie dann?
Mir ist nicht bekannt, dass es eine Funktion call_matlabfunction gäbe. Insofern kein Wunder, dass das eine Fehlermeldung gibt. Zumal man ja auch dazu sagen müsste, welche?

Wenn, dann könnte man die MATLAB Engine API nutzen.
https://www.mathworks.com/help/matl.....and-fortran-programs.html

Die Frage ist aber, ob das wirklich so sinnvoll ist. Denkbare Alternativen wären, dass man den MEX Code in zwei Dateien aufspaltet und dazwischen ganz normal innerhalb von MATLAB einen Aufruf macht.

Falls bestehender MATLAB-Code bzw. Teile davon in C umgeschrieben werden sollen, um das zu beschleunigen, möchte ich auch auf die Möglichkeit hinweisen, mit MATLAB Coder automatisch MEX-Files zu generieren.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.06.2017, 16:14     Titel:
  Antworten mit Zitat      
Ich hätte vielleicht dazuschreiben sollen, dass die Funktion call_matlabfunction(a,b) eine von mir selbst geschriebene Funktion ist, die als Beispiel dienen sollte:
Code:

function [summe] = call_matlabfunction(a,b)

summe = a+b;

end
 


Es geht einfach darum, aus meinem mex-file heraus eine Matlabfunction aufzurufen, die sich nicht in ein mex-file umwanden lässt und daher mit dem Matlabcompiler berechnet werden soll.
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: 06.06.2017, 19:40     Titel:
  Antworten mit Zitat      
Hallo,

falls es darum geht, MATLAB-Code in MEX-Files umzuwandeln, empfehle ich wie gesagt MATLAB Coder. Funktionen, die nicht für Codegenerierung unterstützt werden, können dann als extrinsisch definiert werden.

Andernfalls wie gesagt die Engine API.
Eine einfachere Möglichkeit sehe ich nicht. In deinem Beispiel würde man ja (trotz des Namens) davon ausgehen, dass call_matlabfunction eine C-Funktion ist.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2017, 13:16     Titel:
  Antworten mit Zitat      
nene, wie man MATLAB-files in MEX-files umwandelt ist mir bewusst.

Wollte nur mal wissen, ob es eine einfache und vor allem schnelle Möglichkeit gibt, ein MEX-file auszuführen und in diesem MEX-file eine normales M-file (MATLAB-function) aufzurufen. Man kann ein M-file ausführen und darin MEX-files aufrufen, nur umgekehrt habe ich es bisher nicht umsetzen können. Daher meine Frage und diese simple Beispielfunktion "call_matlabfunction".
Also nochmal einfach ausgedrück, wie kann ich ein MEX-file ausführen und in diesem MEX-file ander M-files (Unterfunktionen) aufrufen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Borste
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 56
Anmeldedatum: 18.04.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2017, 15:54     Titel:
  Antworten mit Zitat      
Ich glaube mexCallMATLAB ist die function, die ich suche.. Jetzt muss ich nur noch herausfinden, wie die angewendet wird : )
Besten Dank für die Hinweise!
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: 07.06.2017, 18:34     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Also nochmal einfach ausgedrück, wie kann ich ein MEX-file ausführen und in diesem MEX-file ander M-files (Unterfunktionen) aufrufen?

Meine Antwort auf die Frage war die MATLAB Engine API.
mexCallMATLAB scheint eine einfachere Möglichkeit zu sein. Die Beispiele sollten bei der Anwendung helfen.

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.