2009-09-14 22 views

Respuesta

30

La inexactitud que mencioné es con el método INV, no con la implementación de MATLAB. Debería utilizar QR, LU u otros métodos para resolver sistemas de ecuaciones, ya que estos métodos generalmente no requieren cuadrar el número de condición del sistema en cuestión. El uso de inv normalmente requiere una operación que pierde precisión al cuadrar el número de condición del sistema original.

--Loren

19

Creo que el punto de blog de Loren no es que la función de MATLAB inv es particularmente lento o más inexacta que cualquier otra aplicación numérica de cálculo de una matriz inversa; más bien, que en la mayoría de los casos el inverso en sí mismo no es necesario, y puede proceder por otros medios (como resolver un sistema lineal usando \ - el operador de barra invertida - en lugar de calcular un inverso).

+1

Además, el operador de barra invertida (en general) proporciona resultados más precisos que inv (A) * b: elige un algoritmo adecuado para resolver A * x = b. – Martijn

+0

Para ser explícito para los estudiantes, quiere escribir 'x = A \ b' en lugar de' x = inv (A) * b' para resolver el sistema lineal Ax = b. Calcular el inverso de A no es necesario, no es robusto y no es rápido. En una gran proporción de fórmulas matemáticas donde ve un A^-1, el algoritmo puede implementarse SIN calcular el inverso de A. Dicho esto, para matrices pequeñas de rango completo, la compu inv (A) hará casi siempre estará perfectamente bien. Para matrices grandes o matrices condicionadas mal, puede ser problemático. –

0

inv() es ciertamente más lento que \ a menos que tenga múltiples vectores del lado derecho para resolver. Sin embargo, el consejo de MathWorks con respecto a la inexactitud se debe a un límite excesivamente conservador en un resultado numérico de álgebra lineal. En otras palabras, inv() NO es inexacto. El enlace elabora además: http://arxiv.org/abs/1201.6035

varios libros de texto ampliamente utilizados conducen al lector a creer que la solución de un sistema lineal de ecuaciones Ax = b multiplicando el vector b por un inv inversa computarizada (A) está incorrecto. Prácticamente todos los demás libros de texto sobre análisis numérico y álgebra lineal numérica desaconsejan el uso de inversas calculadas sin establecer si esto es exacto o no. De hecho, bajo suposiciones razonables sobre cómo se calcula el inverso, x = inv (A) * b es tan preciso como la solución calculada por los mejores solucionadores retrógrados.

Cuestiones relacionadas