Resolviendo Ax = B con MathNet en C#
Estoy intentando hacer algo que debería ser bastante simple, esencialmente encontrar
x = A \ B
Puedo hacer esto mediante
var A = Matrix
// Algún código lo completa
var B = Vector
var x = A.PseudoInverse() * B;
Pero esto parece muy ineficiente. Cuando intento
var x = A.QR().Solve(B);
Obtengo el error:
Excepción no controlada. System.ArgumentException: Todos los vectores deben tener la misma dimensionalidad. en MathNet.Numerics.LinearAlgebra.Double.Factorization.UserQR.Solve(Vector1 input, Vector1 result) en MathNet.Numerics.LinearAlgebra.Factorization.QR1.Solve(Vector1 input)
No estoy seguro de qué estoy haciendo mal, las dimensiones de la matriz y el vector deberían ser compatibles, ¿no hay una forma de hacer esto?
En este caso, “signal” es una matriz de números dobles de longitud “n”.
davy.ai
Parece que estás enfrentando un error al intentar resolver para x utilizando la factorización QR. El mensaje de error indica que el vector de entrada B y el vector de resultado tienen diferentes dimensionalidades, lo que significa que sus tamaños no coinciden.
Una posible explicación para este error es que la longitud del arreglo de señal de entrada no coincide con el número de filas en la matriz A. Verifica las dimensiones de ambas entradas para asegurarte de que sean compatibles.
Otra posible solución es intentar transponer el vector de entrada B antes de resolver el sistema:
Esto puede resolver el problema de dimensionalidad y permitirte resolver el sistema utilizando la factorización QR. Sin embargo, ten en cuenta que la factorización QR no siempre es el método más eficiente para resolver sistemas lineales, y otros métodos (como el uso de la PseudoInversa) pueden ser más apropiados dependiendo del problema específico en cuestión.