我需要从.dat文件中读取矩阵,然后进行相关运算。现在小白一个,完全不知道怎么做。现将.dat的描述如下。
1.数据文件的文件名后缀为.dat,形式为:文件名.dat;
2.数据文件中的数据均为二进制记录结构,因此必须使用二进制方式进行读取;
3.数据文件的结构,分为以下四个部分:
(1)文件标示部分,该部分用于存放数据文件的描述信息
结构如下(用C语言格式进行描述):
typedef struct FileInfo {
long int id; // 数据文件标示
long int ver; // 数据文件版本号
long int id1; // 备用标志
} FILEINFO;
其中:
①id:为该数据文件的标识,值为0xF1E1D1A0
即为:十六进制的F1E1D1A0
②ver:为数据文件的版本号,值为16进制数据,
版本号 说明
0x101 系数矩阵为非压缩格式稀疏矩阵
0x102 系数矩阵为非压缩格式带状矩阵
0x201 系数矩阵为压缩格式稀疏矩阵
0x202 系数矩阵为压缩格式带状矩阵
③id1:为备用标志字段,暂时未用;
(2)矩阵描述部分:此部分中包括矩阵的阶数和上下带宽,如果是稀疏矩阵,则上下带宽值为0。
结构如下:
typedef struct HeadInfo {
long int n; // 方程组的阶数
long int q; // 带状矩阵上带宽
long int p; // 带状矩阵下带宽
} HEADINFO;
(3) 系数矩阵数据部分:该部分存放方程组系数矩阵中的所有元素
①如存贮格式为非压缩格式,则按行方式顺序存贮系数矩阵中的每一个
元素,元素总个数为n*n,每个元素的类型为float型;
②如果存贮格式是压缩方式,则同样是按行方式进行存贮,每行中只
放上下带宽内的非零元素,即每行中存贮的元素都为p+q+1个;
(4)右端系数部分:该部分存放方程组中的右端系数
按顺序存贮右端系数的每个元素,个数为n个,每个系数的类型为float型
3.数据文件说明:
(1)Dat61.dat 为非压缩带状方程组,阶数为15阶,该方程组供调试程序使用,该方程组的根都为1;
(2)Dat62.dat 为压缩带状方程组,阶数为20阶,该方程组供调试程序使用,该方程组的根都为1;
(2)Dat63.dat 为非压缩带状方程组,阶数在2000阶左右;
(3)Dat64.dat 为压缩带状方程组,阶数在40000阶左右;