课题三 解线性方程组的迭代法
实验目标:
分别采用 Jacobi 迭代法, Gauss-Seidel 迭代法和 SOR迭代法求解线性方程组。
Jocabi 迭代法:
#include <iostream>
#include <math.h>
using namespace std;
int i,j,k; // 计数器
int M = 2000;
int Array( double ***Arr, int n){
double **p;
int i;
p=(double **)malloc(n* sizeof ( double *));
if (!p) return 0;
for (i=0;i<n;i++)
{
p[i]=( double *)malloc(n* sizeof ( double ));
if (!p[i]) return 0;
}
*Arr=p;
return 1;
}
void main()
{
double eps ;
cout<< " 默认最多迭代次数为 2000次"<<endl<<" 迭
代精度为: ";
cin>>eps;
double **matrix;
int n;
cout<< " 矩阵大小为: " ;
cin>>n;
double *X;
X= new double [n];
double *Y;
Y= new double [n];
double *G;
G= new double [n];
for (i=0;i<n;i++){
Y[i]=0;
}
if (!Array(&matrix,n))
cout<< " 内存分配失败! " ;
else
cout<< " 请输入矩阵 :" <<endl;
for ( i=0;i<n;i++){
for ( j=0;j<n;j++){
cin>>matrix[i][j];
}
}
cout<< " 请输入右端项: " <<endl;
double *B;
B = new double [n];
for (i=0;i<n;i++){
cin>>B[i];
}
for (i = 0 ;i< n;i++)
{
if (fabs(matrix[i][i]) < eps)
{
cout << "打印失败 " <<endl;
return ;
}
double T = matrix[i][i];
for ( j = 0 ; j< n;j++)
{
matrix[i][j] = -matrix[i][j]/T;
}
matrix[i][i] = 0;
G[i] = B[i]/T;
}
int counter = 0;
while (counter < M)