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

两个分块矩阵对应位置相乘怎么实现

[复制链接]
发表于 2014-8-24 18:43:20 | 显示全部楼层 |阅读模式 来自 中国
我先把矩阵a变成分块矩阵a1(4个2x2矩阵),矩阵b同样变成分块矩阵b1,
现在想求a1与a2对应位置上块相乘后组成一个新的分块矩阵,
我下面编程结果h出错:Function 'times' is not defined for values of class 'cell'.
不知道怎么解决,请各位解惑,我刚开始学matlab.
a=[1 2 2 3;3 3 4 5;3 4 0 0;5 7 0 0]
b=[2 2 2 2;1 1 1 1;2 2 2 2;1 1 1 1]
a1=mat2cell(a,ones(4/2,1)*2,ones(4/2,1)*2)
b1=mat2cell(b,ones(4/2,1)*2,ones(4/2,1)*2)
h=a1.*b
发表于 2014-8-24 20:49:22 | 显示全部楼层 来自 四川成都
Simdroid开发平台
好像有个函数叫cellfun,你可以试试
回复 不支持

使用道具 举报

发表于 2014-8-25 11:46:53 | 显示全部楼层 来自 新疆乌鲁木齐
  1. cell2mat(cellfun(@mtimes,a1,b1,'un',0))
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-25 19:53:38 | 显示全部楼层 来自 中国
lengyunfeng 发表于 2014-8-24 20:49
好像有个函数叫cellfun,你可以试试

谢谢指导思路
回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-25 19:54:27 | 显示全部楼层 来自 中国

非常感谢您的指导。再次感谢!!
回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-25 20:36:12 | 显示全部楼层 来自 中国

想进一步问您,怎么实现两个分块矩阵对应位置块的点积(dot)呢?
例如:
a=[1 2 ;3 3;3 4 ;5 7 ]
b=[2 2 ;1 1 ;1 1;2 2]
a1=mat2cell(a,ones(4/2,1)*2,ones(2/1,1)*1)
b1=mat2cell(b,ones(4/2,1)*2,ones(2/1,1)*1)

%f=cellfun(@dot,a1,a2,'un'0)(试着这样,可不行,我对cellfun理解不透彻)
上面a1和b1分别是分块矩阵,里面每个块都是2x1矩阵,怎么实a1和b1对应位置块的点积呢?然后组成一个大矩阵。
再次请教您答疑,谢谢!!!
回复 不支持

使用道具 举报

发表于 2014-8-25 21:23:36 | 显示全部楼层 来自 加拿大
caifeng1982 发表于 2014-8-25 20:36
想进一步问您,怎么实现两个分块矩阵对应位置块的点积(dot)呢?
例如:
a=[1 2 ;3 3;3 4 ;5 7 ]

照着上面的代码依葫芦画瓢

如果是按列求点积:
>> f=cellfun(@dot,a1,b1,'un',0)

如果是按行求点积:
>> f=cellfun(@(x,y)dot(x,y,2),a1,b1,'un',0)

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-25 21:40:44 | 显示全部楼层 来自 中国
winner245 发表于 2014-8-25 21:23
照着上面的代码依葫芦画瓢

如果是按列求点积:

谢谢您的解惑!
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-3 08:00 , Processed in 0.039561 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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