找回密码
 注册
Simdroid-非首页
查看: 84|回复: 4

[已解決 感谢feynmand 版主帮忙]请问一个矩阵分多个3*1后相乘的程序

[复制链接]
发表于 2010-4-13 08:20:23 | 显示全部楼层 |阅读模式 来自 台湾
本帖最后由 武神裝攻 于 2010-4-13 13:34 编辑

再次恳请板上英雄出动谢谢

例有个矩阵
A=[1 1 1;1 2 3;1 3 2];

B=[ 3  1001
      2  1002
      1  1003
      4  2001
      5  2003
      6  3003]
求C

步骤
看B第二列千位数值皆为相同数字表示为同一个3*1的矩阵
                个位数值表示B的第一列该放入为3*1的哪个位置
EXE
先看B第二列千位数=1 找到第一列 [3;2;1]
放入3*1的记忆体中 X=[3;2;1]
X*A放入C 此时 C=[6;10;11]

再看B第二列千位数=2 找到第一列 [4;5]
但是不满3*1所以便看个位数值缺2所以補0 X=[4;0;5]
X*A放入C 此时 C=[6;10;11;9;19;14]

再看B第二列千位数=3 找到第一列 [4;5]
但是不满3*1所以便看个位数值缺1.2所以補0 X=[0;0;6]
X*A放入C 此时 C=[6;10;11;9;19;14;6;18;12]

PS:千位数后面也可能是9999 也就是9999001
     且千位数不一定是连续
     例題目改為
     B=[ 3  1001
           2  1002
           1  1003
           4  2001
           5  2003
           6  4003]

     題目千位数雖然少3但结果C是一样
     的也就是千位数整个缺少是不补0


发表于 2010-4-13 09:10:53 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
你这个问题用判断语句不难解决吧,就是麻烦点,自己先画一个框图,然后再写命令可以方便一些。
回复 不支持

使用道具 举报

发表于 2010-4-13 11:46:55 | 显示全部楼层 来自 上海
求C是吧?

A=[1 1 1;1 2 3;1 3 2];
B=[ 3  1001
   2  1002
   1  1003
   4  2001
   5  2003
   6  4003];
B=int32(B);
D=[idivide(B(:,2),1000) mod(B(:,2),1000)];
E=sub2ind([D(end,1),3],D(:,1),D(:,2));
F=zeros(D(end,1),3);
F(E)=B(:,1);
F*A

剩余的步骤你自己来搞吧。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-4-13 13:09:22 | 显示全部楼层 来自 台湾
小弟用idivide
出現
At least one argument must belong to an integer class.
也就是说不能不是整数?
回复 不支持

使用道具 举报

发表于 2010-4-13 13:11:51 | 显示全部楼层 来自 上海
B=int32(B);
不是有这个了吗?怎么还会出问题
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-22 05:31 , Processed in 0.045553 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表