Discussione: [Java]Matrici inverse
View Single Post
Old 27-02-2010, 17:59   #1
n0n4m3
Member
 
Iscritto dal: Oct 2006
Messaggi: 136
[Java]Matrici inverse

salve a tutti...qualche giorno fa mi sono imbattuto in un problema: inversione di matrici.

a prima vista la cosa sembrava fattibile, avrei usato il metodo di gauss-jordan, ma ora mi trovo bloccato proprio quasi all'inizio. vi espongo il problema: il metodo gauss-jordan (nel caso non lo conosceste) parte semplicemente dal fatto di accostare la matrice che si vuole invertire a quella identità (della stessa grandezza ovviamente) e dunque, tramite operazioni elementari sulle linee di questa "doppia matrice" arrivare ad avere la matrice identità nella prima metà e cio' che si ottiene nella seconda metà sarà poi la matrice inversa che stavamo cercando. come prima cosa dunque bisogna triangolare la matrice iniziale in modo da mettere degli 0 al di sotto della "diagonale" (non è una vera e propria diagonale, potrebbe benissimo essere una scala non regolare) da sinistra a destra e poi risalire da destra a sinistra con lo stesso metodo mettendo degli zeri al di sopra della diagonale. il problema sorge qui: come faccio a trovare il pivot non conoscendo la grandezza della matrice? cioè, ok, il primo si trova in alto a sinistra (se c'è uno 0 allora si invertono due linee e la cosa è a posto) ma poi come faccio a dirgli "ok, hai trovato il primo, bravissimo...ora metti degli zeri sotto e cercami il secondo"??

ecco il pezzo di codice che ho già scritto:

Codice:
public static int findPivot(int[][] mat)
	{
		int pivot = 0;
		
		for(int i = 0; i < mat.length; i++)
		{
			for(int j = 0; j < mat[0].length; j++)
			{
				if(mat[j][i] != 0)
				{
					pivot = mat[j][i];
				}
			}
		}
		
		return pivot;
	}
come vedete questo comincia col cercare nella prima colonna se c'è il pivot...ma nel caso in cui si trovi nella seconda riga?? e nel caso in cui venga trovato, come faccio poi a dirgli che avendo trovato il primo ora deve cercare il secondo nella seconda colonna?

es:
Codice:
1 2 3 1 0 0
1 4 7 0 1 0
1 6 8 0 0 1

ok, primo pivot = 1; mettiamo zero al di sotto

1 2 3  1 0 0
0 2 4 -1 1 0
0 4 5  0 0 1

secondo pivot = 2; mettiamo zero sotto (ecco, qui come gli dico non prendermi il primo due che sta sulla prima riga e seconda colonna, bensi quello alla seconda riga e seconda colonna???)

1 2 3    1 0 0
0 2 4   -1 1 0
0 0 -3   0 -2 1

Ultima modifica di n0n4m3 : 27-02-2010 alle 18:06.
n0n4m3 è offline   Rispondi citando il messaggio o parte di esso