Anterior

Procedimientos numéricos

Valores y vectores propios (Método de Jacobi)

Este ejemplo es similar al de la página Oscilaciones de una cadena monoatómica lineal

//Valores y vectores propios de la matriz  M
          
void calculaValores_vectores(int N, double k2){
      iModo=0;
      double[] k=new double[N+1];
      double[] m=new double [N+1];
      for(int i=0; i<k.length; i++){
          if(i%2==0) k[i]=1.0;
          else k[i]=k2;
          m[i]=1.0;
      }
      double[][] matrix=new double[N][N];
      for(int i=0; i<N; i++)
          for(int j=0; j<N; j++)
              matrix[i][j]=0.0;

      matrix[0][0]=(k[0]+k[1])/m[1];
      matrix[0][1]=-k[1]/m[1];
      for(int i=1; i<N-1; i++){
          matrix[i][i-1]=-k[i]/m[i+1];
          matrix[i][i]=(k[i]+k[i+1])/m[i+1];
          matrix[i][i+1]=-k[i+1]/m[i+1];
      }
      matrix[N-1][N-1]=(k[N-1]+k[N])/m[N];
      matrix[N-1][N-2]=-k[N-1]/m[N];
      valores=new double[N];
      vectores=new double[N][N];
      Jacobi.calcula(matrix, N, valores, vectores);
      ordenar(valores, vectores);  
System.out.println("****************** ordenados *******************");
      for(int i=0; i<N; i++){
          System.out.print(valores[i]+"\t");
      }
      System.out.println();
      for(int i=0; i<N; i++){
            System.out.println();
            for(int j=0; j<N; j++)
                System.out.print(vectores[i][j]+"\t");
      }   
  }
Anterior