Métodos!

0 respostas
V

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 ?

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];
      }
    }

MUITO OBRIGADO :wink:

Criado 27 de janeiro de 2007
Respostas 0
Participantes 1