Ich möchte lernen, wie man die eingebauten LAPACK / BLAS-Routinen in MATLAB aufruft. Ich habe Erfahrung mit MATLAB- und mex-Dateien, aber ich habe eigentlich keine Ahnung, wie man LAPACK- oder BLAS-Bibliotheken aufruft. Ich habe die Gateway-Routinen im Dateiaustausch gefunden, die die Anrufe vereinfachen, da ich nicht schreiben muss Eine Mex-Datei für jede Funktion wie diese . Ich brauche ein Spielzeugbeispiel, um das grundlegende Messaging zwischen MATLAB und diesen integrierten Bibliotheken zu lernen. Jedes Spielzeugbeispiel wie Matrixmultiplikation oder LU-Dekomposition ist willkommen.
Wenn Sie in die lapack.m Datei von der FEX Einreichung, die Sie erwähnt haben, sehen Sie ein paar Beispiele zur Verwendung der Funktion:
(Hinweis: Der Grund, warum wir diese Dummy-Variablen für Ausgabevariablen verwendet haben, ist, dass Fortran-Funktionen erwarten, dass alle Argumente als Verweis übergeben werden, aber MEX-Funktionen in MATLAB keine Änderung ihrer Eingabe erlauben Kopien aller Eingaben in einem Zell-Array mit irgendwelchen Modifikationen)
Wir bekommen:
%Vor%Dies entspricht der MATLAB eigenen SVD Funktion:
%Vor%das gibt:
%Vor%Der Vollständigkeit halber zeige ich unten ein Beispiel für eine MEX-Funktion, die direkt die Fortran-Schnittstelle der DGESVD-Routine aufruft.
Die gute Nachricht ist, dass MATLAB die Bibliotheken libmwlapack
und libmwblas
und zwei entsprechende Header-Dateien blas.h
und lapack.h
, die wir verwenden können, zur Verfügung stellt. Tatsächlich gibt es eine Seite in der Dokumentation, die den Prozess von Aufruf von BLAS / LAPACK Funktionen aus MEX-Dateien .
In unserem Fall definiert lapack.h
den folgenden Prototyp:
Auf meinem 64-Bit-Windows kompiliere ich die MEX-Datei als: mex -largeArrayDims svd_lapack.c "C:\Program Files\MATLAB\R2013a\extern\lib\win64\microsoft\libmwlapack.lib"
Hier ist ein Test:
%Vor%gegen
%Vor% (Denken Sie daran, dass das Vorzeichen der Eigenvektoren in U
und V
willkürlich ist, damit Sie die beiden umgedrehten Zeichen erhalten)
Ein gutes / praktisches Beispiel für die Verwendung von SVD in Matlab wird hier erklärt: Transformierte erfasste Koordinaten in Bildschirmkoordinaten
Weitere Informationen zum Berechnen von svd in objective-c mit lapack finden Sie hier berechne das V von A = USVt in Ziel-C mit SVD von LAPACK in xcode
Tags und Links matlab linear-algebra blas lapack