Pergunta

Eu tenho um programa que usa JAMA e necessidade de teste é uma matriz pode ser invertido. Eu sei que eu posso apenas experimentá-lo e pegar uma exceção, mas que parece ser uma má idéia (com um bloco catch como parte do caminho de código "normal" parece ser má forma).

seria preferido Um teste que também retorna o inverso (ou rodar em um O melhor () do que a operação inversa).

Foi útil?

Solução

Em geral, se você não pode resolver a matriz, é singluar (não invertível). Eu acredito que a forma que JAMA faz isso é para tentar resolver a matriz usando LU fatoração, e se ele falhar, ele retorna "true" para isSingular ().

Não há realmente uma maneira geral para olhar apenas para os elementos de uma matriz e determinar se ele é singular - você precisa verificar cada coluna para ver se ele é ortogonal com os outros (ou seja, o espaço nulo para a matriz é 0). LU fatoração é bastante rápido, normalmente ... há momentos em que é preciso a maior parte de uma operação, no entanto.

Você tem um problema de velocidade real que você está tentando superar?

Outras dicas

Se uma exceção é lançada, qual é a sua posição de recuperação?

Se você fizer uma decomposição LU e achar que é singular, você capturar a exceção e tentar uma SVD (decomposição em valores singulares) em vez?

Parece que você gostaria de estimar o recíproco do número de condição.

deste site parece um pouco promissores ...

Veja também Golub e Van Loan, p. 128-130 . (Se você não tem uma cópia do mesmo, obter um.)

... ou Higham , que é uma autoridade em métodos numéricos. Exceto que é meio difícil de analisar a matemática ... como caminhar através de um emaranhado de arbustos de framboesa. : /

Ou talvez verificar as fontes de oitava para a sua versão do MATLAB de rcond() . Eu encontrei este post .

Para uma matriz quadrada, você poderia você apenas verificar a sua determinante --- Matrix.det () retorna zero se e somente Se a matriz é singular. Claro, você terá que tomar cuidado para mal-condicionado matrizes também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top