c++高斯列主元素消去法

c++高斯列主元素消去法求解线性方程组

高斯列主元素消去法原理

设有线性方程组
A x = b Ax=b Ax=b
根据线性代数的知识,当 d e t A ! = 0 det A!=0 detA!=0时,上述方程组的解存在且唯一,对增广矩阵 ( A , b ) (A,b) (A,b)施行初等变换,化 A A A为上三角矩阵,在初等变换过程中位于矩阵对角线上的元素称为主元素,为了避免较小数作为除数产生误差,每步消去时都将主元素所在列最大元所在行换到主元素所在行,然后再进行消元计算,此种方法称为高斯列主元素消去法。

程序代码

#include<iostream>
using namespace std;
//高斯消去法求解矩阵 
int main()
{
	int n,i,j,k,p,ii,jj,kk=1,iq,jq;
 	cout<<"请输入系数矩阵的阶数n=";
 	cin>>n;
 	cout<<"请输入增广矩阵元素(A,b)=\n";
 	float a[n][n+1],h,x[n],m,maxa=0,b;
 	for(i=1;i<=n;i++)//增广矩阵输入 
 	{
  		x[i]=0;
		for(j=1;j<=n+1;j++)
  		{
   			cin>>a[i][j];
  		}
  	cout<<'\n';
 }

 	for(i=1;i<n;i++)//高斯消去 
 	{
  	//排序 
  		maxa=a[i][i];
  		p=i;
  		kk++;
  		for(ii=kk;ii<=n;ii++)
  		{
   			if((a[ii][kk-1]>0?a[ii][kk-1]:-a[ii][kk-1])>maxa)
   			{
    				maxa=(a[ii][kk-1]>0?a[ii][kk-1]:-a[ii][kk-1]);
    				p=ii;
   			}
  		}
  		for(jj=1;jj<=n+1;jj++)
  		{
   			b=a[p][jj];
   			a[p][jj]=a[i][jj];
   			a[i][jj]=b;
  		}
  		cout<<"列主元素="<<endl;
  		for(iq=1;iq<=n;iq++)
  		{
   			for(jq=1;jq<=n+1;jq++)
   			{
    				cout<<a[iq][jq]<<' ';
   			}
   			cout<<'\n'<<endl;
  		}
  		//排序 
  
  		for(j=i+1;j<=n;j++)
  		{
   			if(a[i][i]==0)
   			{
    				cout<<"无穷多解"; 
   			}
   			h=a[j][i]/a[i][i];
   			for(k=1;k<=n+1;k++)
   			{
    				a[j][k]=a[j][k]-h*a[i][k]; 
   			}
  		}
  		cout<<"高斯消去="<<endl;
  		for(iq=1;iq<=n;iq++)
  		{
   			for(jq=1;jq<=n+1;jq++)
   			{
    				cout<<a[iq][jq]<<' ';
   			}
   			cout<<'\n'<<endl;
  		}
 	}
 	cout<<"高斯消去法得到的(A,b)="<<endl;
 	for(i=1;i<=n;i++)
 	{
  		for(j=1;j<=n+1;j++)
  		{
   			cout<<a[i][j]<<' ';
  		}
  		cout<<'\n'<<endl;
 	}
 	x[n]=a[n][n+1]/a[n][n];
 	for(i=n-1;i>0;i--)
 	{
  		m=0;
  		for(j=n;j>i;j--)
  		{
   			m=m+a[i][j]*x[j];
  		}
  		x[i]=(a[i][n+1]-m)/a[i][i];
 	}
 	cout<<"解x=";
 	for(i=1;i<=n;i++)
 	{
  		cout<<x[i]<<' ';
 	}
 	return 0;
}
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值