Algortimo matrice INVERSA funzionante
Ciao a tutti. Prima di pubblicare l'intero codice (che funziona) vi spiego il mio problema, che è più di teoria che di codice.
Allora per calcolare la matrice inversa di una generica matrica A di ordine n i passi che seguo nel mio algoritmo sono i seguenti:
* inizializzo una matrice \(\displaystyle I \) a matrice identica;
* effettuo la fattorizzazione \(\displaystyle LU \) di A;
* calcolo il determinante per capire se la matrice è o meno singolare;
* se A non è singolare procedo con il calcolo dell'inversa in questo modo:
A questo punto non capisco. Ripeto, il codice funziona, mi sono basata su una bozza del libro e funziona. Quello che non riesco a capire è proprio il significato del codice! La parte cui mi riferisco è questa
Non riesco a capire tutti quei ciclio for innestati (B sarà l'inversa di A).
Qualcuno può spiegarmeli? Grazie!
Allora per calcolare la matrice inversa di una generica matrica A di ordine n i passi che seguo nel mio algoritmo sono i seguenti:
* inizializzo una matrice \(\displaystyle I \) a matrice identica;
* effettuo la fattorizzazione \(\displaystyle LU \) di A;
* calcolo il determinante per capire se la matrice è o meno singolare;
* se A non è singolare procedo con il calcolo dell'inversa in questo modo:
{for(k=0;k<n;k++) {for(j=0;j<n;j++) e[j]=I[k][j]; /* e è il jesimo versore della base canonica*/ forlu(n, ipiv, A, y, e); /*considero il sistema Ay=e */ backlu(A, y, n, x, ipiv); /*La soluzione x di tale sistema è la jesima colonna della matrice inversa di A */ {for(j=0;j<n;j++) if(j==k) {for(i=0;i<n;i++) for(j=0;j<n;j++) if(j==k) B[i][k]=x[i]; }; }; }; };
A questo punto non capisco. Ripeto, il codice funziona, mi sono basata su una bozza del libro e funziona. Quello che non riesco a capire è proprio il significato del codice! La parte cui mi riferisco è questa
{for(j=0;j<n;j++) if(j==k) {for(i=0;i<n;i++) for(j=0;j<n;j++) if(j==k) B[i][k]=x[i]; };
Non riesco a capire tutti quei ciclio for innestati (B sarà l'inversa di A).
Qualcuno può spiegarmeli? Grazie!
Risposte
Mi sembra che, una volta raccolto il vettore $ x$ lo metta semplicemente al suo posto nella matrice inversa $\mathbb B.$, e per trovare il posticino giusto dove mettere $x(i)$ faccia due cicli, uno per sapere in che colonna vada ed uno per sapere che elementino $i-esimo$ si sta cercando di piazzare da $ x$ a $\mathbb B.$