列主元高斯消去法(C语言)

来源:互联网 发布:远程监控软件下载 编辑:程序博客网 时间:2024/06/10 17:58

高斯消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其代人到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的。消元法主要用于二元一次方程组的求解。核心

1)两方程互换,解不变;

2)一方程乘以非零数k,解不变;

3)一方程乘以数k加上另一方程,解不变[2] 。

如是老师布置数值作业实验,可以借鉴,请勿抄袭(NEU)

//列主元高斯消去法#include <stdio.h>#include <stdlib.h>int main(){    int n;    int j,j1,j2,j3,j4,j5,j6,j7,j8,j9,j10;    double temp;    double SUM=0;    printf("请输入未知解的个数:");    scanf("%d",&n);    double A[n][n+1];    double x[n];    printf("请输入系数矩阵增广后的矩阵:\n");    for( j=0;j<n;j++)        for( j1=0;j1<n+1;j1++)        scanf("%lf",&A[j][j1]);    for(j2=0;j2<n-1;j2++)    //完全主元素    {        for(j3=j2+1;j3<n;j3++)        {            if(A[j2][j2]>=A[j3][j2])              continue;            else            {                for(j4=j2;j4<n+1;j4++)            {                temp = A[j2][j4];                A[j2][j4] = A[j3][j4];                A[j3][j4] = temp;            }            }        }        if(A[j2][j2]==0)            printf("no unique solution!\n");        for(j5=j2+1;j5<n;j5++)        {            for(j6=j2+1;j6<n+1;j6++)            A[j5][j6]=A[j5][j6]-((A[j5][j2]*A[j2][j6])/A[j2][j2]);        }    }    for(j7=n-1;j7>=0;j7--)  //回代    {        x[j7]=(A[j7][n]-SUM)/A[j7][j7];        SUM = 0;        j9 = j7-1;        for(j8=j7-1;j8<n-1;j8++)        {        SUM = SUM+x[++j9]*A[j7-1][j9];        }    }    printf("所求解分别为(保留五位小数):");  //输出解    for(j10 = 0;j10<n;j10++)        printf("%.5lf",x[j10]);    return 0;}