📜  Gauss Siedel 方法程序(计算数学)

📅  最后修改于: 2021-09-22 10:45:46             🧑  作者: Mango

Gauss Seidel方法是求解(多个)线性方程的平方系统的迭代过程。它也被著名地称为“李布曼”方法。在数值分析中的任何迭代方法中,每次求解尝试都从方程的近似解开始,并执行迭代直到获得所需的精度。在 Gauss-Seidel 方法中,最近的值用于连续迭代。 Gauss-Seidel 方法允许用户控制舍入误差。

Gauss Seidel 方法与 Jacobi 方法非常相似,被称为连续位移方法。 (因为最近获得的值用于后续方程)。 Gauss Seidel 收敛标准取决于以下两个属性:(必须满足)。

  • 矩阵对角占优。
  • 矩阵是对称的和正的。

涉及的步骤:

  • 步骤 1:计算 Xi 的所有线性方程的值。 (初始数组必须可用)
  • 第二步:计算每个Xi并重复上述步骤。
  • 步骤3:利用每一步后的绝对相对近似误差来检查误差是否在预先指定的容差范围内。

高斯西德尔方法的代码:

#include 
  
int main()
{
    int count, t, limit;
    float temp, error, a, sum = 0;
    float matrix[10][10], y[10], allowed_error;
      
    printf("\nEnter the Total Number of Equations:\t");
    scanf("%d", & limit);
    // maximum error limit till which errors are considered, 
    // or desired accuracy is obtained)
      
    printf("Enter Allowed Error:\t"); 
    scanf("%f", & allowed_error);
    printf("\nEnter the Co-Efficients\n");
      
    for(count = 1; count < = limit; count++)
    {
        for(t = 1; t < = limit + 1; t++)
        {
            printf(" Matrix[%d][%d] = " , count, t);
            scanf(" %f" , & matrix[count][t]);
        }
    }
      
    for(count = 1; count < = limit; count++)
    {
        y[count] = 0;
    }
    do
    {
        a = 0;
        for(count = 1; count < = limit; count++)
        {
            sum = 0;
            for(t = 1; t  a)
            {
                a = error;
            }
            y[count] = temp;
            printf("\nY[%d]=\t%f", count, y[count]);
        }
        printf("\n");
    }
    while(a > = allowed_error);
      
    printf("\n\nSolution\n\n");
      
    for(count = 1; count < = limit; count++)
    {
        printf(" \nY[%d]:\t%f" , count, y[count]);
    }
    return 0;
}

输出:

Enter the Total Number of Equations:   1
Enter Allowed Error:   0.5

Enter the Co-Efficients
Matrix[1][1] = 1
Matrix[1][2] = 4

Y[1]=   4.000000

Y[1]=   4.000000

Solution

Y[1]:   4.000000  

优点:

  • 更快的迭代过程。 (比其他方法)
  • 简单易行。
  • 内存要求低。

缺点:

  • 收敛速度较慢。 (比其他方法)
  • 需要大量迭代才能达到收敛点。