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