es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.Build.Sparse(n,m);
// Algún código lo completa
var B = Vector.Build.DenseOfArray(signal)
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”.

Tags:  , , ,

Answer

  1. Avatar for 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:

    var x = A.QR().Solve(B.Transpose());
    

    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.

Comments are closed.