📄 跌代求大型矩阵的方程组.txt
字号:
#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;
int matrixnum=44050;
float a=0.3;
float b[44050];//存放方程右边的向量值
int dictvector()
{
FILE *fp1;
if((fp1=fopen("c:/fre_r","rb+"))==NULL)
{
cout<<"can not open the file"<<endl;
exit(0);
}
//cout<<"please put into matrix mension:"<<endl;
//cin>>matrixnum;
long buffer[2];
float frequency;
long index2;
float linebuffer[matrixnum];
float matrixD[matrixnum];
float f[matrixnum];
float matrixB[matrixnum];//存放雅可比矩阵B的每行元素
float x1[matrixnum]; //存放X的中间结果
float x[matrixnum]; //存放X的最终结果
for(int i=0;i<matrixnum;i++)
linebuffer[i]=matrixD[i]=x1[i]=x[i]=0;
/*cout<<"请输入方程右边的向量:"<<endl;
fseek(fp,8,1);
fread(buffer1,sizeof(long)*2,1,fp);
//cout<<buffer[0]<<endl;
//cout<<buffer[1]<<endl;
fseek(fp,8*matrixnum-8+buffer1[0],1);
for(int j=0;j<buffer1[1];j++)
{
fread(&index1,sizeof(long),1,fp);
fread(&frequency1,sizeof(float),1,fp);
b[index1-1]=(1-a)*frequency1;
}*/
int j=0;
for(int l=0;l<10;l++) //迭代的次数
{
fseek(fp1,0,0);
for(int i=0;i<matrixnum;i++)
{
cout<<"正在输入矩阵的第 "<<i+1<<"行~!"<<endl;
for(int h=0;h<matrixnum;h++)
linebuffer[h]=0;
fseek(fp1,8,1);
fread(buffer,sizeof(long)*2,1,fp1);
//cout<<buffer[0]<<endl;
//cout<<buffer[1]<<endl;
fseek(fp1,8*matrixnum-8*(i+1)+buffer[0],1);
for( j=0;j<buffer[1];j++)
{
fread(&index2,sizeof(long),1,fp1);
fread(&frequency,sizeof(float),1,fp1);
//cout<<index2<<endl;
if(i==index2-1)
linebuffer[index2-1]=1-a*frequency;
else
linebuffer[index2-1]=-a*frequency;
//cout<<linebuffer[index2-1]<<endl;
}
//fseek(fp1,-matrixnum*8+8*i-buffer[0]-8*buffer[1],1);
for(int m=0;m<matrixnum;m++)
matrixB[m]=0;
matrixD[i]=1/linebuffer[i];
//cout<<matrixD[i]<<endl;
f[i]=matrixD[i]*b[i];
//cout<<b[2]<<endl;
//求迭代矩阵B的每一行
for(int j=0;j<matrixnum;j++)
if(i!=j)
{
matrixB[j]=-linebuffer[j]*matrixD[i];
}
//for(int n=0;n<matrixnum;n++)
//cout<<x1[i]<<endl;
// cout<<matrixB[n]<<endl;
float temp=0;
for(int h=0;h<matrixnum;h++)
{
temp+=matrixB[h]*x1[h];
}
x[i]=temp+f[i];
//cout<<matrixB[h]<<endl;
//cout<<x[i]<<endl;
fseek(fp1,-matrixnum*8+8*i-buffer[0]-8*buffer[1],1);
//cout<<x[i]<<endl;
//Jacobi(x,x1,matrixB,f,matrixnum);
}
for(int i=0;i<matrixnum;i++)
x1[i]=x[i];
}
for(int i=0;i<matrixnum;i++)
cout<<"x["<<i<<"]="<<x1[i]<<endl;
fclose(fp1);
return 0;
}
int main()
{
FILE *fp;
long buffer1[2];
float frequency1;
long index1;
if((fp=fopen("c:/010","rb+"))==NULL)
{
cout<<"can not open the file"<<endl;
exit(0);
}
//for(int i=0;i<44050;i++)
//{
cout<<"正在输入方程右边"<<"1"<<"列向量"<<endl;
fseek(fp,8,1);
fread(buffer1,sizeof(long)*2,1,fp);
fseek(fp,8*matrixnum-8+buffer1[0],1);
for(int j=0;j<buffer1[1];j++)
{
fread(&index1,sizeof(long),1,fp);
fread(&frequency1,sizeof(float),1,fp);
b[index1-1]=(1-a)*frequency1;
//cout<<b[index1-1]<<endl;
}
dictvector();
//fseek(fp,-44050*8+8*i-buffer1[0]-8*buffer1[1],1);
//}
fclose(fp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -