no matlab, quais são as diferenças entre linsolve e mldivide?

10

no matlab, linsolve e mldivide são usados ​​para resolver um sistema de equações lineares, em todos os casos determinados, superdeterminados e subdeterminados.

Lendo os documentos deles, fiquei imaginando quais as diferenças entre eles. Eles estão usando quase os mesmos algoritmos de fatoração e triangularização de matriz nos três casos?

Se A tiver as propriedades em opts, o linsolve será mais rápido que o mldivide, porque o linsolve não realiza nenhum teste para verificar se A possui as propriedades especificadas.

O mldivide executa os mesmos testes para verificar se A possui propriedades especiais? Ou mldivide apenas os trata como caso geral sem as propriedades especiais?

Obrigado!

Tim
fonte

Respostas:

16

Ambos são solucionadores diretos para resolver sistemas lineares (opostos ao solucionador iterativo).

mldivideUMAUMAx=bmldivide

mldividepara matrizes quadradas: Se A é simétrico e possui elementos diagonais reais e positivos, o MATLAB tenta uma fatoração de Cholesky. Se a fatoração de Cholesky falhar, o MATLAB executará uma fatoração simétrica e indefinida. Se A for Hessenberg superior, o MATLAB usa a eliminação gaussiana para reduzir o sistema a uma matriz triangular. Se A é quadrado, mas não é permeado triangular, simétrico e definido positivo, ou Hessenberg, o MATLAB executa uma fatoração triangular geral usando a fatoração LU com pivô parcial

linsolve para matrizes quadradas: fatoração LU com pivô parcial

mldividee linsolvepara matrizes retangulares: fatoração QR

linsolveoptsUMA

opts.POSDEF = true; linsolve(A,b,opts)

xUMAopts

Se determinados critérios sejam cumpridos, linsolvee mldivideque utilizam o mesmo processo de fatoração. Por exemplo, para um sistema definido positivo e denso que satisfaça certas propriedades, ou você tem um sistema sobredeterminado e ambos executam o ajuste menos quadrado.

Além disso, linsolvetambém poderia realizar computação simbólica . Isso é útil quando você tem um pequeno sistema sub-determinado, com um número infinito de soluções. linsolvepermite que você resolva simbolicamente, mldividenão pode fazer isso. No entanto, se as variáveis ​​não forem declaradas simbolicamente mldividee linsolvereceberem a mesma mensagem de aviso "Matriz é singular para trabalhar com precisão".

Por último, mas não menos importante, linsolvenão suporta sistemas esparsos como a seguinte matriz (ponto azul significa entrada diferente de zero). Embora mldividepossa lidar com sistemas esparsos com robustez quando o tamanho estiver abaixo de 200k por 200k. exemplo esparso

Shuhao Cao
fonte