Instalación del código fuente de la biblioteca de firmas
Eigen es una biblioteca C para álgebra lineal, operaciones matriciales y vectoriales, y contiene muchos algoritmos. Su licencia es MPL2. Soporta múltiples plataformas.
Eigen se proporciona a los usuarios en forma de código fuente. Solo necesita incluir el archivo de encabezado de Eigen para usarlo. Se adopta este enfoque porque Eigen se implementa a través de plantillas. Dado que las funciones de plantilla no admiten la compilación por separado, solo se puede proporcionar el código fuente en lugar de bibliotecas dinámicas para que lo utilicen los usuarios.
Definición de matriz: en la función de plantilla de la clase de matriz en Eigen, * * * hay seis parámetros de plantilla, y solo los primeros tres se usan comúnmente. Los primeros tres parámetros representan el tipo, número de filas y número de columnas de los elementos de la matriz, respectivamente.
Al definir una matriz, puede utilizar Dinámico para indicar que se desconoce el número de filas y columnas de la matriz.
En Eigen, se proporciona un constructor predeterminado para cualquier matriz, matriz, vector, matriz estática o matriz dinámica, es decir, estas estructuras de datos se pueden definir sin proporcionar ningún parámetro, y su tamaño está dado por Determinado. en tiempo de ejecución. En el constructor de matriz, solo se proporciona el número de filas y columnas y los parámetros de construcción del tipo de elemento. No se proporciona la construcción del valor del elemento. Para un vector relativamente pequeño y de longitud fija, la definición del elemento de inicialización. se proporciona.
Tipo de matriz: el tipo de matriz en Eigen generalmente está representado por MatrixXXX y su tipo de datos se puede juzgar según el nombre. Por ejemplo, "D" representa doble precisión, "F" representa punto flotante. y "I" representa un número entero, "C" representa un número complejo; Matrix2f, representa una dimensión 2*2, cada elemento es de tipo flotante.
Almacenamiento de datos: De forma predeterminada, la matriz creada por Matrix se almacena en columnas, y Eigen será más eficiente al procesar matrices almacenadas en columnas. Si deseas modificarlo, puedes agregar parámetros al crear la matriz, por ejemplo:
Matrix Acolmajor
Matrix Arowmajor
Matriz dinámica y matriz estática: matriz dinámica se refiere a su tamaño se determina en tiempo de ejecución, mientras que una matriz estática significa que su tamaño se determina en tiempo de compilación.
MatrixXd: Representa una variable de matriz de cualquier tamaño cuyo tipo de elemento es doble. Su tamaño solo se puede conocer después de la asignación en tiempo de ejecución.
Matrix3d: Representa una variable de matriz con tipo de elemento double y tamaño 3*3. Su tamaño se conoce en tiempo de compilación.
Una matriz de fila principal en Eigen tendrá filas en su nombre; de lo contrario, será de columna principal.
Un vector en Eigen es simplemente una matriz especial con dimensión 1.
Acceso a elementos de matriz: al acceder a una matriz, el índice de fila es siempre el primer parámetro. Los subíndices de matrices, matrices y vectores en Eigen comienzan todos desde 0. El acceso a los elementos de la matriz se puede lograr mediante el operador "()". Por ejemplo, m(2,3) no solo obtiene los elementos de la segunda fila y la tercera columna de la matriz m.
El operador "[]" también se proporciona para vectores. Tenga en cuenta que las matrices no se pueden utilizar de esta manera.
Establecer los elementos de la matriz: Sobrecarga en valores propios"
Restablecer el tamaño de la matriz: El número de filas de la matriz actual se puede obtener mediante rows(), cols() y size(), número de columna y tamaño, el tamaño de la matriz dinámica se puede modificar dinámicamente mediante la función resize() Nota: (1) El tamaño de una matriz de tamaño fijo no se puede modificar mediante resize(); La función resize() destruirá los datos originales, por lo que después de llamar a la función resize(), no se garantiza que el valor del elemento cambie (3) Cuando se utiliza el operador "=" para operar una matriz dinámica; Los tamaños de las matrices izquierda y derecha no son iguales, el tamaño de la matriz dinámica izquierda se modificará según el tamaño de la derecha.
Cómo elegir entre matrices dinámicas y estáticas: para matrices pequeñas (generalmente menos). que 16), el uso de una matriz estática de tamaño fijo puede generar una mayor eficiencia para matrices grandes (generalmente mayores que 32), se recomienda utilizar una matriz dinámica.
Nota: El uso de una matriz estática de tamaño fijo para una matriz muy grande puede provocar problemas de desbordamiento de la pila.
Operaciones aritméticas matriciales y vectoriales: En Eigen, las operaciones aritméticas están sobrecargadas con C's, - y *.
(1), operaciones matriciales: proporcionar, -, operadores unarios "-", =, -= operadores binarios /- representan la suma de dos matrices (los elementos correspondientes en la matriz se suman /Resta; devuelve una matriz temporal); operador unario: indica que la matriz es negativa (el elemento correspondiente en la matriz es negativo, devuelve una matriz temporal = o -= significa (correspondiente a cada elemento); también proporciona Se realizan las operaciones de multiplicación y división con un escalar (un solo número), es decir, cada elemento se multiplica y divide por este escalar
(2) Encuentra la matriz transpuesta, * * * matriz yugo; y matriz adjunta: can. Esto se hace mediante las funciones miembro transponer(), conjugar() y acompañar(). Nota: Estas funciones devuelven el resultado de la operación y no operan directamente sobre los elementos de la matriz original. Si desea transformar la matriz original, debe utilizar la función InPlace receptiva, como transpoceInPlace().
(3) Multiplicación de matrices, multiplicación matriz-vector: use el operador *, * * tiene dos operadores * y * =
(4) Operación en bloque de la matriz: Hay dos; formas de usarlo:
Matrix.block(i, j, P, Q): significa comenzar desde la matriz (i, j) y devolver un elemento que consta de P elementos en cada fila y Q elementos en cada columna Un nuevo objeto de matriz temporal compuesto por elementos, los elementos de la matriz original permanecen sin cambios;
Matrix.block(i, j): puede entenderse como una submatriz con p filas y q columnas. Esta definición significa que a partir de (I, j) en la matriz original, se obtiene una submatriz con p filas y q columnas, y se devuelve un objeto de matriz temporal compuesto por esta submatriz Los elementos del original. la matriz permanece sin cambios;
(5) Operación de bloque de vector:
Obtener los primeros n elementos del vector: vector head(n);
Obtener los n. elementos de la cola del vector: vector. tail( n);
Obtener n elementos a partir del I-ésimo elemento del vector: vector.segment(i, n);
Clase de mapa: en una matriz o vector existente, en lugar de copiar el objeto, puede operar directamente en la memoria del objeto.