Guass_seidel迭代法

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


int main()
{
    int n;
    double a[10][10],x[10];
    printf("请输入要解的线性方程组的系数矩阵的阶数:\n");
    scanf("%d",&n);

    printf("请输入扩展矩阵:\n"); //对数组初始化,输入系数
    for(int i=0; i<n; i++)
        for(int j=0; j<n+1; j++)
            scanf("%lf",&a[i][j]);

    double sum=0;
    int flag=1;
    for(int i=0; i<n; i++)
    {
        sum=0;
        for(int j=0; j<n; j++)
            sum+=a[i][j];
        if(2*a[i][i]<=sum)
        {
            flag=0;
            break;
        }
    }
    if(flag==1)
        printf("该线性方程组为主对角占优");
    for(int i=0; i<n; i++)
        x[i]=0;
        do
        {
            int i;
            for(i=0; i<n; i++)
            {
                sum=0;
                for(int j=0; j<n; j++)
                    sum+=a[i][j]*x[j];
                x[i]=x[i]+(a[i][n]-sum)/a[i][i];
            }
            i--;
            if(fabs((a[i][n]-sum)/a[i][i])<=0.000001)
                break;
        }while(1);
    printf("x=(");
    for(int i=0; i<n-1; i++)
        printf("%lf,",x[i]);
    printf("%lf)",x[n-1]);

    return 0;
}
/*
3
8 -3 2 20
4 11 -1 33
2 1 4 12
*/

猜你喜欢

转载自blog.csdn.net/qq_33390700/article/details/51606592