Lineare Algebra in AutoIt
Eine Bibliothek zur linearen Algebra, entwickelt in AutoIt. Diese Bibliothek bietet eine Vielzahl von Funktionen zur Durchführung von Berechnungen und Operationen in der linearen Algebra.
Idee
Eine UDF zur Linearen Algebra in AutoIt.
Ziel dieser ist es möglichst thematisch umfassend, performant und einfach zugänglich zu sein.
Als Grundlage der UDF dient die weit verbreitete Softwarebibliothek BLAS/LAPACK.
Der Nutzer soll bei der Verwendung möglichst intuitiv arbeiten können und ohne größere adminstrative Aufwände auskommen.
Ein besonderer Schwerpunkt liegt in umfangreichen Funktionalitäten zur Ausgleichungsrechnung.
Aufbau
Die UDF ist in 3 Teil-UDFs untergliedert: BLAS.au3, LAPACK.au3 sowie LinearAlgebra.au3.
In den ersten beiden sind die Low-Level-Schnittstellen zu den jeweiligen BLAS/LAPACK-Funktionalitäten implementiert.
Auf dieser Basis baut die LinearAlgebra.au3 auf, welche als primäre Schnittstelle für den Endanwender gedacht ist.
Die Funktionen hier bieten einfacherere Schnittstellen und Zugang zu komplexeren Algorithmen wie z.B. Regressionen und Ausgleichungsrechnung.
Neben diesen 3 Dateien wird zusätzlich noch eine DLL benötigt, welche die BLAS/LAPACK-Schnittstelle implementiert.
Einrichtung
- Download der 3 Dateien `BLAS.au3`, `LAPACK.au3` sowie `LinearAlgebra.au3` (oder gleich clone des Repositories) von >>Hier<<
- Download einer aktuellen BLAS/LAPACK-DLL:
- Empfehlung: OpenBLAS (theoretisch sollten auch andere BLAS/LAPACK-Implementierungen funktionieren - jedoch sind dann evtl. zusätzliche Anpassungen notwendig)
- Download der Datei OpenBLAS-x.x.xx-x64.zip und Extraktion der Datei libopenblas.dll in den selben Ordner wie die LinearAlgebra.au3
- Nun sollten die Beispieldateien im Unterordner /examples ausführbar sein.
Umfang
---- vector/matrix creation ----
_la_fromArray - converts a AutoIt array or array define string into a matrix map
_la_fromStruct - creates a matrix/vector map from a DllStruct as used here in the UDF
_la_createVector - creates new empty vector
_la_createMatrix - creates new empty matrix
_la_createIdentity - create identity matrix/vector
_la_duplicate - creates an independent copy of a matrix/vector map
_la_fromFile - reads a matrix or a vector from a file created by _la_toFile()
---- extraction/transforming ----
_la_join - combines 2 matrices
_la_transpose - transposes a matrix in-place or out-place and [optional] scaling
_la_ReDim - changes the shape of a matrix by by changing the number of columns (also matrix <-> vector conversion)
_la_getRow - extracts a row of a matrix as a vector
_la_getColumn - extracts a column of a matrix as a vector
_la_getDiag - extracts the diagonal of a matrix as a vector
_la_getTriangle - extract upper or lower triangle part of a matrix
_la_VectorToDiag - creates a diagonal matrix from a vector
---- data output ----
_la_display - displays a matrix/vector map, similar to _ArrayDisplay
_la_toArray - converts a matrix/vector map into an AutoIt array
_la_toFile - write a matrix/vector into a file
---- scalar operations ----
_la_rotate - applies a plane rotation to coordinate-pairs
---- matrix attributes ----
_la_isPositiveDefinite - checks whether a matrix is positive definite
_la_isSymmetric - checks whether a matrix is symmetrical
_la_rank - determines the rank of a matrix
_la_determinant - calculate the determinant of a matrix
_la_conditionNumber - determine the condition number of a matrix
---- unary operations ----
_la_inverse - calculates the inverse of a matrix
_la_sum - calculates the sum of the elements of a matrix, vector or parts thereof
_la_asum - calculate the sum of the absolute(!) values of a matrix/vector
_la_amin - finds the first element having the minimum absolute(!) value
_la_amax - finds the first element having the maximum absolute(!) value
_la_norm - calculate the euclidian norm of a vector
_la_mean - calculate the mean of a vector or parts of a matrix
---- element wise operations ----
_la_sqrtElements - calculates the square root of each element of a matrix/vector
_la_squareElements - calculates the square of each element of a matrix/vector
_la_invElements - forms the reciprocal (1/x) for each element of the matrix/vector
---- addition subtraction ----
_la_sub - subtracts a matrix/vector B from matrix/vector A
_la_add - calculate the sum of a matrix/vector/scalar mA and a matrix/vector/scalar mB
---- multiplication ----
_la_mul - calculates a multiplication between a matrix/vector/scalar A and a matrix/vector/scalar B
_la_outerproduct - calculates the outer product ("tensor product") of two vectors
_la_dot - calculate the "dot product"/"scalar product"/"inner product" of two vectors
_la_scale - multiplies the elements of a matrix/vector by a scalar value
_la_mulElementWise - calculates the element-wise ("Hadarmard") product between two matrices/vectors
_la_cross - calculates the cross product between two 3-element vectors
---- factorization / decomposition ----
_la_LU - calculates the LU decomposition of a matrix
_la_QR - calculates the QR decomposition of a matrix
_la_SVD - calculates the singular value decomposition (SVD) of a matrix
_la_cholesky - calculate the cholesky decomposition of a symmetric, positive definite matrix ( A --> L * Lᵀ or A --> U * Uᵀ )
---- eigenvalues / eigenvectors ----
_la_eigen - computes for an N-by-N real matrix A, the eigenvalues and the left and/or right eigenvectors.
---- solve linear equation systems ----
_la_solve - computes the solution to a system of linear equations A * X = B
---- least squares solving ----
_la_lstsq - solves overdetermined or underdetermined [weighted] linear system
---- regression ----
_la_regression - calculates an n-dimensional linear or non-linear regression
---- adjustment ----
_la_adjustment - performs a least-squares adjustment calculation for a system of different [weighted] non-linear equations
_la_adjustment_l1 - performs a adjustment calculation to L1 norm for a system of different [weighted] non-linear equations
_la_adjustment_addObservation - adds an observation to the adjustment system
---- additional helper functions ----
_la_adj_showResult - formats the results of _la_adjustment more clearly and display them in a window
Alles anzeigen
Dokumentation
Die Dokumentation zu den einzelnen Funktionen ist direkt im Quellcode enthalten. Jede Funktion ist mit einer Beschreibung versehen, die ihre Parameter und Rückgabewerte erklärt. In den meisten Fällen ist hier auch ein kurzes Beispiel mit hinterlegt. Zudem findest du detaillierte Erklärungen in den Beispieldateien.
ToDo
- Bestimmte Funktionen (z.b. _la_add(), _la_mul(), _la_solve(), _la_inverse() ...) sind derzeit für den allgemeinen Fall implementiert. Diese profitieren jedoch entsprechend, wenn die spezifischen Funktionen für spezielle Matrixgeometrien (symmetrische Matrizen, Dreiecksmatrizen, Bandmatrizen, ...) jeweils verwendet würden. Die hierfür notwendigen Grundfunktionen sind bereits in der BLAS.au3 und LAPACK.au3 implementiert.