用列主元素的Gauss消元法求解线性方程组

例如:

\left\{\begin{matrix} &x_{1}+&2x_{2}-&x_{3}=3 \\ &x_{1}-&x_{2}+&5x_{3}=0 \\ &4x_{1}+&x_{2}-&2x_{3}=2 \end{matrix}\right.

即:

\begin{pmatrix} &1 &2 & -3&3\\ &1 &-1 &5 &0\\ &4 &1 &-2 &2 \end{pmatrix}

利用列主元的Gauss消去法求解x

#include
#include
#include
#include
using namespace std;
#define error 0.00000001
#define maxn 50

int    n;//规模nXn
double a[maxn][maxn];//系数矩阵
double b[maxn];//b矩阵
double m[maxn][maxn];//中间变量矩阵
double x[maxn];//最终解
int    H=1;//扩大H被结算(优化)
/*
读取数据
*/
void read()
{
    cout<<"请输入系数矩阵规模n= ";
    cin>>n;
    cout<<"请输入系数矩阵A:"<>a[i][j];
            a[i][j]*=H;
        }

    cout<<"请输入增广矩阵b:\n";

    for(int i=1; i<=n; i++)
    {
        cin>>b[i];
        b[i]*=H;
    }
}

/*
中间矩阵输出
参数:消元次数
*/
void PrintProc(int cases)
{
    printf("--------第%d次消元结果如下:\n",cases);
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=n; j++)
        {
            cout<ab_max)
            {
                ab_max=abs(a[i][k]);
                max_ik=i;
            }
        }
        //交换行处理[先判断是否为0矩阵]
        if(ab_max0; i--)
                {
                    x[i]=b[i];
                    for(int j=i+1; j<=n; j++)
                        x[i]-=a[i][j]*x[j];//全部移到等式右边
                    x[i]/=a[i][i];//除以Xi的系数,得到最终解
                }
                //输出结果
                Print();
            }
        }
    }
}

/*
主函数
*/
int main()
{
    while(1)
    {
        read();
        LieZhuXiaoYuan();
        //ShunXuXiaoYuan();
    }
    return 0;
}

输出结果:

用列主元素的Gauss消元法求解线性方程组_第1张图片

你可能感兴趣的:(ACM)