数值分析作业,列主元高斯消去法的c语言代码

因为写数值分析作业,做了用c语言写列主元高斯消去法的题目。现在和大家分享一下。

#include<stdio.h>
#include<math.h>

#define MAX 10

double A[MAX][MAX];//系数矩阵
double b[MAX];//右端项
double X[MAX];//求得的方程组结果
int n;
int x;

void setMatrix()
{
    int i,j;


    for(i=0; i<n; i++)
    {
        printf("请输入系数矩阵A第%d行元素,并以空格作为间隔:\n",i+1);
        for(j=0; j<n; j++)
        {
            scanf("%lf",&A[i][j]);
        }
    }
    printf("请输入右端项b的元素,并以空格作为间隔:\n");
    for(i=0; i<n; i++)
    {
        scanf("%lf",&b[i]);
    }
    printf("输入的系数矩阵A[][]为:\n");
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("\t%f\t",A[i][j]);

        }
        printf("\n\n");
    }
    printf("\n输入的右端项b[]为:\n");
    for(i=0; i<n; i++)
    {
        printf("\t%f\n\n",b[i]);
    }

}
int main()
{
    int i,j,k;


    double max;
    double temp;
    double temp1;
    double Aik;
    double S;
    printf("请输入方程组的阶数:");
    scanf("%d",&n);
    setMatrix();//初始化,输入系数矩阵
    for(k=0; k<n-1; k++)//对整个系数矩阵进行列主元消元
    {
        max = A[k][k];
        for(i=k+1; i<n; i++) //选主元
        {
            if(fabs(max)<fabs(A[i][k]))
            {
                max=A[i][k];
                x=i;//记录选择交换的行数
            }

        }

        for(j=k; j<n; j++) //选出列主元后,交换对应的两行
        {
            temp = A[k][j];
            A[k][j]=A[x][j];
            A[x][j]=temp;
        }
            temp1=b[k];
            b[k]=b[x];
            b[x]=temp1;
        //消去过程

        for(i=k+1; i<n; i++)
        {
            Aik=A[i][k]/A[k][k];
            for(j=k; j<n; j++)
            {
                A[i][j]=A[i][j]-Aik*A[k][j];
            }
            b[i]=b[i]-Aik*b[k];
        }

    }
    printf("列主元消元后的系数矩阵A[][]:\n\n");
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
        {
            printf("\t%f\t",A[i][j]);
        }
        printf("\n\n");
    }
    printf("列主元消元后的右端项b[]:\n\n");
    for(i=0; i<n; i++)
    {
        printf("\t%f\t\n\n",b[i]);
    }
    //回代过程
    X[n-1]=b[n-1]/A[n-1][n-1];
    for(k=n-2; k>=0; k--)
    {
        S=b[k];
        for(j=k+1; j<n; j++)
        {
            S=S-A[k][j]*X[j];
        }
        X[k]=S/A[k][k];
    }
    printf("输出求得的方程组结果X[]:\n");
    for(i=0;i<n;i++)
    {
        printf("\t%f\n\n",X[i]);
    }

}
  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值