高斯消元解线性方程组

高斯消去法是消去法的一种特殊形式,它包括消元和回带两个过程。

高斯消去法求解线性方程组分为以下两大步:

1、将系数矩阵A经过一系列的初等行变换编程右上三角矩阵,其常数向量B也同时做相应的变换,即:


在变换过程中,采用原地工作,即经变换后的元素仍存放在原来的存储单元中。

为了实现上述目标,对于k从1到N-1作以下2步

(1):归一化
这一步的作用是将主对角线上的元素变为1,为此,第k行上的所用元素a[k][j](j=k+1,...N)与常数向量b[k]都要除以a[k][k].但由于变换后的元素仍存放在原来的存储单元中,因此,为了不影响第k行其他元素的变换(都要除以a[k][k])一开始没有将

a[k][k]变为1,并且最后也没有真正将a[k][k]变为1,因为a[k][k]是否真正变为1已经无关紧要了,只要在以后得变换中将a[k][k]认为是1就可以了.

(2):消元
将第k列中主对角线以下的元素消成0,为此,第i(i=k+1,...N)行的其他元素a[i][j](j=k+1,...N)与常数向量B中的元素b[i]都要减去第k行对应元素的a[i][k]倍.同样由于变换后的元素仍然在原先的位置上,因此,为了不影响第i行上其他元素的变换,一开始并没有将a[i][k]变为0,并且最后也没有真正将a[i][k]变为0,因为a[i][k]是否真正变为1已经无关紧要了,以后得变换中已经用不到这个元素了.


回带求解:
首先从最后一个方程中解出x[n],x[n]=b[n]/a[n][n];
然后依次回带,逐个解出x[n-1],...x2,x1


算法实现:

//列选主元高斯消去法求解线性方程组
//a:线性方程组的增广矩阵
//N:N阶线性方程组
//result:方程组的解
bool LinearEquations(double *a,int N,double *result)
{
	double maxValue;
	int nPos=0;
	for(int k=0;kmaxValue)
			{
				maxValue=abs(a[i*(N+1)+k]);
				nPos=i;
			}
		}
		if(maxValue!=0)
		{
			if(nPos!=k)
			{
				//交换第nPos行与第k行的元素
				for(int l=0;l=0;k--)
	{
		double tmp=0;
		for(int j=k+1;j

为了避免高斯消去法中数值计算的不稳定性,一般要在每次归一化之前增加一个选主元的过程,将绝对值最大或比较大的元素交换到主元素的位置上。选取主元可分为列选主元与全选主元。上述算法中使用列选主元法。


高斯-约当消去法是一种无回带过程的求解线性代数方程组的直接解法。这种方法的基本思想是通过一系列的初等行变换,直接将系数矩阵变换成单位矩阵,同样的变换就将常数向量变换成解向量了。这种消元法的基本过程与高斯消去法相同,只是在消元的过程中,不仅将主对角线以下的元素消成0,同时将主对角线以上的元素也消成0,因此,在这种情况下,就不需要回带过程了。

你可能感兴趣的:(数值分析与信号处理)