您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言 高斯列主消元法

时间:12-14来源:作者:点击数:
C语言 高斯列主消元法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10 
#define EPS 1e-10 // 定义 EPS为1乘以10的-10次方 
void main()
{
float A[N][N+1]; // 定义 zengguang 矩阵   
    float sum=0;
    int i,j,k;
    int n;
    int flag=1;
     
    while(flag){ 
        printf("请输入系数矩阵的大小:"); 
        scanf("%d", &n); 
        if(n>N){ 
            printf("矩阵过大!\n"); 
            continue; 
        } 
        flag=0; 
    } 
    printf("请输入系数矩阵值:\n"); 
    for(i=0; i<n; i++) 
    { 
        for(j=0; j<n; j++) 
        { 
            printf("a[%d][%d]: ", i, j); 
            scanf("%f", &A[i][j]); 
        } 
    } 
   
    /*显示原始矩阵*/ 
    printf("\n原始矩阵:\n");   
    for(i=0; i<n; i++)   
    {   
        for(j=0; j<n; j++)   
            printf("%0.3f ",A[i][j]);   
        printf("\n");   
    }   
    printf("\n\n");   
    
    int x[N];
    int Pr,t,total;
    for(k=1;k<N;k++)
    {
        Pr=k-1;
        for(i=k;i<N;i++)
        {
            if(abs(A[i][k-1])>abs(A[Pr][k-1]))
            {
                Pr=i;
            }
        }//End For i
        if(abs(A[i][k-1])<EPS)
        {
            printf("主元接近于0,方法失效\n");
            exit(0);
        }
        if(Pr>k-1)
        {
            for(j=k-1;j<N+1;j++)
            {
                t=A[k-1][j];
                A[k-1][j]=A[Pr][j];
                A[Pr][j]=t;
            }//End For j
        } //End if
        for(i=k;i<N;i++)
        {
            t=A[i][k-1]/A[k-1][k-1];
            for(j=k-1;j<N+1;j++)
            {
                A[i][j]=A[i][j]-t*A[k-1][j];
            } //End For j
        } //End For i
    } //End For k
    if(abs(A[N-1][N-1])<EPS)
    {
        printf("主元接近于0,方法失效\n");
        exit(0);
    } //End If
    x[N-1]=A[N-1][N]/A[N-1][N-1];
    for(i=N-2;i>=0;i--)
    {
        total=A[i][N];
        for(j=N-1;j>=i+1;j--)
        {
            total-=A[i][j]*x[j];
        }
        x[i]=total/A[i][i];
    }//End For i
    for(i=0;i<N;i++)
    {
        printf("\nx[%d]=%d\n",(i+1),x[i]);
    }//End For i
}

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐