高斯消元,全主元素法,C语言实现

#include 
#include 
#include 
#include 
using namespace std;
double A[1010][1010];
double B[1010];
double X[1010];
int sx[1010];
void rowswap(int x,int y,int n)
{
    for(int i=1;i<=n;i++)
    {
        swap(A[x][i],A[y][i]);
    }
    swap(B[x],B[y]);
}
void colswap(int x,int y,int n)
{
    for(int i=1;i<=n;i++)
    {
        swap(A[i][x],A[i][y]);
    }
    swap(sx[x],sx[y]);
}
void init()
{
    for(int i=1;i<=1001;i++)
    {
        sx[i]=i;
    }
}
void qmax(int x,int n)
{
    double rowm,colm;
    int rowpos,colpos;
    rowm=colm=A[x][x];
    rowpos=colpos=x;
    for(int i=x+1;i<=n;i++)
    {
        if(abs(rowm)abs(colm))
        rowswap(x,rowpos,n);
    else
        colswap(x,colpos,n);
}
int main()
{
    int n;
    double tmp;
    printf("请输入系数矩阵的阶数:\n");
    while(~scanf("%d",&n))
    {
        init();
        printf("请输入系数矩阵,行元素以空格隔开,列之间用回车隔开;\n");
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                scanf("%lf",&A[i][j]);
            }
        }
        printf("请输入B向量:\n");
        for(int i=1;i<=n;i++)
        {
            scanf("%lf",&B[i]);
        }
        for(int i=1;i=1;i--)
        {
            for(int j=n;j>i;j--)
            {
                B[i]-=A[i][j]*X[j];
            }
            X[i]=B[i]/A[i][i];
        }
        for(int i=1;i<=n;i++)
        {
            printf("%.4f\n",X[sx[i]]);
        }
    }
    return 0;
}

 

你可能感兴趣的:(数值分析)