dyfxjtu 2016-12-16 07:54 采纳率: 0%
浏览 1287
已结题

如何c语言打开二进制带状矩阵的.dat文件

我需要从.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阶左右;

  • 写回答

1条回答

  • threenewbee 2016-12-16 15:17
    关注

    你应该找定义这个dat格式的人去要读写它的代码,这是他的工作职责。

    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序