Aufruf der MATLAB-integrierten LAPACK / BLAS-Routinen

8

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.

    
petrichor 22.06.2011, 10:44
quelle

2 Antworten

10

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:

Beispiel: SVD-Zerlegung mit DGESVD :

%Vor%

(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%

BEARBEITEN:

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:

%Vor%

svd_lapack.c

%Vor%

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)

    
Amro 22.06.2011, 13:42
quelle
-2

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

    
fellowworldcitizen 09.08.2012 21:23
quelle

Tags und Links