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"); } } |