home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / CPROG / ANUMR5.ZIP / EGNTPOWR.C < prev    next >
C/C++ Source or Header  |  1991-04-03  |  2KB  |  100 lines

  1. /* OK */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <mem.h>
  7. #include <alloc.h>
  8. #include <conio.h>
  9. #include <dos.h>
  10.  
  11.  
  12. #include "anum.h"
  13. #include "sysio.h"
  14.  
  15. #define MAXDIM 8
  16.  
  17.  
  18.  
  19. void affmat(int dim, double *matrix)
  20.  
  21.  
  22. {    register int i,j;
  23.  
  24.     for (i=0;i<dim;i++)
  25.     {    for (j=0;j<dim;j++) printf("% 6lg ",*(matrix+i*dim+j));
  26.         putchar('\n');
  27.     }
  28. }
  29.  
  30.  
  31. void affvect(int dim, double *v)
  32.  
  33. {    register int i;
  34.  
  35.     for (i=0; i<dim; i++)
  36.     {    printf("% lf ",*(v+i));
  37.         if ((i+1)%6==0) putchar('\n');
  38.     }
  39.     putchar('\n');
  40. }
  41.  
  42.  
  43.  
  44. void results(int dim, double valp, double *vectp, int errcode, int iter)
  45.  
  46. {       gotoxy(1,11);
  47.     SYSMSG(errcode,stderr);
  48.     gotoxy(1,18);
  49.     printf("\nEigen value : %lf\n",valp);
  50.     puts("Eigen vector :");
  51.     affvect(dim,vectp);
  52.     printf("Iteration number : %d\n",iter);
  53.     printf("Core left : %ld bytes.\n",farcoreleft());
  54. }
  55.  
  56.  
  57.  
  58.  
  59. void main(void)
  60.  
  61.  
  62. {    double *matrix,*vect0,tol,valp,*vectp;
  63.     int dim,i,j,errcode,maxiter,iter;
  64.  
  65.     tol=1e-10;
  66.     maxiter=200;
  67.  
  68.     clrscr();
  69.     printf("Test program for function eigen_power\n");
  70.     sleep(2);
  71.     for (dim=1;dim<=MAXDIM;dim++)
  72.     {    matrix=farcalloc(dim*dim,sizeof(double));
  73.         vect0=farcalloc(dim,sizeof(double));
  74.         vectp=farcalloc(dim,sizeof(double));
  75.  
  76.         for (i=0;i<dim;i++)
  77.             for(j=0;j<dim;j++)
  78.                 *(matrix+i*dim+j)=(double)(rand()%100)-50;
  79.  
  80.         for (i=0;i<dim;i++) *(vectp+i)=1.0/((double)(rand()%1000+1));
  81.  
  82.         clrscr();
  83.         printf("Matrix order : %d\n",dim);
  84.         affmat(dim,matrix);
  85.  
  86.  
  87.         eigen_power(dim,matrix,vect0,maxiter,tol,&valp,
  88.             vectp,&iter,&errcode);
  89.  
  90.         results(dim,valp,vectp,errcode,iter);
  91.         delay(4000);
  92.         farfree(matrix);
  93.         farfree(vect0);
  94.         farfree(vectp);
  95.     }
  96. }
  97.  
  98.  
  99.  
  100.