//implementa el metodo de eliminacion gaussiana con pivoteo // maximo por columna // m tiene filas y filas+1 columnas, la ultima es la extension long double* Simulador :: resolver(long double **matriz) { int filas = m->getTamanio()*m->getTamanio(); int n = filas; //nrow va a actuar como diccionario para no tener que hacer //intercambio real de los valores int *nrow = new int [ filas ]; for(int i = 0; i < filas; i ++) { nrow[ i ] = i; } int *ncol = new int [ filas ]; for(int i = 0; i < filas; i ++) { ncol[ i ] = i; } int p; for(int i = 0; i < filas - 1; i ++) { p = buscarMaximo(matriz, i, filas, nrow, ncol); if(matriz[ nrow[ p ] ][ ncol[i] ] == 0) { int c =buscarMaxCol(matriz,p,nrow,i,ncol, filas); if(c==i) { break; } if(ncol[ i ] != ncol[ c ] ) { int ncopy = ncol[ i ]; ncol[ i ] = ncol[ c ]; ncol[ c ] = ncopy; } p = buscarMaximo(matriz, i, filas, nrow, ncol); } if(nrow[ i ] != nrow[ p ] ) { int ncopy = nrow[ i ]; nrow[ i ] = nrow[ p ]; nrow[ p ] = ncopy; } for(int j = i + 1; j < filas ; j ++) { if(matriz[ nrow[ j ] ][ i ] != 0) { long double multiplicador = matriz[ nrow[ j ] ][ i ] / matriz[ nrow[ i ]][ i ]; for(int k = i; k <= filas; k ++) { matriz[ nrow[ j ] ][ k ] = matriz[ nrow[ j ] ][ k ] - multiplicador * matriz[ nrow[ i ] ][ k]; } } } } long double *x = new long double [filas]; long double *y = new long double [filas]; if(matriz[ nrow[ n - 1 ] ][ncol [n - 1] ] == 0) { if(matriz[nrow[n-1]][n] == 0) { x[n-1] = 1; cout<<"variable libre: "; cout<= 0; i --) { long double acum = 0; if( matriz[nrow[i]][ncol[i]] == 0) { if(matriz[nrow[i]][n] == 0) { x[i] = 1; cout<<"variable libre: "; cout<