MATLAB - Eine Einführung - TUM
MATLAB - Eine Einführung - TUM
MATLAB - Eine Einführung - TUM
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