⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject2.cpp

📁 本程序是应用数值分析对线性多元方程组的一种解法……高斯列主元消去法
💻 CPP
字号:
#include <stdio.h>
#include <math.h>

  void main()
{  int i=0,j=0,n=10,I,J,k,row,colum;
   float array[10][10],b[10],max;
   char c;
   double t=0,x[10];
   FILE *fp1,*fp2;
   fp1=fopen("source","w+");
   fprintf(fp1,"4 2 -3 -1 2 1 0 0 0 0 5\n");
   fprintf(fp1,"8 6 -5 -3 6 5 0 1 0 0 12\n");
   fprintf(fp1,"4 2 -2 -1 3 2 -1 0 3 1 3\n");
   fprintf(fp1,"0 -2 1 5 -1 3 -1 1 9 4 2\n");
   fprintf(fp1,"-4 2 6 -1 6 7 -3 3 2 3 3\n");
   fprintf(fp1,"8 6 -8 5 7 17 2 6 -3 5 46\n");
   fprintf(fp1,"0 2 -1 3 -4 2 5 3 0 1 13\n");
   fprintf(fp1,"16 10 -11 -9 17 34 2 -1 2 2 38\n");
   fprintf(fp1,"4 6 2 -7 13 9 2 0 12 4 19\n");
   fprintf(fp1,"0 0 -1 8 -3 -24 -8 6 3 -1 -21\n");
   fclose(fp1);

   fp1=fopen("source","r");
   for(i=0;i<n;i++)
   { for(j=0;j<n;j++)     fscanf(fp1,"%f",&array[i][j]);
     fscanf(fp1,"%f",&b[i]); }
   fclose(fp1);

   fp2=fopen("resout","w+");
   fprintf(fp2,"A====================================A\n");
   for(i=0;i<n;i++)
   {   for(j=0;j<n;j++)
   fprintf(fp2,"%6.f\t",array[i][j]);
   fprintf(fp2,"%10.f\t",b[i]);
   fprintf(fp2,"\n"); }
   fprintf(fp2,"A===========A===========A============A\n");
   fclose(fp2);

   printf("Please input y to choose the deleting way of GUASS IN ORDER.\n");
   printf("Otherwise,to choose the deleting way of GUASS MAIN LIST PRIMARY.\n");
   printf("input:");
   scanf("%c",&c);
   if(c=='y')
   {
   for(k=0;k<n-1;k++)
      for(i=k+1;i<n;i++)
   {  t=array[i][k]/array[k][k];
      for(j=0;j<n;j++)
      array[i][j]=array[i][j]-array[k][j]*t;
      b[i]=b[i]-t*b[k];  }
      }  else
     for(k=0;k<n-1;k++)
     {
       max=fabs(array[k][k]);
       for(j=k;j<n-1;j++)
	if(max<fabs(array[j+1][k])) { max=fabs(array[j+1][k]);row=j+1;}
	 else  continue;
	colum=k;
       printf("%f\t",max);
       if(max==0) {printf("No unique solustion!\n"); break;  }
       printf("(%d\t%d\t%d)\n",row,colum,k);
       I=row;J=colum;
       if(I!=k) { for(J=k;J<n;J++)
		  { t=array[k][J];array[k][J]=array[I][J];array[I][J]=t;}
		  t=b[k];b[k]=b[I];b[I]=t;
		}

      fp2=fopen("resout","a");
      fprintf(fp2,"********************************************************\n");
      for(i=0;i<n;i++)
      {   for(j=0;j<n;j++)
      fprintf(fp2,"%6.f\t",array[i][j]);
      fprintf(fp2,"%10.f\t",b[i]);
      fprintf(fp2,"\n"); }
      fprintf(fp2,"********************************************************\n");
      fclose(fp2);

      for(I=k+1;I<n;I++)
      {  t=array[I][k]/array[k][k];
	 for(J=k;J<n;J++)
	 array[I][J]=array[I][J]-array[k][J]*t;
	 b[I]=b[I]-t*b[k];  }

      fp2=fopen("resout","a");
      fprintf(fp2,"*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\n");
      for(i=0;i<n;i++)
      {   for(j=0;j<n;j++)
      fprintf(fp2,"%6.f\t",array[i][j]);
      fprintf(fp2,"%10.f\t",b[i]);
      fprintf(fp2,"\n"); }
      fprintf(fp2,"*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*\n");
      fclose(fp2);
     }

      if(array[n-1][n-1]==0) printf("no unique solustion!\n");


   fp2=fopen("resout","a");
   fprintf(fp2,"GAUSS===========GAUSS===========GAUSS============GAUSS\n");
   for(i=0;i<n;i++)
   {   for(j=0;j<n;j++)
   fprintf(fp2,"%6.f\t",array[i][j]);
   fprintf(fp2,"%10.f\t",b[i]);
   fprintf(fp2,"\n"); }
   fprintf(fp2,"GAUSS===========OK===========OK============GAUSS\n");
   fclose(fp2);

   x[n-1]=b[n-1]/array[n-1][n-1];
   printf("x10=%.8f\n",x[n-1]);
   for(i=n-2;i>=0;i--)
   {  t=0;
      for(j=i+1;j<n;j++)  t=t+array[i][j]*x[j];
   x[i]=(b[i]-t)/array[i][i];
   }
   fp2=fopen("resout","a");
   for(i=1;i<=n;i++)
   fprintf(fp2,"x%-3d=%15.10f\n",i,x[i-1]);
   fprintf(fp2,"\n\n");
   fprintf(fp2,"END===========OK===========OK============END\n");
   fclose(fp2);

   }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -