|
|
Probleme mit MEX Funktion |
|
Tommy_Mensch |

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 14:04
Titel: Probleme mit MEX Funktion
|
 |
Hallo allerseits,
ich verzweifle hier gerade leicht an einer Mex Funktion! Mein Problem ist, ich habe wenig bis kaum Ahnung von C und in jedem Tutorial wird wild mit Pointern etc. rumgeschmissen... Daher dachte ich fragste hier mal recht freundlich nach.
Und zwar: Das Setup mit Compiler etc. hat alles funktioniert. Also ich habe es schon vollbracht die Hello World Funktion aufzurufen. Jetzt brauche ich aber eine MEX Funktion mit mehreren Ein- und Ausgängen.
Wäre da wohl jemand so freundlich mir das einmal an einem Beispiel von sagen wir 2 Ein- und Ausgängen zu erklären? Vllt. an einem Beispiel? Oder kennt jemand ein gutes Tutorial wo einfach gezeigt wird, 2 Variablen rein mit denen 2 rechnungen ausführen und 2 wieder raus?
Ich wäre für jede Hilfe Dankbar!
Beste Grüße,
Thomas
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 14:08
Titel:
|
 |
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 14:17
Titel:
|
 |
Nicht so gut
The page you were looking for is not available in this version of the Documentation. You can use the search box or browse the products below to find related information. You can also view archived documentation for prior releases.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 14:48
Titel:
|
 |
Hallo,
das ist merkwürdig. Versuchs mal mit dem angepassten Link oben.
Grüße,
Harald
|
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 14:59
Titel:
|
 |
Jetzt geht es, danke!
Ich schaue es mir mal an.
Mfg Thomas
|
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 15:10
Titel:
|
 |
Ok eine Frage schonmal: Diese ganzen Abfragen nach Spalten Datentyp der Eingansdaten ist optional oder?
Beste Grüße,
Thomas
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.05.2014, 15:40
Titel:
|
 |
Hallo,
teils ja, teils nein. Du siehst ja, welche Informationen im weiteren Verlauf verwendet werden und welche nicht.
Die mxIs* - Befehle sind erst mal optional. Wenn dein C-Code allerdings infolge falschen Aufrufs intern irgendeinen Mist macht und du dich über die Ergebnisse wunderst, sind die aber gar nicht schlecht.
Die mxGet* - Befehle sind auch wichtig, wenn du dir z.B. Dimensionsinformationen holst. Du hast sonst ja nur einen Zeiger auf das Array, weißt aber nicht, wie groß es ist.
Grüße,
Harald
|
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.05.2014, 10:04
Titel:
|
 |
OK vielen Dank schonmal. Die Abfragen sind für mich erstmal zweitrangig.
Ich bekomme das irgendwie nicht ans laufen. Diese ganze Pointergeschichte habe ich in der Inrormatikvorlesung immer gut umgangen und daher leider nie verstanden.
Sorry wenn ich mich etwas blöd anstelle, aber hat vllt. jemand eine MEX funktion auf dem Rechner , wo einfach von Matlab 2 sagen wir 2x1 Arrays übergeben werden, die Elemente mit 2 Multipliziert werden und wieder zurück gegeben werden?
Daran könnte ich mich dann entlang hangeln und mir wäre wirklich sehr geholfen...
Vielen Besten Dank im voraus!
Mfg
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.05.2014, 10:09
Titel:
|
 |
Hallo,
das Beispiel geht doch sehr in die Richtung?
Wenn du konkretisieren kannst, was du daran nicht verstehst...
Grüße,
Harald
|
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.05.2014, 12:44
Titel:
|
 |
Ok ich mache langsam Fortschritte!
Ich habe jetzt die folgende Funktion geschrieben die einen Wert übergibt, den verdoppelt und wieder ausgibt:
jetzt möchte ich unter anderem eine relativ große Matrix übergeben. Diese soll dann mit einer for Schleife Zeile für Zeile durchlaufen werden, diverse Rechnungen angestellt werden, die wiederum in einer Matrix gespeichert werden und diese Matrix wieder zurück gegeben werden.
Mein Hauptproblem liegt jetzt darin eine Matrix zu übergeben...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.05.2014, 17:46
Titel:
|
 |
Hallo,
im Grunde brauchst du nur den Schritten im Beispiel folgen:
statt mxGetScalar-Befehl
% pointer auf die Originalmatrix
mxGetM und mxGetN verwenden, um die Dimensionen der Originalmatrix herauszufinden.
Mit mxCreateDoubleMatrix die Output-Matrix allokieren.
Funktion aufrufen.
An sich kannst du das direkt aus dem geposteten Beispiel übernehmen. Was anderes mache ich gerade auch nicht ;)
Warum tust du dir die mex-Geschichte eigentlich an?
Grüße,
Harald
|
|
|
Tommy_Mensch |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 12
|
 |
|
 |
Anmeldedatum: 19.01.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 12:22
Titel:
|
 |
Sonst nehme ich einfach Spaltenvektoren und setze sie danach wieder zusammen...
Weil die Strapdownrechnung in Matlab für längere Flüge sonst zu lange dauert!
Vielen Dank aber für deine Hilfe ich tüftel dann mal weiter
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.05.2014, 18:07
Titel:
|
 |
Hallo,
C-Code ist in der Tat schneller als gleichwertiger MATLAB-Code. Es ist jedoch in MATLAB wesentlich einfacher, effizienten Code zu schreiben.
Ich würde also tendentiell zunächst versuchen, den MATLAB-Code zu optimieren, beispielsweise for-Schleifen vermeiden und stattdessen Vektor- oder Matrixoperationen verwenden.
Du kannst mit dem Profiler überprüfen, welche Teile deines Codes die meiste Zeit verbrauchen. Dann diesen Teil optimieren (und ggf. die Leute hier dazu um Rat fragen).
Grüße,
Harald
|
|
|
|
|
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 - 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.
|
|