24.04.2013 Aufrufe

MATLAB - Eine Einführung - TUM

MATLAB - Eine Einführung - TUM

MATLAB - Eine Einführung - TUM

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

<strong>MATLAB</strong>-Verzeichnis unter root\toolbox\compiler\deploy\win32). Anschließend muss man den Compiler<br />

konfigurieren. Dazu ruft man in <strong>MATLAB</strong> mbuild -setup auf und wählt dort das Verzeichnis, in<br />

dem der C-Compiler liegt. Danach kann man mit mcc die eigenen m-Dateien kompilieren. Wenn man eine<br />

Standalone Anwendung erstellen möchte verwendet man:<br />

>> mcc -m eigenefun.m<br />

Für ein C Shared Library:<br />

>> mcc -l eigenefun.m<br />

Für ein C++ Shared Library:<br />

>> mcc -l eigenefun.m -W cpplib -T link:lib<br />

Um die so erzeugte Anwendung oder Bibliothek weiterzugeben, muss man natürlich die compilierte<br />

Datei weitergeben, außerdem die eigenefun.ctf und das <strong>MATLAB</strong> Component Runtime (unter Windows<br />

MCRInstaller.exe, unter Linux MCRInstaller.zip). Nun kann man auf jedem System über die Kommandozeile<br />

das Programm starten, dabei werden die evtl. vorhandenen Parameter einfach nach einem<br />

Leerzeichen angehängt.<br />

12.3 Andere Programmiersprachen mit <strong>MATLAB</strong> verwenden<br />

<strong>MATLAB</strong> ist sehr nützlich für mathematische Programmierung, bietet aber auch die Möglichkeit andere<br />

Programmiersprachen zu nutzen. So kann man z.B. bereits bestehende Programme in C oder Fortran<br />

einbinden oder Java-Klassen nutzen.<br />

12.3.1 Fortran und C<br />

Viele mathematische Programme sind in FORTRAN oder C geschrieben sind und man kann sie auch in<br />

MATAB nutzen, indem man sie etwas ändert und compiliert. Daher testen wir zuerst, ob unser Systm<br />

dafür passend konfigueriert ist. Dazu kompieren wir yprime.c ins aus \extern\examples\mex Arbeitsverzeichnis.<br />

Nun rufen wir mex auf:<br />

>> mex yprime.c<br />

Kann man nun yprime wie eine normale M-Funktion verwenden, funktioniert alles. >> yprime(1,1:4)<br />

Ansonsten sollte man mit mex -setup sicherstellen, dass ein geeigneter Compiler ausgewählt ist.<br />

Ebenso verfährt man mit Fortran-Programmen. Beim Aufruf des Compilers mex kann man auch noch<br />

eine Optionsdatei<br />

(z.B. aus \bin\win32\mexopts) mitgeben:<br />

>> mex yprime.c -f lccopts.bat<br />

Solche Optionsdateien kann man auch selbst erstellen, wenn man zum Beispiel einen nicht supporteten<br />

Compiler verwenden will, oder mehr Einfluss auf den Compilationsprozess nehmen will.<br />

Um ein C bzw. Fortran-Programm <strong>MATLAB</strong> kompatibel anzupassen, benötigt man eine Gatewayroutine.<br />

Außerdem muss im C-Header auch # include „mex.h“ stehen. Die Gatewayroutine stellt die<br />

Schnittstelle zwischen <strong>MATLAB</strong> und C dar:<br />

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const<br />

mxArray*prhs[] )}<br />

nlhs gibt die Anzahl der Ausgabeparameter,nrhs sie Anzahl der Eingabeparameter an. Die Parameter<br />

plhs und prhs enthalten die Pointer auf die entsprechenden Eingabe-/Ausgabevektoren. Danach<br />

kommt C Code, der die Eingaben prüft und die Datenstrukturen (natürlich <strong>MATLAB</strong> kompatibel, z.B.<br />

mxArray) für die Ausgabe anlegt. Die eigentliche C Routine ist meist eine eigene Funktion, die von hier<br />

aus aufgerufen wird und deren Ergebnis dann durch die Gatewayroutine an <strong>MATLAB</strong> zurückgegeben<br />

wird.<br />

Ruft man nun die Funktion in Matlab auf, findet <strong>MATLAB</strong> die MEX-Datei vor M-Dateien mit<br />

gleichem Namen. Dies kann man sich für die <strong>MATLAB</strong> Hilfe zunutze machen. Da die MEX-Datei keine<br />

für <strong>MATLAB</strong> lesbare Hilfe hat, sucht <strong>MATLAB</strong> weiter und gibt die Hilfe einer gleichnamigen M-Datei<br />

aus, falls vorhanden.<br />

Auch Fortran benötigt eine Gatewayroutine, die der in C sehr ähnlich sieht:<br />

subroutine mexFunction(nlhs, plhs, nrhs, prhs)<br />

64

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!