Cómo resolver para [matemáticas] A [/ matemáticas] en el sistema [matemáticas] A x = B [/ matemáticas] usando MATLAB

Consideramos la ecuación matricial [matemática] AX = B [/ matemática] donde [matemática] A \ in \ mathbb {R} ^ {m \ times n}, X \ in \ mathbb {R} ^ {n \ times p} , B \ in \ mathbb {R} ^ {m \ times p} [/ math], [math] A [/ math] es desconocido, como se describe en la respuesta de Natalia Nezvanova. Hay varios casos a considerar:

1. [matemáticas] X [/ matemáticas] es una matriz cuadrada de rango completo:

Este caso incluye el evento de que [math] X [/ math] es un escalar distinto de cero. Hay una solución para este sistema, dada por [matemática] A = BX ^ {- 1} [/ matemática], y Matlab ofrece tres métodos diferentes para calcularla:

  • Calcular el inverso de [matemáticas] X [/ matemáticas] y multiplicar [matemáticas] B [/ matemáticas] desde la derecha:

A = B * inv (X)

  • Calcular pseudo-inverso de [matemática] X [/ matemática] y multiplicar [matemática] B [/ matemática] desde la derecha:

A = B * pinv (X)

  • Resolviendo el sistema usando el operador de división de matriz correcto :

A = B / X

Los tres métodos calculan la misma solución (ya que hay exactamente una), pero usan algoritmos diferentes, por lo que pueden diferir según la precisión (particularmente para matrices mal acondicionadas (es decir, cercanas al singular)) y también según el tiempo de cálculo. El operador de división matricial es el más rápido y también el más estable numéricamente, por lo que generalmente debería ser su primera opción. Pseudo-inverso sería el segundo.

2. [matemáticas] X [/ matemáticas] es una matriz cuadrada singular

Puede haber ninguna o infinitas soluciones para el sistema. Considere el caso escalar [matemática] A \ cdot 0 = B [/ matemática]: cualquier matriz (de las dimensiones correctas) resolverá el sistema si [matemática] B [/ matemática] es todo ceros, no lo resolverá si [matemática ] B [/ math] tiene al menos un elemento distinto de cero.

Obviamente, el inverso de [math] X [/ math] no existe, por lo que la primera opción no funcionará. El operador de división también puede fallar aquí, mientras que pinv generalmente devolvería un resultado. Tenga en cuenta que el resultado que obtenga podría no ser una solución a la ecuación, ya que puede que no haya una. Pero minimiza una condición de error de mínimos cuadrados.

3. El sistema está sobredeterminado

Este es el caso cuando [math] X [/ math] es rango completo y tiene más columnas que filas. Como [math] X [/ math] no es cuadrado, el inverso no está definido, y podemos elegir, nuevamente, de pinv y rdiv.

Ambos dan la misma solución de error de mínimos cuadrados, que es la solución a [math] \ min_A \ left \ | AX-B \ right \ | ^ 2 [/ math]. La división matricial lo hace más rápido y con mayor precisión.

4. El sistema es deficiente en rango

Si [math] X [/ math] no es de rango completo (y no necesariamente cuadrado), el sistema tendría varias soluciones. Una vez más, inv no funciona en este caso, y pinv y rdiv le darían diferentes soluciones al sistema.

  • El cálculo pseudo-inverso devuelve una matriz [matemática] A [/ matemática], que es la única solución para el sistema [matemática] AX = B [/ matemática] que tiene una norma de matriz mínima [matemática] \ left \ | A \ right \ | [/ math], entre todas las soluciones.
  • El cálculo del operador de división de matriz devuelve una matriz [matemática] A [/ matemática], que es una de las soluciones para el sistema [matemática] AX = B [/ matemática] que no tiene más elementos distintos de cero que cualquier otra solución.

Puede usar el pseudoinverso de matriz de Moore-Penrose

Para resolver Ax = B,

x = B \ A,

Simplemente puede usar “\” para resolver esta ecuación.

aquí las dimensiones de A serán m * n, x será n * 1 e y será n * 1