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

📄 gauss_070460.cpp

📁 采用高斯消去法来求解方程组得解
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
#include<fstream.h>
#include<iomanip.h>


int maxrow;

double max_value(double a[100][100],int n,int column)//找主元方程
{
	double max;
	int i=0;
	max=a[n][n];
    extern int maxrow=n;
    for(i=n+1;i<column;i++)
	{
		if(fabs(a[i][n])>fabs(max))
		{
			max=a[i][n];
			maxrow=i;
		}
	}
	return (max);
}


void main()
{
	ifstream infile;
	infile.open("xishu.txt",ios::in);
	
    double matrix[100][100];
	double b[100];
	double x[100];
	double p,z,sum;
	int n,m,k,l,q=0,i,j,t,g=0,h=0,u=0;
	int column,an;
	char as;

	do{

    //设置方程组的系数
    cout<<"若对书中所给方程组进行计算请选择1:"<<endl;
	cout<<"若对其它任意阶数方程组计算请选择2:"<<endl;
	cin>>an;
	if(an==1)
	{
		column=9;
		cout<<"书中例题的增广矩阵系数为:"<<endl;
		
		for( g=0;g<column;g++)
		{
			for( h=0;h<column;h++)
			{   
				infile>>matrix[g][h];
				cout<<setw(2)<<matrix[g][h]<<'\t';
			}
	
			infile>>b[g];
			cout<<setw(3)<<b[g]<<endl;
		}
		g=0;h=0;
	}

	if(an==2)
	{
		cout<<"请输入方程阶数n:";
	    cin>>column;
	    cout<<endl;
		for(g=0;g<column;g++)
		{
			cout<<"请输入增广矩阵的第"<<g+1<<"行系数:"<<endl;
			for(h=0;h<column;h++)
				cin>>matrix[g][h];
			cin>>b[g];
		}
		g=0;h=0;u=0;
	}
	
   
	for(n=0;(n<column)&&(q==0);n++)
	{
		max_value(matrix,n,column);//找主元

		
        //判断方程是否可解
		if(max_value==0)
		{
		    q=1;
		    cout<<"此矩阵奇异,方程有无穷解!"<<endl;
		} 

		
		//将方程系数用列主元高斯变换法进行变换
		else
		{
			if(maxrow!=n)
			{
				
			    for(m=n;m<column;m++)
				{ 
					z=matrix[n][m];
					matrix[n][m]=matrix[maxrow][m];
				    matrix[maxrow][m]=z;
				}
				z=b[n];
				b[n]=b[maxrow];
				b[maxrow]=z;
			 }
		}
		
        for(k=n+1;k<column;k++)//消元
		{
			p=matrix[k][n]/matrix[n][n];

			for(l=n;l<column;l++)
			{
				matrix[k][l]-=matrix[n][l]*p;
			}

			b[k]-=b[n]*p;
		}
		
	}

	
    //回代求出X的值
	for(i=column-1;i>=0;i--)
	{
		sum=0;
		for(j=i+1;j<column;j++)
		{
			sum+=x[j]*matrix[i][j];
		}

		x[i]=(b[i]-sum)/matrix[i][i];
	}

	
    //输出结果
	cout<<"方程组的解为:"<<"X[";
	for(t=0;t<column;t++)
	{
	   cout<<x[t]<<",";
	}
	cout<<"]"<<endl;
	cout<<"继续请按Y,退出按其它键:";
	cin>>as;
	}
    while(as=='y');
    infile.close();
}


⌨️ 快捷键说明

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