西京学院数学软件实验任务书
课程名称
数学软件实验
班级
***
学号
***
姓名
***
实验课题
线性方程组高斯消去法,高斯列主元消去法,高斯全主元消去法
实验目的
熟悉线性代数方程组高斯消去法,高斯列主元消去法
实验要求
运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成
实验内容
线性方程组高斯消去法
线性方程组高斯列主元消去法
线性方程组高斯全主元消去法
成绩
教师
王震
一、实验目的:
了解高斯消元法的基本原理,熟悉高斯顺序消元法和高斯列主元消元法的基本算法。运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言实现高斯消元法。对于输入的任意矩阵能解其线性方程组。
二、实验基本原理和内容:
用高斯消元法求解线性方程组的基本思想是设法消去方程组的系数矩阵A的主对角线下的元素,而将化为等价的上三角方程组,然后再回代过程便可以获得方程组的解。这种解线性方程组的方法,常称为高斯消元法。
内容
高斯消元法解方程组:
(1)高斯顺序消元法:
第一步:消元
则停止计算
计算因子
计算
第二步:回代
(高斯消元的条件)
若A的所有顺序主子式均不为0,则高斯消元无需换行即可进行到底,且得到唯一解。
若消元过程中允许对增广矩阵进行行交换,则方程组可用消元法求解的充要条件是A可逆。
(二)高斯列主元消元法
第一步:在的系数矩阵的第一列元素中选择一个绝对值最大的元素,不妨设。对调。以作为新的进行消元(消去对调后的第2~n个方程中的)。
步:
设第步消元过程完成,得到,检查中第列的后个元素,从中选出绝对值最大者,不妨设,称它为第列主元素。若,则取做除数直接进行消元。若,则将第个方程对调,使成为新的,然后以其作为除数进行消元,继续这一过程,直至得到等价的三角形方程组,下一阶段的回代过程不变。
三、实验程序及运行结果
运行环境:C/C++
1)高斯顺序消元实验代码如下:
#include <stdio.h>
main()
{
    float  a[100][100],b[100],x[100];
    int  i,j,n,k;
    float l,s;
   
    //输入任意矩阵
    printf("请输入矩阵的阶数n:");
        scanf("%d",&n);
    printf("请输入方程组的系数矩阵:");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                scanf("%f",&a[i][j]);
            }
        }
    printf("请输入B:");
        for(i=0;i<n;i++)
            scanf("%f",&b[i]);
    //输出矩阵       
    printf("方程组的系数矩阵为:A=\n");
        for(i=0;i<n;i++)
        {
            for(j=0;j<n;j++)
            {
                printf("%f  ",a[i][j]);
            }
            printf("\n");
        }
    printf("b向量为:\n");
        for(i=0;i<n;i++)
            printf("%f",b[i]);
        printf("\n\n");
    //消去过程
    for(k=0;k<n-1;k++)
    {
        if(!a[k][k])
            return -1;
        for(i=k+1;i<n;i++)
        {
            l=a[i][k]/a[k][k];
            for(j=k;j<n;j++)
            {
                a[i][j]=a[i][j]-l*a[k][j];
            }
            b[i]=b[i]-l*b[k];
        }
    }
    //消去结果
    printf("消去后:A[]\n");
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
            printf("%f ",a[i][j]);
            printf("\n");
    }
    printf("消去后:b[]\n");
    for(i=0;i<n;i++)
        printf("%f ",b[i]);
printf输出格式matlab
        printf("\n\n");
    //回代过程
    x[n-1]=b[n-1]/a[n-1][n-1];
    for(k=n-2;k>=0;k--)