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

如何给把矩阵的值赋值

[复制链接]
发表于 2010-8-9 13:46:13 | 显示全部楼层 |阅读模式 来自 江苏常州
本帖最后由 lengyunfeng 于 2010-8-9 17:45 编辑

总共有372个数组,有的数组是31列,有的是40列,列数都不一样,但是行数是一样的,都是一行,我想定义372个矩阵,一个矩阵对应于一个数组,而这372个数组,每个数组的长度我也求好了,放在一个数组里面,我定义为Ft(i)=H(i)-T(i)+1,
所以当时我想这样编这个程序
我在编程的时候总是出现以下错误,
U=T(1):1:H(1)
U =
  Columns 1 through 18
    34    35    36    37    38    39    40    41    42    43    44    45    46    47    48    49    50    51
  Columns 19 through 31
    52    53    54    55    56    57    58    59    60    61    62    63    64
但是我想赋值给这样一个矩阵一行31列的矩阵,就是我下面的这行语句,但是运行的时候就出现了错误!
U(1,31)=T(1):1:H(1)
??? Subscripted assignment dimension mismatch.
请大家帮帮忙,是不是我定义错了!
===============================================
我想实现下面的语句
===========================
for i=1:372
     U(1,Ft(i))=T(i):1:H(i);
    end
但是现在发现错了,不知道怎么编了,请大家帮帮忙!
不知道我这样讲,清楚了没有!

评分

1

查看全部评分

 楼主| 发表于 2010-8-9 13:49:50 | 显示全部楼层 来自 江苏常州
Simdroid开发平台
不知道我讲的清楚不清楚,请大家帮帮忙!
回复 不支持

使用道具 举报

发表于 2010-8-9 18:08:58 | 显示全部楼层 来自 四川成都
首先:1)不知道你到底想干什么。你又是矩阵又是数组的,说矩阵的时候又说是一行的,那不和数组一个意思吗?
2)一个数组对应一个矩阵,你的数组我看到了,你的矩阵呢?U吗?退一步说你的矩阵是U,而你U的第i行是由T(i):1:H(i)所构成,那也才一个矩阵啊,你哪来的372个矩阵呢?退两步说,你只要一个矩阵,那你构成矩阵每一行的数组元素个数都不一样,怎么构成矩阵呢?你见过缺胳膊短腿的矩阵吗?反正我是没见过。
3)你的数组长度自己算的啊?Ft(i)=H(i)-T(i)+1,这里的H和T代表什么意思?照你这句的意思应该是每一个数组的元素是由小(T(i))变到大(H(i))的,那你又何必呢,直接用length函数不完了吗?
4)你的U刚开始定义的时候是没问题的,但是你的后一步我看不懂了,你的语句里用了U(1,31),难道有第2行吗?当然你这样调用单行元素也没错(U(1,31)和U(31)是一个意思),但你的等式左边是一个向量哎,你想把一个向量塞到本来放一个标量的空间里去啊?
5)最离谱的就是这句U(1,Ft(i))=T(i):1:H(i);,你的Ft(i)到底是干嘛用的?整个语句和你在4)里犯的错误一模一样。再有你的T(i)~H(i)是一个向量,而且按你的意思它们的个数还有一样,不管你想把这个向量按行方向摆还是按列方向摆都是缺胳膊短腿的。

是的,你没讲清楚,很不清楚,而且你的标题也定得与题意不切实际,所以我决定扣你两分。

btw:哥们,你程序有问题请大家帮你改,这没问题,但是起码你也得把自已想干什么弄清楚再来吧?!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-8-9 18:17:03 | 显示全部楼层 来自 英国
长度不同的vector也可以放入一个数组,matlab用cell数组处理这种变长的情况
楼主你把需求好好写清楚,大家再帮你看啊

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-8-10 15:10:11 | 显示全部楼层 来自 江苏常州
本帖最后由 jinfengshi_2005 于 2010-8-10 15:14 编辑

3# lengyunfeng
首先:1)不知道你到底想干什么。你又是矩阵又是数组的,说矩阵的时候又说是一行的,那不和数组一个意思吗?
A:不好意思,表达的不是很好,我的意思是把T(i):1:H(i)产生的向量放在一个1Xlength(T(i):1:H(i))的矩阵里。而其中T和H是由372个数组成的数组。
2)一个数组对应一个矩阵,你的数组我看到了,你的矩阵呢?U吗?退一步说你的矩阵是U,而你U的第i行是由T(i):1:H(i)所构成,那也才一个矩阵啊,你哪来的372个矩阵呢?退两步说,你只要一个矩阵,那你构成矩阵每一行的数组元素个数都不一样,怎么构成矩阵呢?你见过缺胳膊短腿的矩阵吗?反正我是没见过。
A:你可能误解我的意思了,我的意思就是当i=1时,产生的向量存作为U1,当i=2时,产生的向量存作为U2,依次类推,当i=372时,记作为U372,因为每个向量的列数都不一样,所以并不要把这些产生的向量组成一个这样(U1,U2,......U372)^T的矩阵。
3)你的数组长度自己算的啊?Ft(i)=H(i)-T(i)+1,这里的H和T代表什么意思?照你这句的意思应该是每一个数组的元素是由小(T(i))变到大(H(i))的,那你又何必呢,直接用length函数不完了吗?
A:不好意思,刚刚学Matlab,所以很多功能还不会用,多谢!
4)你的U刚开始定义的时候是没问题的,但是你的后一步我看不懂了,你的语句里用了U(1,31),难道有第2行吗?当然你这样调用单行元素也没错(U(1,31)和U(31)是一个意思),但你的等式左边是一个向量哎,你想把一个向量塞到本来放一个标量的空间里去啊?
A:呵呵,U(1,31)不是这个意思,我以为可以把产生的向量赋值给U,而我的U(1,31),我以为这样一写就表明给U定义了一个一行31列的矩阵。这样就可以把产生的向量放进去了。没想到不是这样的。但是关于这一点,我还是不懂怎么定义一个空的矩阵,然后把产生的向量放进去。
5)最离谱的就是这句U(1,Ft(i))=T(i):1:H(i);,你的Ft(i)到底是干嘛用的?整个语句和你在4)里犯的错误一模一样。再有你的T(i)~H(i)是一个向量,而且按你的意思它们的个数还有一样,不管你想把这个向量按行方向摆还是按列方向摆都是缺胳膊短腿的。
A:那个Ft(i)就是产生向量的长度。从上面的解释你应该知道我想干什么了吧!呵呵

是的,你没讲清楚,很不清楚,而且你的标题也定得与题意不切实际,所以我决定扣你两分。

btw:哥们,你程序有问题请大家帮你改,这没问题,但是起码你也得把自已想干什么弄清楚再来吧?!
回复 不支持

使用道具 举报

发表于 2010-8-11 10:55:45 | 显示全部楼层 来自 黑龙江哈尔滨
本帖最后由 messenger 于 2010-8-11 10:58 编辑

lengyunfeng版主请假了,我来试着回答你的问题。

你的这个问题有2种解决方法。一种是像4#说的,用cell数组。另一种方法是用M=max(Ft)命令求出你数组的列数的最大值,然后生成一个列数为M的矩阵,将数组都装进去,不足最大列数的元素用零添充。

用cell数组比较直观,但计算时不如矩阵方便。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2010-8-12 08:29:38 | 显示全部楼层 来自 江苏常州
6# messenger
messenger:
你可以看我在#5楼的回复,其实我的意思不是在1楼所表达的那个意思!
回复 不支持

使用道具 举报

发表于 2010-8-12 09:03:24 | 显示全部楼层 来自 浙江宁波
既然数组有长有短,可能你的矩阵里面有些值为0或者其他值了,这样的话还是简单的。
可以给我发短消息
回复 不支持

使用道具 举报

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

本版积分规则

Simapps系列直播

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

GMT+8, 2024-10-6 19:27 , Processed in 0.057175 second(s), 21 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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