超松驰迭代法SOR_解线性方程组的迭代法
标签:计算方法实验
#include <stdio.h>
#include <math.h>
#define maxn 3
int main()
{
double a[maxn][maxn + 1], x[maxn] = {0};
double eps = 1e-9, w = 1.05;
int n, k, kmax = 100;
freopen("gauss.txt", "r", stdin);
scanf("%d", &n);
for(int i = 0; i < n; i++)
for(int j = 0; j < n + 1; j++)
scanf("%lf", &a[i][j]);
//for(int i = 0; i < n; i++)
//{
//for(int j = 0; j < n + 1; j++) printf("%-15f", a[i][j]);
//printf("\n");
//}
for(k = 0; k < kmax; k++)
{
double norm = 0;
for(int i = 0; i < n; i++)
{
double x0 = x[i];
double sum = 0;
for(int j = 0; j < n; j++) if(j != i) sum += a[i][j] * x[j]; ///
x[i] = (1 - w) * x0 + (a[i][n] - sum) / a[i][i]; ///w松弛因子
if(fabs(x[i] - x0) > norm) norm = fabs(x[i] - x0); //norm计算范数
}
printf("\nk = %2d x = ", k + 1);
for(int i = 0; i < n; i++) printf("%-15f", x[i]);
if(norm < eps) break;
}
if(k < kmax)
{
printf("\n\nk = %d\n", k + 1);
for(int i = 0; i < n; i++) printf("x%d = %-15f\n", i + 1, x[i]);
}
else printf("\n\nfailed\n");
return 0;
}
数据文件
实验结果
本文介绍了一种求解线性方程组的迭代方法——超松弛迭代法(SOR),并通过C语言实现了一个具体的例子。该方法通过引入松弛因子来加速收敛过程,并在迭代过程中不断更新解向量直至满足精度要求。
2177

被折叠的 条评论
为什么被折叠?



