#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
double **A_B_Matrix; //矩阵A和B结合
double **X_Matrix; //X取值
string s; //缓存用
double dd; //缓存用
//int m; //矩阵列数
int n; //矩阵的行数
int k; //要求迭代次数
//m=0;
n=0;
char c;
ifstream read("data.dat");
while(getline(read,s)) //检测矩阵有几行
{
n++;
}
read.close();
/*read.open("data.dat");
while(1) //检测矩阵有几列
{
read>>dd;
m++;
c=read.peek();
if('
'==c)
break;
}
read.close(); */
cout<<"请输入要求的迭代次数"<<endl;
cin>>k;
A_B_Matrix=(double **)new double *[n];//为矩阵AB分配行空间
X_Matrix=(double **)new double[k+1]; //为X分配空间
for(int i=0;i!=n;i++) //为矩阵A_B分配空间
{
A_B_Matrix[i]=new double[n];
}
read.open("data.dat");
int tem; //缓存用
tem=0;
while(!read.eof()) //将文件中的矩阵输入到A_B中
{
for(int j=0;j!=n+1;j++)
{
read>>A_B_Matrix[tem][j];
}
tem++;
}
read.close();
for(int i=0;i!=k+1;i++) //为X矩阵分配空间
{
X_Matrix[i]=new double[n];
}
cout<<"请输入初始向量"<<endl;
for(int i=0;i!=n;i++) //输入初始向量X
{
cin>>X_Matrix[0][i];
}
for(int i=1;i!=k+1;i++) //进入迭代循环
{
for(int j=0;j!=n;j++)
{
double sum=0;
for(int nn=0;nn!=n;nn++)
{
if(j==nn)
{
sum+=0;
}
else
{
sum+=-A_B_Matrix[j][nn]*X_Matrix[i-1][nn];
}
}
X_Matrix[i][j]=(sum+A_B_Matrix[j][n])/A_B_Matrix[j][j];
}
}
cout<<"经过"<<k<<"迭代,所得结果为"<<endl;
for(int i=0;i!=n;i++)
{
cout<<X_Matrix[k][i]<<' ';
}
system("pause");
return 0;
}