Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include "task3.h"
- #include <math.h>
- double *inv(const int N, const double *M);
- double formula(const int i, const int j);
- int main(){
- FILE *f = fopen("matrix.txt", "r");
- // FILE *g = fopen("matrix.txt", "w");
- int i,j,k,q,N,NN, zero_marker;
- double *matrix, *inverse, *AA, *AAmod,*matrix1mod, *matrix1, norm_infinite, norm_mod_infinite, norm_1, norm_mod_1, x1, x2, y1, y2 ;
- // double *inverse1, *inverse1mod;
- fscanf (f, "%d", &N);
- printf ("%d\n", N);
- matrix = (double*) malloc(N*N*sizeof(double));
- inverse = (double*) malloc(N*N*sizeof(double));
- // adjoint = (double*) malloc(2*N*N*sizeof(double));
- for(i = 0; i != N; ++i){
- for(j = 0; j != N; ++j){
- fscanf (f, "%lf", &matrix[i*N+j]);
- printf("%f ",matrix[i*N+j]);
- }
- j=0;
- printf("\n");
- }
- printf("\n");
- zero_marker = 1;
- i=0;
- j=0;
- for(i = 0; i != N; ++i){
- for(j = 0; j != N; ++j){
- inverse[i*N+j]=inv(N,matrix)[i*N+j];
- if((inverse[i*N+j]<0) || (inverse[i*N+j]>0)){
- zero_marker = 0;
- }
- }
- j=0;
- }
- if(zero_marker == 1){
- printf("Bad matrix\n");
- return 0;
- }
- for(i = 0; i != N; ++i){
- for(j = 0; j != N; ++j){
- printf("%f ",inverse[i*N+j]);
- }
- printf("\n");
- j=0;
- }
- NN=1;
- for(q=0; q<=3; ++q){
- zero_marker = 1;
- for(i=0;i<q;++i){
- NN=NN+10;
- }
- matrix1 = (double*) malloc(NN*NN*sizeof(double));
- matrix1mod = (double*) malloc(NN*NN*sizeof(double));
- // inverse1 = (double*) malloc(NN*NN*sizeof(double));
- // inverse1mod = (double*) malloc(NN*NN*sizeof(double));
- AA = (double*) malloc(NN*NN*sizeof(double));
- AAmod = (double*) malloc(NN*NN*sizeof(double));
- for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- matrix1[i*NN+j]=formula(i,j);
- matrix1mod[i*NN+j]=formula(i,j);
- if(i==j){
- matrix1[i*NN+j]=matrix1[i*NN+j]-1;
- }
- }
- j=0;
- }
- i=0;
- j=0;
- /* for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- fprintf(g, "\n\n i = %d, j = %d\n\n", &i,&j);
- inverse1[i*NN+j]=inv(NN,matrix1)[i*NN+j];
- inverse1mod[i*NN+j]=inv(NN,matrix1mod)[i*NN+j];
- if((inverse1[i*NN+j]<0) || (inverse1[i*NN+j]>0)){
- zero_marker = 0;
- }
- }
- j=0;
- }*/
- // printf("N = %d\n", NN);
- for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- AA[i*NN+j]=0;
- AAmod[i*NN+j]=0;
- }
- }
- for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- for(k = 0; k != NN; ++k){
- AA[i*NN+j]=AA[i*NN+j]+inv(NN,matrix1)[i*NN+k]*matrix1[k*NN+j];
- AAmod[i*NN+j]=AAmod[i*NN+j]+inv(NN,matrix1mod)[i*NN+k]*matrix1mod[k*NN+j];
- }
- if((inv(NN,matrix1)[i*NN+j]<0) || (inv(NN,matrix1)[i*NN+j]>0)){
- zero_marker = 0;
- }
- }
- }
- for(i = 0; i != NN; ++i){
- AA[i*NN+i]=AA[i*NN+i]-1;
- AAmod[i*NN+i]=AAmod[i*NN+i]-1;
- }
- printf("N = %d, zero_marker = %d\n", NN, zero_marker);
- if(zero_marker == 1){
- printf("Bad matrix\n");
- }
- norm_infinite = 0;
- norm_mod_infinite = 0;
- norm_1 = 0;
- norm_mod_1 = 0;
- x1 = 0; y1 = 0;
- x2 = 0; y2 = 0;
- /* for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- if(fabs(AA[i*NN+j])>norm_infinite){
- norm_infinite = fabs(AA[i*NN+j]);
- }
- if(fabs(AA[i*NN+j])>norm_mod_infinite){
- norm_mod_infinite = fabs(AA[i*NN+j]);
- }
- norm_1 = norm_1 + fabs(AA[i*NN+j]);
- norm_mod_1 = norm_mod_1 + fabs(AAmod[i*NN+j]);
- }
- }*/
- for(i = 0; i != NN; ++i){
- for(j = 0; j != NN; ++j){
- x1 = x1+fabs(AA[i*NN+j]);
- x2 = x2+fabs(AAmod[i*NN+j]);
- }
- if(norm_infinite<x1){
- norm_infinite = x1;
- }
- if(norm_mod_infinite<x2){
- norm_mod_infinite = x2;
- }
- x1=0;
- x2=0;
- }
- for(j = 0; j != NN; ++j){
- for(i = 0; i != NN; ++i){
- y1 = y1+fabs(AA[i*NN+j]);
- y2 = y2+fabs(AAmod[i*NN+j]);
- }
- if(norm_infinite<y1){
- norm_1 = y1;
- }
- if(norm_mod_infinite<y2){
- norm_mod_1 = y2;
- }
- y1=0;
- y2=0;
- }
- 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);
- NN = 1;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement