Advertisement
luizaspan

Autovalores molas acopladas (pontas abertas)

Sep 18th, 2015
373
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.06 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define N 100
  5.  
  6. #define A {{1,4,8,4},{4,2,3,7},{8,3,6,9},{4,7,9,2}}
  7.  
  8.  
  9. multmatrix(int n, double x[n][n],double y[n][n],double result[n][n]){
  10.   int i,j,k;
  11.   double soma;
  12.  
  13.   for(i=0;i<n;i++){
  14.     for(j=0;j<n;j++){
  15.       soma=0.0;
  16.       for(k=0;k<n;k++)
  17.         soma += x[i][k]*y[k][j];
  18.       result[i][j]=soma;
  19.     }
  20.   }
  21.  
  22. }
  23.  
  24. imprime(int n, double x[n][n]){
  25.   int i,j;
  26.  
  27.   for(i=0; i<n; i++){
  28.     for(j=0; j<n; j++)
  29.       printf("%5.2f\t",x[i][j]);
  30.     printf("\n");
  31.   }
  32.   printf("\n\n");
  33. }
  34.  
  35.  
  36. QRdecomp(int n, double a[n][n], double q[n][n], double r[n][n]){
  37.   int i,j,k;
  38.   double u[n],prod,norm;
  39.  
  40. // ui = ai - sum_j<i (qj·ai) qj
  41.   for(i=0;i<n;i++){
  42.  
  43.     for(k=0;k<n;k++)
  44.       u[k] = a[k][i];
  45.  
  46.     for(j=0;j<i;j++){
  47. //produto escalar (qj·ai)
  48.       prod=0.0;
  49.       for(k=0;k<n;k++)
  50.         prod += q[k][j]*a[k][i];
  51.  
  52.       r[j][i] = prod;
  53.  
  54.       for(k=0;k<n;k++)
  55.         u[k] -= prod*q[k][j];
  56.     }
  57.  
  58. //qi = ui/|ui|    
  59.     norm=0.0;
  60.     for(k=0;k<n;k++)
  61.       norm += u[k]*u[k];
  62.     norm = sqrt(norm);
  63.  
  64.     r[i][i] = norm;
  65.  
  66.     for(k=0;k<n;k++)  
  67.       q[k][i]=u[k]/norm;
  68.   }
  69.  
  70. }
  71.  
  72.  
  73. main(){
  74.   int i,j,k;
  75.   double a[N][N]={{0}};
  76.   double q[N][N],r[N][N]={0};
  77.   double v[N][N]={0},temp[N][N];
  78.   double epsilon=1.0e-2;
  79.  
  80.   for(k=0;k<N;k++)
  81.     v[k][k]=1.0;
  82.  
  83.   double kappa=6,w=2,alpha=2*kappa;
  84.  
  85.   for(i=0;i<N-1;i++){
  86.     a[i][i]=alpha;
  87.     a[i][i+1]= a[i][i-1] = -kappa;
  88.   }
  89.  
  90.   i=0;   a[i][i]=alpha-kappa; a[i][i+1]=-kappa;
  91.   i=N-1; a[i][i]=alpha-kappa; a[i][i-1]=-kappa;
  92.  
  93.   imprime(N,a);
  94.  
  95.   do{
  96.     QRdecomp(N,a,q,r);
  97.  
  98.     multmatrix(N,r,q,a);
  99.     multmatrix(N,v,q,r);
  100.  
  101.     for(i=0;i<N;i++){
  102.       for(k=0;k<N;k++){
  103.         v[i][k]=r[i][k];
  104.         r[i][k]=0.0;
  105.       }
  106.     }
  107.  
  108.     // imprime(N,a);
  109.     // imprime(N,v);
  110.  
  111.     // getchar();
  112.  
  113.   }while(fabs(a[0][1])>epsilon);
  114.  
  115.   for (int i = 0; i < N; ++i)
  116.   {
  117.     printf("%d %f\t", i, fabs(a[i][i]));
  118.     for (int j = 0; j < N; ++j)
  119.     {
  120.       printf("%f ", v[i][j]);
  121.     }
  122.     printf("\n");
  123.   }
  124.  
  125. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement