Olá! a minha irmã está com alguma dificuldade em entender o que fazem estes ciclos(1),(2) e (3) isto é um excerto de um programa para calcular sistemas de equações lineares. … qual a diferença entre o (1) e o (2) , o que é que faz cada um deles ?! percorrem as posições todas da matriz ?
[code]public static double[] solving(double matrix[][], double b[], int auxiliar[]) {
int n = b.length;
double x[] = new double[n];
calc(matrix, auxiliar);
for(int i=0; i<n-1; ++i) {
for(int j =i+1; j<n; ++j) {
b[auxiliar[j]] -= matrix[auxiliar[j]][i]*b[auxiliar[i]];
}
}
// (3)
x[n-1] = b[auxiliar[n-1]]/matrix[auxiliar[n-1]][n-1];
for (int i=n-2; i>=0; --i) {
x[i] = b[auxiliar[i]];
for (int j=i+1; j<n; ++j) {
x[i] -= matrix[auxiliar[i]][j]*x[j];
}
x[i] /= matrix[auxiliar[i]][i];
}
return x;
}
public static void calc(double matrix[][],int auxiliar[]) {
int n = auxiliar.length;
double c[] = new double[n];
// (1)
for (int i=0; i<n; ++i) auxiliar[i] = i;
for (int i=0; i<n; ++i) {
double c1 = 0;
for (int j=0; j<n; ++j) {
double c0 = Math.abs(matrix[i][j]);
if (c0 > c1) c1 = c0;
}
c[i] = c1;
}
// (2)
int k = 0;
for (int j=0; j<n-1; ++j) {
double pi1 = 0;
for (int i=j; i<n; ++i) {
double pi0 = Math.abs(matrix[auxiliar[i]][j]);
pi0 /= c[auxiliar[i]];
if (pi0 > pi1) {
pi1 = pi0;
k = i;
}
}
int temp = auxiliar[j];
auxiliar[j] = auxiliar[k];
auxiliar[k] = temp;
for (int i=j+1; i<n; ++i) {
double pj = matrix[auxiliar[i]][j]/matrix[auxiliar[j]][j];
matrix[auxiliar[i]][j] = pj;
for (int l=j+1; l<n; ++l)
matrix[auxiliar[i]][l] -= pj*matrix[auxiliar[j]][l];
}
}[/code]
MUITO OBRIGADO