Advertisement
Guest User

Untitled

a guest
Oct 17th, 2017
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "task3.h"
  4. #include <math.h>
  5.  
  6. double *inv(const int N, const double *M);
  7. double formula(const int i, const int j);
  8. int main(){
  9.         FILE *f = fopen("matrix.txt", "r");
  10. //        FILE *g = fopen("matrix.txt", "w");
  11.         int i,j,k,q,N,NN, zero_marker;
  12.         double *matrix, *inverse, *AA, *AAmod,*matrix1mod, *matrix1, norm_infinite, norm_mod_infinite, norm_1, norm_mod_1, x1, x2, y1, y2 ;
  13. //        double *inverse1, *inverse1mod;
  14.  
  15.         fscanf (f, "%d", &N);
  16.         printf ("%d\n", N);
  17.         matrix = (double*) malloc(N*N*sizeof(double));
  18.         inverse = (double*) malloc(N*N*sizeof(double));
  19. //        adjoint = (double*) malloc(2*N*N*sizeof(double));
  20.         for(i = 0; i != N; ++i){
  21.             for(j = 0; j != N; ++j){
  22.                 fscanf (f, "%lf", &matrix[i*N+j]);
  23.                 printf("%f ",matrix[i*N+j]);
  24.             }
  25.             j=0;
  26.             printf("\n");
  27.         }
  28.         printf("\n");
  29.  
  30.         zero_marker = 1;
  31.         i=0;
  32.         j=0;
  33.         for(i = 0; i != N; ++i){
  34.             for(j = 0; j != N; ++j){
  35.                 inverse[i*N+j]=inv(N,matrix)[i*N+j];
  36.                 if((inverse[i*N+j]<0) || (inverse[i*N+j]>0)){
  37.                     zero_marker = 0;
  38.                 }
  39.             }
  40.             j=0;
  41.         }
  42.  
  43.  
  44.         if(zero_marker == 1){
  45.             printf("Bad matrix\n");
  46.             return 0;
  47.         }
  48.  
  49.  
  50.         for(i = 0; i != N; ++i){
  51.             for(j = 0; j != N; ++j){
  52.                 printf("%f ",inverse[i*N+j]);
  53.             }
  54.             printf("\n");
  55.             j=0;
  56.         }
  57.  
  58.  
  59.  
  60.         NN=1;
  61.         for(q=0; q<=3; ++q){
  62.             zero_marker = 1;
  63.             for(i=0;i<q;++i){
  64.                 NN=NN+10;
  65.             }
  66.  
  67.  
  68.             matrix1 = (double*) malloc(NN*NN*sizeof(double));
  69.             matrix1mod = (double*) malloc(NN*NN*sizeof(double));
  70. //            inverse1 = (double*) malloc(NN*NN*sizeof(double));
  71. //            inverse1mod = (double*) malloc(NN*NN*sizeof(double));
  72.             AA = (double*) malloc(NN*NN*sizeof(double));
  73.             AAmod = (double*) malloc(NN*NN*sizeof(double));
  74.             for(i = 0; i != NN; ++i){
  75.                 for(j = 0; j != NN; ++j){
  76.                     matrix1[i*NN+j]=formula(i,j);
  77.                     matrix1mod[i*NN+j]=formula(i,j);
  78.                     if(i==j){
  79.                         matrix1[i*NN+j]=matrix1[i*NN+j]-1;
  80.                     }
  81.                 }
  82.                 j=0;
  83.             }
  84.  
  85.             i=0;
  86.             j=0;
  87. /*            for(i = 0; i != NN; ++i){
  88.                 for(j = 0; j != NN; ++j){
  89.             fprintf(g, "\n\n i = %d, j = %d\n\n", &i,&j);
  90.                     inverse1[i*NN+j]=inv(NN,matrix1)[i*NN+j];
  91.                     inverse1mod[i*NN+j]=inv(NN,matrix1mod)[i*NN+j];
  92.                     if((inverse1[i*NN+j]<0) || (inverse1[i*NN+j]>0)){
  93.                         zero_marker = 0;
  94.                     }
  95.                 }
  96.                 j=0;
  97.             }*/
  98.  
  99. //            printf("N = %d\n", NN);
  100.             for(i = 0; i != NN; ++i){
  101.                 for(j = 0; j != NN; ++j){
  102.                     AA[i*NN+j]=0;
  103.                     AAmod[i*NN+j]=0;
  104.                 }
  105.             }
  106.             for(i = 0; i != NN; ++i){
  107.                 for(j = 0; j != NN; ++j){
  108.                    for(k = 0; k != NN; ++k){
  109.                     AA[i*NN+j]=AA[i*NN+j]+inv(NN,matrix1)[i*NN+k]*matrix1[k*NN+j];
  110.                     AAmod[i*NN+j]=AAmod[i*NN+j]+inv(NN,matrix1mod)[i*NN+k]*matrix1mod[k*NN+j];
  111.                     }
  112.                    if((inv(NN,matrix1)[i*NN+j]<0) || (inv(NN,matrix1)[i*NN+j]>0)){
  113.                        zero_marker = 0;
  114.                    }
  115.                 }
  116.             }
  117.             for(i = 0; i != NN; ++i){
  118.                     AA[i*NN+i]=AA[i*NN+i]-1;
  119.                     AAmod[i*NN+i]=AAmod[i*NN+i]-1;
  120.             }
  121.  
  122.             printf("N = %d, zero_marker = %d\n", NN, zero_marker);
  123.  
  124.             if(zero_marker == 1){
  125.                 printf("Bad matrix\n");
  126.             }
  127.  
  128.             norm_infinite = 0;
  129.             norm_mod_infinite = 0;
  130.             norm_1 = 0;
  131.             norm_mod_1 = 0;
  132.             x1 = 0; y1 = 0;
  133.             x2 = 0; y2 = 0;
  134. /*            for(i = 0; i != NN; ++i){
  135.                 for(j = 0; j != NN; ++j){
  136.                     if(fabs(AA[i*NN+j])>norm_infinite){
  137.                             norm_infinite = fabs(AA[i*NN+j]);
  138.                     }
  139.                     if(fabs(AA[i*NN+j])>norm_mod_infinite){
  140.                             norm_mod_infinite = fabs(AA[i*NN+j]);
  141.                     }
  142.                     norm_1 = norm_1 + fabs(AA[i*NN+j]);
  143.                     norm_mod_1 = norm_mod_1 + fabs(AAmod[i*NN+j]);
  144.                 }
  145.             }*/
  146.             for(i = 0; i != NN; ++i){
  147.                             for(j = 0; j != NN; ++j){
  148.                                 x1 = x1+fabs(AA[i*NN+j]);
  149.                                 x2 = x2+fabs(AAmod[i*NN+j]);
  150.                             }
  151.                             if(norm_infinite<x1){
  152.                                 norm_infinite = x1;
  153.                             }
  154.                             if(norm_mod_infinite<x2){
  155.                                 norm_mod_infinite = x2;
  156.                             }
  157.                             x1=0;
  158.                             x2=0;
  159.             }
  160.             for(j = 0; j != NN; ++j){
  161.                             for(i = 0; i != NN; ++i){
  162.                                 y1 = y1+fabs(AA[i*NN+j]);
  163.                                 y2 = y2+fabs(AAmod[i*NN+j]);
  164.                             }
  165.                             if(norm_infinite<y1){
  166.                                 norm_1 = y1;
  167.                             }
  168.                             if(norm_mod_infinite<y2){
  169.                                 norm_mod_1 = y2;
  170.                             }
  171.                             y1=0;
  172.                             y2=0;
  173.             }
  174.  
  175.             printf("N = %d \n max_i = %f \n max_i_mod = %f \n max_j = %f \n max_j_mod = %f \n\n\n", NN, norm_infinite, norm_mod_infinite, norm_1, norm_mod_1);
  176.             NN = 1;
  177.  
  178.         }
  179.  
  180.  
  181.  
  182.     return 0;
  183.  
  184.  
  185.  
  186.  
  187. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement