高斯·赛德尔(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
好处:
- 更快的迭代过程。 (比其他方法)
- 简单易实现。
- 内存需求低。
缺点:
- 收敛速度较慢。 (比其他方法)
- 需要大量迭代才能达到收敛点。