gauss.cpp

来自「高斯算法用c实现」· C++ 代码 · 共 60 行

CPP
60
字号
#include <iostream.h> 
#include <math.h> 

const int n=3; 
void gauss(double a[n][n], double b[n]) 
{ 
int i,j,k; 
double m; 
for(i=0;i<n;i++) 
{ 
	 m=a[i][i]; 
     k=i; 
     for(j=i+1;j<n;j++) //在系数矩阵的第一列选取绝对值
		                //最大的元素为主元素
     if(fabs(m)<fabs(a[j][i])) 
	  {m=a[j][i]; k=j;} 
	 
    if(k!=i) //若最大元素不在第一行则与第一行交换
	{ 
       for(j=i;j<n;j++) 
	   { 
         m=a[i][j]; 
         a[i][j]=a[k][j]; 
         a[k][j]=m; 
	   } 
      m=b[i]; 
      b[i]=b[k]; 
      b[k]=m; 
	} 
    for(j=i+1;j<n;j++) //每列元素除以该列的最大元
	  a[i][j]=a[i][j]/a[i][i]; 
      b[i]=b[i]/a[i][i]; 
    for(k=i+1;k<n;k++)  
	{ 
      for(j=i+1;j<n;j++) //将最大元所在列其它元素消为0
	  { 
       a[k][j]=a[k][j]-a[k][i]*a[i][j]; 
	  } 
     b[k]=b[k]-a[k][i]*b[i]; 
	} 
} 
for(i=n-2;i>=0;i--) //回代求解
for(j=i+1;j<n;j++)
 b[i]=b[i]-a[i][j]*b[j];
 
} 

void main() 
{ 
int  i; 
double a[n][n]={{-3,2,6},{10,-7,0},{5,-1,5}}; 
double b[n]={4,7,6}; 
gauss(a,b); 
cout << "The solutions is:"<<endl; 
for(i=0;i<n;i++) 
cout <<"x"<<i<<"="<<b[i]<<","; 
cout <<endl; 
} 

⌨️ 快捷键说明

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