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

📄 新建 文本文档 (2).txt

📁 数值分析中的高斯列主元消元算法的C语言实现
💻 TXT
字号:
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
void main(){
	const n=3;
    double a[n][n+1]={{0.001,2.000,3.000,1.000},{-1.000,3.712,4.623,2.000},{-2.000,1.072,5.643,3.000}};
    int det=1,k,i,j,h;
	int done=1;
	double t;         //t为交换时的中间变量
    for(k=0;k<=n-2;k++)
	{  double max=fabs(a[k][k]);
	   /*****************************************************************/
	   for(i=k+1;i<n;i++)                    //选取主元
	      if(fabs(a[i][k])>max)
		  {  max=fabs(a[i][k]);
		     h=i;}
	   if(max==0) {done=0;break;}
	   if(h!=k)
		  for(j=0;j<=n;j++){                          //换行操作
	          t=a[k][j];
		      a[k][j]=a[h][j];
		      a[h][j]=t;
		  }
		det*=-1;
        /**************************************************************************/
	for(i=k+1;i<n;i++){                        //消元过程
		  a[i][k]=a[i][k]/a[k][k];
	   for(j=k+1;j<n+1;j++)
		  a[i][j]=a[i][j]-a[i][k]*a[k][j];
	   }	
	det=a[k][k]*det;
	if(a[n-1][n-1]==0) {done=0;break;}
	cout<<"第"<<k+1<<"次消元:"<<endl;          //输出每次消元后的结果
	for(i=0;i<n;i++){		  
	   for(j=0;j<n+1;j++)
		   cout<<setw(8)<<a[i][j]<<" ";
	   cout<<endl;
	}
	cout<<endl;
    /**************************************************************************/
}
/**************************************************************************/
a[n-1][n]=a[n-1][n]/a[n-1][n-1];                //回带过程
for(i=n-2;i>=0;i--){
  double sum=0;
	 for(j=i+1;j<n;j++)
	    sum+=a[i][j]*a[j][n];
  a[i][n]=(a[i][n]-sum)/a[i][i];                 //将方程解存入最后一列
  det*=a[n-1][n-1];
}
/**************************************************************************/
if(done==1){                                     //根据done值情况决定输出情况
  cout<<"原方程组的解为:"<<endl;
  for(i=0;i<n;i++)
    cout<<"x"<<i<<"="<<setprecision(4)<<a[i][n]<<endl;}
else
  cout<<"该方程组有无数解!";
}

⌨️ 快捷键说明

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