in matlab, quali differenze ci sono tra linsolve e mldivide?


10

in matlab, sia linsolve che mldivide sono usati per risolvere un sistema di equazioni lineari, in tutti i casi determinati, sovradeterminati e indeterminati.

Leggendo i loro documenti, mi chiedevo quali differenze ci fossero tra loro? Stanno usando quasi gli stessi algoritmi di fattorizzazione e triangolarizzazione della matrice nei tre casi?

Se A ha le proprietà in opts, linsolve è più veloce di mldivide, perché linsolve non esegue alcun test per verificare che A abbia le proprietà specificate

Mldivide esegue gli stessi test per verificare se A ha le proprietà speciali? O mldivide li tratta semplicemente come un caso generale senza le proprietà speciali?

Grazie!

Risposte:


16

Entrambi sono risolutore diretto per risolvere sistemi lineari (in opposizione al risolutore iterativo).

mldivideUNUNX=Bmldivide

mldivideper matrici quadrate: se A è simmetrico e presenta elementi diagonali reali positivi, MATLAB tenta una fattorizzazione di Cholesky. Se la fattorizzazione di Cholesky fallisce, MATLAB esegue una fattorizzazione simmetrica e indefinita. Se A è Hessenberg superiore, MATLAB utilizza l'eliminazione gaussiana per ridurre il sistema a una matrice triangolare. Se A è quadrato ma non è né permutato triangolare, simmetrico e positivo definito, né Hessenberg, MATLAB esegue una fattorizzazione triangolare generale usando la fattorizzazione LU con pivot parziale

linsolve per matrici quadrate: fattorizzazione LU con pivot parziale

mldividee linsolveper matrici rettangolari: fattorizzazione QR

linsolveoptsUN

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

XUNopts

Se alcuni criteri sono soddisfatti linsolvee mldivideutilizzano lo stesso processo di fattorizzazione. Ad esempio, per un sistema definito positivo denso che soddisfa determinate proprietà, oppure si dispone di un sistema sovradeterminato ed entrambi eseguono un adattamento meno quadrato.

Inoltre, linsolvepotrebbe anche eseguire calcoli simbolici . Ciò è utile quando si dispone di un piccolo sistema sottodeterminato che ha un numero infinito di soluzioni. linsolveti consente di risolverlo simbolicamente, mldividenon puoi farlo. Tuttavia, se le variabili non sono dichiarate simbolicamente mldividee linsolvedarebbero lo stesso messaggio di avviso "Matrix è singolare per la precisione di lavoro".

Ultimo ma non meno importante, linsolvenon supporta sistemi sparsi come la seguente matrice (punto blu significa immissione diversa da zero). Mentre mldividepotrebbe gestire sistemi sparsi in modo robusto quando la dimensione è inferiore a 200k per 200k. esempio scarso

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.