Algoritmo efficiente per il calcolo dell'inversa di una matrice

userfisica
Che algoritmo utilizza matlab per effettuare un'inversa di matrice?
Penso che il metodo dei cofattori sia molto lento, non credo utilizzi questo matlab,... ho letto qualcosa sulla decomposizione LUP, ma non so se fa al caso mio, ovvero vorrei conoscere un metodo per effettuare tale operazione in maniera efficiente.

Risposte
garnak.olegovitc1
@userfisica,

"userfisica":
Che algoritmo utilizza matlab per effettuare un'inversa di matrice?
Penso che il metodo dei cofattori sia molto lento, non credo utilizzi questo matlab,... ho letto qualcosa sulla decomposizione LUP, ma non so se fa al caso mio, ovvero vorrei conoscere un metodo per effettuare tale operazione in maniera efficiente.


semplice curiosità, di che ordine parliamo? \(5000\)? :)

Saluti

userfisica
@garnak:

su per giù si, di certo non di meno :!:

apatriarca
Hai ragioni per ritenere che matlab sia troppo lento a risolvere il tuo problema? In generale invertire una matrice è una pessima idea e ci sono metodi più efficienti e robusti per risolvere la maggior parte dei problemi risolvibili invertendo una qualche matrice.

userfisica
"apatriarca":
Hai ragioni per ritenere che matlab sia troppo lento a risolvere il tuo problema? In generale invertire una matrice è una pessima idea e ci sono metodi più efficienti e robusti per risolvere la maggior parte dei problemi risolvibili invertendo una qualche matrice.


non sto dicendo che matlab è lento, anzi il il contrario e vorrei sapere che algoritmo utilizza matlab dietro le quinte dato che la risoluzione mediante calcolo determinante e cofattori è un'operazione molto dispendiosa..
io dovrei risolvere un sistema di equazioni lineari, che approccio potrei utilizzare?

garnak.olegovitc1
uso MATLAB per poche cose (per scemenze a dire il vero), non sono un esperto.. però dal link che ho segnalato leggo chiaramente, e non vorrei sbagliare a leggere, che l'algoritmo che usa è il classico \(\text{MEG}=\text{Metodo di eliminazione di Gauss}\) e questo già dovrebbe rendere il calcolo dell'inversa moolto più veloce[nota]concetto da me inteso intuitivamente nel senso di "numero di passaggi"...[/nota] del "Metodo dei cofattori".. ma ripeto ancora, "sono ignorante nel campo e potrei dire delle scemenze" anche se dal corso di algebra un docente, il caso vuole che insegnava algebra computazionale[nota]spero c'entri qualcosa :roll:[/nota], disse che così era.. :-)

Saluti

userfisica
@garnak

Non avevo fatto caso che avevi postato un link prima... ora do' un'occhiata! :D

garnak.olegovitc1
@userfisica,

"userfisica":
@garnak

Non avevo fatto caso che avevi postato un link prima... ora do' un'occhiata! :D


:roll: :roll: pardon, in effetti l'avevo camuffatto nel numero 5000 scritto per altro in \(\LaTeX \).. :smt043

Saluti

dissonance
Anche io non ci capisco pressoché niente di algebra lineare computazionale. Tuttavia, so che risolvere un sistema di equazioni lineari invertendo la matrice dei coefficienti è il classico esempio negativo che viene fatto in tutti i corsi di calcolo numerico. Gli algoritmi interni di MATLAB certamente non risolvono così un sistema di equazioni lineari. Se non ricordo male, per risolvere il sistema $Ax=b$ con MATLAB è sufficiente scrivere
x=A\b

poi se la vede lui ed è piuttosto efficiente. Link:

http://www.mathworks.fr/moler/chapters.html

garnak.olegovitc1
@dissonance,

"dissonance":
Se non ricordo male, per risolvere il sistema $Ax=b$ con MATLAB è sufficiente scrivere
x=A\b

poi se la vede lui ed è piuttosto efficiente.

da poco smanetto con MATLAB e posso dire oltre, a ciò che hai detto, che un altro comando è

x = mldivide(A,B)

nel corso, di base[nota]in verità "terra terra"[/nota], per MATLAB che ho seguito si parlava, moolto superficialmente, di altre funzioni[nota]per fortuna mia non trattate al corso[/nota] linkado alla pagina:


da qui in poi però non saprei che pesci prendere, ergo libero il posto a chi ne sa più di me!!! :-D

Saluti

vict85
MATLAB è abbastanza efficiente rispetto ad una implementazione naif ma non so quanto sfrutti l'accelerazione grafica (specialmente senza il parallel computing toolbox). Di fatto la sua efficienza consiste nell'utilizzare librerie esterne molto buone. Per questa ragione non risulta molto più veloce di python o alternative opensource.

Detto questo non penso matlab sia ottimizzato per matrici di grandi dimensioni. Ed è comunque probabile che MATLAB usi algoritmi diversi a seconda del tipo di matrice (per matrici sparse per esempio usi algoritmi diversi).

Moltre decomposizioni possono essere usate per calcolare l'inversa come la LU (eventualmente con pivoting parziale) e la QR. E per particolari tipi di matrici esistono metodi diretti.

In ogni caso l'inversa è una operazione che generalmente si cerca di evitare.

apatriarca
In matlab (e in molte altre applicazioni) viene utilizzata LAPACK: una libreria in fortran che implementa in modo efficiente molti algoritmi di uso comune (come la risoluzione di sistemi lineari con matrici di diverse caratteristiche). Esistono implementazioni open-source e commerciali e può essere usata in diversi linguaggi. Numpy può ad esempio essere compilata in modo da usare una di queste librerie. In generale, a meno di volersi specializzare nell'implementazione di tali algoritmi, conviene rifarsi a queste librerie di larga diffusione e utilizzo.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.