dans matlab, quelles sont les différences entre linsolve et mldivide?

10

dans matlab, linsolve et mldivide sont utilisés pour résoudre un système d'équations linéaires, dans tous les cas déterminés, surdéterminés et sous-déterminés.

En lisant leurs documents, je me demandais quelles sont les différences entre eux? Utilisent-ils presque les mêmes algorithmes de factorisation matricielle et de triangularisation dans les trois cas?

Si A a les propriétés dans opts, linsolve est plus rapide que mldivide, car linsolve n'effectue aucun test pour vérifier que A a les propriétés spécifiées

Est-ce que mldivide effectue les mêmes tests pour vérifier si A a les propriétés spéciales? Ou est-ce que mldivide les traite simplement comme un cas général sans les propriétés spéciales?

Merci!

Tim
la source

Réponses:

16

Les deux sont des solveurs directs pour résoudre des systèmes linéaires (opposés au solveur itératif).

mldivideUNEUNEX=bmldivide

mldividepour les matrices carrées: Si A est symétrique et a des éléments diagonaux réels et positifs, MATLAB tente une factorisation de Cholesky. Si la factorisation de Cholesky échoue, MATLAB effectue une factorisation symétrique et indéfinie. Si A est Hessenberg supérieur, MATLAB utilise l'élimination gaussienne pour réduire le système à une matrice triangulaire. Si A est carré mais n'est ni permuté triangulaire, symétrique et défini positif, ni Hessenberg, alors MATLAB effectue une factorisation triangulaire générale en utilisant la factorisation LU avec pivotement partiel

linsolve pour les matrices carrées: factorisation LU avec pivotement partiel

mldivideet linsolvepour les matrices rectangulaires: factorisation QR

linsolveoptsUNE

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

XUNEopts

Si certains critères sont remplis linsolveet mldivideutilisent le même processus de factorisation. Par exemple, pour un système défini positif positif dense satisfaisant certaines propriétés, ou vous avez un système surdéterminé et les deux effectuent un ajustement moins carré.

En outre, linsolvepourrait également effectuer un calcul symbolique . C'est pratique lorsque vous avez un petit système sous-déterminé qui a un nombre infini de solutions. linsolvevous permet de le résoudre symboliquement, mldividene peut pas le faire. Cependant, si les variables ne sont pas déclarées symboliquement, mldivideet linsolvevous donneraient le même message d'avertissement "La matrice est singulière pour la précision de travail."

Last but not least, linsolvene prend pas en charge les systèmes clairsemés comme la matrice suivante (le point bleu signifie une entrée non nulle). Bien qu'il mldividepuisse gérer les systèmes clairsemés de manière robuste lorsque la taille est inférieure à 200k par 200k. exemple rare

Shuhao Cao
la source