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

📄 gauss主元.cpp

📁 计算数值方法的几个源程序,牛顿法,三角法,追赶法等
💻 CPP
字号:
#include<stdio.h>
#include<math.h>
#define M 4

void gauss(double a[][M]); /*高斯变换*/
void slove(double [][M],double [M-1]);/*回代*/
int colmax(double [][M],int ); /*行变换*/
void print(double [][M]);
void print(double [M-1]);

void main()
{double a[3][M]={{0.00000001,2,3,1},{-1,3.712,4.623,2},{-2,1.072,5.643,3}};
 double x[M-1];
 printf("原来的矩阵为:\n");
 print(a);
 gauss(a);
 printf("用Guass列主元素消去法后的矩阵为:\n");
 print(a);
 slove(a,x); 
}

void gauss(double a[][M])/*高斯变换*/
{double x;
 int i,j,k;
 for (i=0;i<M-1;i++)
    {k=colmax(a,i);
     if (k!=i)
	for (j=i;j<M;j++)
	    {x=a[i][j];a[i][j]=a[k][j];a[k][j]=x;}
     for (j=i+1;j<M-1;j++)
	 {x=a[j][i]/a[i][i];
	  for (k=i;k<M;k++)
	      a[j][k]=a[j][k]-x*a[i][k];	   
	 }
    }
}

void slove(double a[][M],double x[M-1])/*回代*/
{double sum;
 int i,j;
 x[M-2]=a[M-2][M-1]/a[M-2][M-2];
 for (i=M-3;i>=0;i--)
     {sum=0;
      for (j=i+1;j<M-1;j++) sum=sum+a[i][j]*x[j];
      x[i]=(a[i][M-1]-sum)/a[i][i];
     }
 printf("距阵的解为:\n");
 for (i=0;i<M-1;i++)
 {printf("x[%d]=%.9f",i+1,x[i]);
 printf("\n");}
}

int colmax(double a[][M],int row)/*行变换*/
{double x;
 int i,k;
 x=fabs(a[row][row]); k=row;
 for (i=row+1;i<M-1;i++)
     if (fabs(a[i][row])>x)
       {x=fabs(a[i][row]);k=i;}
 return k;
}

void print(double a[][M])
{int i,j;
 for (i=0;i<M-1;i++)
     {for (j=0;j<M;j++)
      printf(" %12.9f",a[i][j]);
      printf("\n");
     }
 printf("\n");
} 

⌨️ 快捷键说明

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