矩阵的转换c语言程序,那位高手帮下忙,用c语言编一个矩阵转换程序

问题描述:

矩阵文件结构(a.mat)

10 20 107

1 1 4 2 6 1 10 1 12 2

2 1 3 2 5 1 6 2 7 1 8 1 9 1 14 2

2 1 4 2 6 1 7 2 10 1 12 2 13 1 18 1 20 1

1 1 2 1 3 1 4 2 5 2 6 1 7 1 8 2 9 1 10 3 11 2 12 1 13 2 14 1 15 1 16 3 17 1 18 1 19 2 20 1

3 2 4 1 9 3 14 2 16 1 17 2 18 1 19 1 20 1

1 1 3 1 7 1 9 1 12 1 13 1 14 2 15 1 16 1 17 2 18 1 19 2

5 2 7 1 8 1 10 1 11 2 12 1 14 2 16 1 17 2 18 2

1 2 3 1 4 2 5 1 6 1 7 1 8 2 9 3 10 2 11 1 12 1 13 1 14 2 15 2 16 1 17 3 18 1 19 1 20 1

7 1 8 1 11 1 14 1 18 1

1 2 2 3 3 4 5 1 6 1 7 2 13 1 15 2 17 2 19 1

说明:第一行三个数字分别表示文件中的行数m,维数n和非零元的个数k

下面每一行表示一个向量,奇数位数字表示列编号,偶数数字表示列权值

例如:a.mat文件内容包括10个向量,每个向量20维,非零元为107个

第一个向量的第1、4、6、10、12维的权值分别为1、2、1、1、2

要求:

[1] 从文件a.mat中读取数据存储在m*n的二维数组A中

[2] 利用A数组计算矩阵中任意两行之间的欧几里得距离,构造m*m维距离矩阵M(m见上说明,下同,M应保持与原文件行列对应)

d=sqrt((x1-y1)2+(x2-y2)2+(x3-y3)2+(x4-y4)2+……+(xn-yn)2)(n见上说明,下同)

[3] 计算距离矩阵M的值分布

若M中最小值为v1,最大值为v2,则闭区间[v1,v2]为M的值分布区间,以M中值的最小精度s为单位,将[v1,v2]划分为(v2-v1)/s个区间(例如v1=1,v2=2,精度为0.0001,则[v1,v2]区间将被划分为10000个小区间);构造M的值分布向量D[(v2-v1)/s],任意一个区间D[i]的值为M中小于等于v1+i*s的值的个数(D为一个升序数列)

[4] 计算D中任意相邻两点之间的斜率,取斜率最大的两点中前面的点D[t]的值计为T,将M中所有小于等于T的值置0,得到距离矩阵M’(m*m)

[5] 按下例格式输出M’到文件b.mat:

第一行为两个整数m和l,其中m为M矩阵的阶数(同上m值);l为M’中非零元的个数,用空格分隔;

下面各行内容为M’中第i行中非零元的列编号,用空格分隔(即第i行中若M’[i][j]不为零,则写入j的值),如下示例:

  • 0
    点赞
  • 0
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值