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

📅  最后修改于: 2021-05-19 20:09:02             🧑  作者: Mango

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

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

  • 矩阵是对角线主导的。
  • 矩阵是对称且正的。

涉及的步骤:

  • 步骤1:为Xi的所有线性方程式计算值。 (初始数组必须可用)
  • 步骤2:计算每个Xi,然后重复上述步骤。
  • 步骤3:在每个步骤之后使用绝对相对近似误差,以检查误差是否在预定的公差范围内发生。

高斯Siedel方法的代码:

#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  

好处:

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

缺点:

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