jacobi和gauss-seidel迭代法c++
时间: 2023-06-19 20:05:48 浏览: 41
以下是Jacobi和Gauss-Seidel迭代法的C++代码示例:
Jacobi迭代法:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int N = 100;
const double eps = 1e-5;
int n;
double a[N][N], b[N], x[N];
void Jacobi()
{
double y[N];
int k = 0;
while (k < 1000)
{
double delta = 0;
for (int i = 0; i < n; i++)
{
y[i] = b[i];
for (int j = 0; j < n; j++)
{
if (i != j)
{
y[i] -= a[i][j] * x[j];
}
}
y[i] /= a[i][i];
delta += (y[i] - x[i]) * (y[i] - x[i]);
}
if (sqrt(delta) < eps)
{
break;
}
for (int i = 0; i < n; i++)
{
x[i] = y[i];
}
k++;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
cin >> b[i];
x[i] = 0;
}
Jacobi();
for (int i = 0; i < n; i++)
{
printf("%.6lf ", x[i]);
}
cout << endl;
return 0;
}
```
Gauss-Seidel迭代法:
```c++
#include <iostream>
#include <cmath>
using namespace std;
const int N = 100;
const double eps = 1e-5;
int n;
double a[N][N], b[N], x[N];
void Gauss_Seidel()
{
int k = 0;
while (k < 1000)
{
double delta = 0;
for (int i = 0; i < n; i++)
{
double y = b[i];
for (int j = 0; j < n; j++)
{
if (i != j)
{
y -= a[i][j] * x[j];
}
}
y /= a[i][i];
delta += (y - x[i]) * (y - x[i]);
x[i] = y;
}
if (sqrt(delta) < eps)
{
break;
}
k++;
}
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
cin >> a[i][j];
}
cin >> b[i];
x[i] = 0;
}
Gauss_Seidel();
for (int i = 0; i < n; i++)
{
printf("%.6lf ", x[i]);
}
cout << endl;
return 0;
}
```
以上是Jacobi和Gauss-Seidel迭代法的C++代码示例,其中`N`为方程组的最大维数,`eps`为迭代精度。
相关推荐

















