|
EinHauchvonTyll |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 30.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2011, 08:58
Titel: MATLAB in C++ umsetzen
|
|
Hi Leute ich habe die Aufgabe bekommen ein Programm das mit C++ für Matlab geschrieben ist in reines C++ um zusetzen.
Das ich die MexFunktion zu Main machen muss weiß ich schon nur weiß ich nicht wie ich die mxArrays die dabei angenommen werden in C++ geschrieben werden oder ob ich das überhaupt benötige.
Außerdem konnte ich bis jetzt nicht den Matlabbefehl "mxGetPr" für entsprechend C++ finden.
Vielen Dank Schon mal für eure Hilfe.
Ich hoffe ich habe es verständlich beschrieben bei Problemen bitte dazu schreiben .
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 10:40
Titel: Re: MATLAB in C++ umsetzen
|
|
Hallo EinHauchvonTyll,
Die Arrays, die man in C++ verwendet, entsprechen den Ausgaben von mxGetPr(), nämlich Zeiger auf die Nutz-Daten. Wenn ich es richtig verstehe, musst Du also alles vor mxGetPr "einfach weglassen".
Gruß, Jan
|
|
|
EinHauchvonTyll |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 30.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2011, 10:51
Titel:
|
|
Aber mxGetPr hat doch gar nichts mit den Arrays zu tun soweit ich weiß reserviert dieser Befehl Speicher im RAM nur weiß ich nicht wie dieser Vorgang(Fachbegriff) heißt so das ich nicht nach dem passenden C++ Befehl suchen kann.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 12:59
Titel:
|
|
Hallo,
in der Regel wird das Programm wohl so aussehen:
Wenn du 1. und 3. weglässt, sollte der relevante Codeteil übrig bleiben. Dann musst du dir nur noch über Input und Output der Funktion Gedanken machen, und dabei sollten 1. und 3. hilfreich sein: alles, was aus prhs rausgeholt wird, ist ein Input - alles, was in plhs reingeschrieben wird, ist ein Output.
mxGetPr gibt einen Zeiger auf die in den Variablen enthaltenen Daten zurück. Die Variablen enthalten meist noch mehr Informationen, wie z.B. die Dimensionen.
Grüße,
Harald
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 14:01
Titel:
|
|
|
|
|
Hallo EinHauchvonTyll,
Alle Matlab Variablen haben den Typ mxArray. Darin ist ein Header enthalten, der die Dimension, den Daten-Typ, die Anzahl der Verlinkungen zu anderen Variablen, den Namen, im Falle von Structs auch eine Liste der Fieldnames, und einige magische Flags speichert. Wichtig die Bearbeitung in C++ ist:
1. der Pointer auf die eigentlichen Nutz-Daten. Dieser wird für DOUBLE-Arrays mit mxGetPr geliefert, für alle anderen Daten-Typen geht das per mxGetData.
2. die Dimension des Arrays, welche von mxGetNumberOfDimensions und mxGetDimensions bestimmt wird.
mxGetPr reserviert also keinen Speicher (das macht mxMalloc), sondern liefert den Pointer auf den bereits allozierten Speicher mit den Nutz-Daten.
Beispiel:
Idealerweise steht in der mexFunction nur Code um die Anzhal und den Typ des Inputs zu testen und die Dimensionen und Pointer auf die Daten zu erhalten. Dies wird dann an eine Unterfunktion übergeben, die dann von Matlab unabhängig ist - es sei denn, es werden Matlab-API-Funktionen aufgerufen, etwa mxMalloc, mexPrintf, mxIsNaN, etc.
Kennst Du die Beispiel-Mex-Files aus der Matlab-Dokumentation?
Gruß, Jan
|
|
|
EinHauchvonTyll |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 30.09.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.09.2011, 14:04
Titel:
|
|
Also das möchte ich in C++ umsetzen
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 30.09.2011, 14:28
Titel:
|
|
Hallo EinHauchvonTyll,
Hier gibt es ein grundsätzliches Problem: Die Inputs der C++-main-Funktion sind vom Type CHAR und die Ausgabe ist VOID. Wie möchtest Du diese Funktion dann aufrufen?
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| RSS
Hosted by:
Copyright © 2007 - 2024
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.
|
|