home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c129 / 1.ddi / MATMATHD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-25  |  3.1 KB  |  128 lines

  1. # include <math.h>
  2. # include "complex.h"
  3. # include "matmath.h"
  4. # include <stdio.h>
  5.  
  6.  
  7. float mat1[3][3];
  8. float mat2[3][3];
  9. float mat3[3][3];
  10. float vec1[100];
  11. int order;
  12. float det;
  13. float vm;
  14. char err;
  15. int i;
  16. int j;
  17. int k;
  18. char message[80];
  19.  
  20. float a[4][4];
  21. float ev[4][4];
  22. float eigenvalues[4];
  23.  
  24. int n;
  25. int count;
  26. char success;
  27. char c;
  28.  
  29.  
  30.  
  31.  
  32. main()
  33. {
  34.  
  35.    mat1[0][0] = 13.0;
  36.    mat1[0][1] = -8.0;
  37.    mat1[0][2] = -3.0;
  38.    mat1[1][0] = -8.0;
  39.    mat1[1][1] = 10.0;
  40.    mat1[1][2] = -1.0;
  41.    mat1[2][0] = -3.0;
  42.    mat1[2][1] = -1.0;
  43.    mat1[2][2] = 11.0;
  44.  
  45.    mat2[0][0] = 1.0;
  46.    mat2[0][1] = 5.0;
  47.    mat2[0][2] = 1.0;
  48.    mat2[1][0] = 3.0;
  49.    mat2[1][1] = 6.0;
  50.    mat2[1][2] = 3.0;
  51.    mat2[2][0] = 0.0;
  52.    mat2[2][1] = 1.0;
  53.    mat2[2][2] = -9.0;
  54.    MatProd(&mat1[0][0],&mat2[0][0],3,3,3,&mat3[0][0]);
  55.    strcpy(message, "matrix product mat1 x mat2 = ");
  56.    MatPrint(&mat3[0][0],3,3,message);
  57.    printf("press carriage return to advance to next procedure \n");
  58.    c = getch();
  59.    printf("\n");
  60.    vm = 11;
  61.    MatScalarProd(&mat1[0][0],vm,3,3,&mat3[0][0]);
  62.    printf("%s %8.3f\n", message, vm);
  63.    printf("\n");
  64.    strcpy( message, "matrix scaler product mat1 x ");
  65.    MatPrint(&mat3[0][0],3,3,message);
  66.    printf( "press carriage return to advance to next procedure \n");
  67.    c = getch();
  68.    printf("\n");
  69.    MatAdd(&mat1[0][0],&mat2[0][0],3,3,&mat3[0][0]);
  70.    strcpy( message,  "matrix add mat1 + mat 2 = ");
  71.    MatPrint(&mat3[0][0],3,3,message);
  72.    printf("press carriage return to advance to next procedure \n");
  73.    c = getch();
  74.    printf("\n");
  75.    MatTranspose(&mat1[0][0],3,3,&mat3[0][0]);
  76.    strcpy( message,  "matrix transpose of mat1  = ");
  77.    MatPrint(&mat3[0][0],3,3,message);
  78.    printf( "press carriage return to advance to next procedure \n");
  79.    c = getch();
  80.    printf("\n");
  81.    det = MatDeter(&mat1[0][0],3);
  82.    printf("determinant of matrix mat1 = %10.3f\n", det);
  83.    printf("\n");
  84.    printf("press carriage return to advance to next procedure \n");
  85.    c = getch();
  86.    printf("\n");
  87.    MatInvert(&mat1[0][0],3,&det,&mat3[0][0]);
  88.    strcpy( message, "inverse of matrix mat1  = ");
  89.    MatPrint(&mat3[0][0],3,3,message);
  90.    printf( "determinant of matrix mat1 = %10.3f\n", det);
  91.    printf("\n");
  92.  
  93.    printf("%s\n", "press carriage return to begin Jacobi Demo ");
  94.    c = getch();
  95.    printf("\n");
  96.    n = 4;
  97.    a[0][0] = 5.0;
  98.    a[0][1] = 4.0;
  99.    a[0][2] = 1.0;
  100.    a[0][3] = 1.0;
  101.    a[1][0] = 4.0;
  102.    a[1][1] = 5.0;
  103.    a[1][2] = 1.0;
  104.    a[1][3] = 1.0;
  105.    a[2][0] = 1.0;
  106.    a[2][1] = 1.0;
  107.    a[2][2] = 4.0;
  108.    a[2][3] = 2.0;
  109.    a[3][0] = 1.0;
  110.    a[3][1] = 1.0;
  111.    a[3][2] = 2.0;
  112.    a[3][3] = 4.0;
  113.  
  114.    count = 10;
  115.    CyclicJacobi(&a[0][0],n,&eigenvalues[0],&ev[0][0],&count,&success);
  116.    NormalizeEigenVectors(&ev[0][0],n);
  117.    printf("Success %d\n", success);
  118.    for ( i = 0; i <= n-1; ++i ) {
  119.       printf("Eigenvalue %d = %8.3f\n", i, eigenvalues[i]);
  120.       printf("Eigenvector %d = ",  i);
  121.       for ( j = 0; j <= n-1; ++j ) {
  122.          printf("%12.6f", ev[j][i]);
  123.       }
  124.       printf("\n");
  125.    }
  126.    printf("Count %d\n",  count);
  127. }
  128.