Por que é o Matlab do inv lento e impreciso?
-
07-07-2019 - |
Pergunta
Eu li em alguns lugares (no doc e neste post do blog : http://blogs.mathworks.com/loren/2007/05/16/purpose-of-inv/ ) que o uso de inv em Matlab não é recomendado porque ele é lento e impreciso.
Eu estou tentando encontrar a razão de ser desta imprecisão.A partir de agora, o Google não dar m resultado interessante, então eu pensei que alguém aqui poderia me orientar.
Obrigado !
Solução
A imprecisão que mencionei é com o método Inv, não a implementação do MATLAB. Você deve usar o QR, LU ou outros métodos para resolver sistemas de equações, pois esses métodos normalmente não exigem ao quadro do número de condição do sistema em questão. O uso do Inv normalmente requer uma operação que perde a precisão ao quadrar o número da condição do sistema original.
--Loren
Outras dicas
Eu acho que o objetivo do blog de Loren não é o de Matlab inv
A função é particularmente mais lenta ou mais imprecisa do que qualquer outra implementação numérica de calcular uma matriz inversa; Em vez disso, na maioria dos casos o próprio inverso não é necessário e você pode proceder por outros meios (como resolver um sistema linear usando \
- O operador de barra de barra - em vez de calcular um inverso).
inv()
é certamente mais lento do que \
a menos que você tenha várias lado direito vetores para resolver.No entanto, o conselho de MathWorks relativa imprecisão é devido a uma excessivamente conservadora, confeccionada em álgebra linear numérica resultado.Em outras palavras, inv()
NÃO é inexato.O link elabora mais : http://arxiv.org/abs/1201.6035
Vários amplamente utilizados livros didáticos de levar o leitor a crer que a solução de um sistema linear de equações Ax = b, multiplicando-se o vetor b por um computado inverso inv(A) é impreciso.Praticamente todos os outros livros sobre análise numérica e de álgebra linear numérica aconselharia o uso calculado o inverso, sem indicar se isto é correto ou não.Na verdade, em suposições razoáveis sobre como o inverso é calculado, x = inv(A)*b é tão precisa como a solução calculada pelo melhor retro-estável solucionadores de problemas.