// 高斯赛德尔迭代法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "math.h"
#include<iostream>
using namespace std;
int main()
{
//输入
int k = 1;
int N; //最大迭代次数
double x[200], y[200], b[200], d[200];
double e, n, sum1, sum2, max;
double a[200][200];
cout << "请输入阶数" << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "请依次输入系数矩阵第" << i + 1 << "行的" << n << "个数" << endl;
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
cout << "请依次输入" << n << "个等式右面的系数" << endl;
for (int i = 0; i < n; i++){
cin >> b[i];
}
cout << "请输入最大迭代次数" << endl;
cin >> N;
cout << "请输入精度值" << endl;
cin >> e;
//计算
do
{
for (i = 1; i <= n; i++)//***
{
for (int j = 1; j <= (i - 1); j++)//***
{
m = m + a[i][j] * y[j];//***
}
for (int j = (i + 1); j <= n; j++)
{
z = z + a[i][j] * y[j];
}
y[i] = (b[i] - m - z) / a[i][i];
cout << "y" << i << "=" << y[i] << endl;
}
//判断
double max = 0;
for (i = 1; i <= n; i++)
{
if (fabs(x[i] - y[i]) > max)
{
max = fabs(x[i] - y[i]);
}
}
cout << "max=" << max << endl;
//输出
if (max <= e)
{
for (int i = 1; i <= n; i++)
{
cout << "y" << i << "=" << y[i] << endl;
}
break;
}
k++;
for (int i = 1; i <= n; i++)
{
x[i] = y[i];
}
if (k == N)
{
cout << "迭代失败!" << endl;
}
} while (k != N);
getchar();
getchar();
getchar();
getchar();
return 0;
}
//
#include "stdafx.h"
#include "math.h"
#include<iostream>
using namespace std;
int main()
{
//输入
int k = 1;
int N; //最大迭代次数
double x[200], y[200], b[200], d[200];
double e, n, sum1, sum2, max;
double a[200][200];
cout << "请输入阶数" << endl;
cin >> n;
for (int i = 0; i < n; i++)
{
cout << "请依次输入系数矩阵第" << i + 1 << "行的" << n << "个数" << endl;
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
}
cout << "请依次输入" << n << "个等式右面的系数" << endl;
for (int i = 0; i < n; i++){
cin >> b[i];
}
cout << "请输入最大迭代次数" << endl;
cin >> N;
cout << "请输入精度值" << endl;
cin >> e;
//计算
do
{
for (i = 1; i <= n; i++)//***
{
for (int j = 1; j <= (i - 1); j++)//***
{
m = m + a[i][j] * y[j];//***
}
for (int j = (i + 1); j <= n; j++)
{
z = z + a[i][j] * y[j];
}
y[i] = (b[i] - m - z) / a[i][i];
cout << "y" << i << "=" << y[i] << endl;
}
//判断
double max = 0;
for (i = 1; i <= n; i++)
{
if (fabs(x[i] - y[i]) > max)
{
max = fabs(x[i] - y[i]);
}
}
cout << "max=" << max << endl;
//输出
if (max <= e)
{
for (int i = 1; i <= n; i++)
{
cout << "y" << i << "=" << y[i] << endl;
}
break;
}
k++;
for (int i = 1; i <= n; i++)
{
x[i] = y[i];
}
if (k == N)
{
cout << "迭代失败!" << endl;
}
} while (k != N);
getchar();
getchar();
getchar();
getchar();
return 0;
}