⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 跌代求大型矩阵的方程组.txt

📁 一些解决线形方程组的并行计算的程序,希望对大家有一点帮助
💻 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 + -