查看: 535|回复: 4|关注: 0

[已解决] 为什么会出现这种情况

[复制链接]

新手

15 麦片

财富积分


050


20

主题

62

帖子

0

最佳答案
snipaste20180515_205737.png
由于for 循环会覆盖之前的数值,我想把每一次计算的数值存储下来,pp矩阵的格式就是这样的格式。
请问该怎么改

for k=1:3:19*3
    for i=1:n1+1:length(p)
   
        pp(k,:)=[p(1,i:i+n1);p(2,i:i+18);p(3,i:i+18)];
    end
end

论坛优秀回答者

中级

757 麦片

财富积分


5001500


2

主题

641

帖子

142

最佳答案
  • 关注者: 16
发表于 2018-5-16 07:44:30 | 显示全部楼层 |此回复为最佳答案
如果想简单解决的话,pp为cell形式就可以解决:
也就是pp(k,:)=[p(1,i:i+n1);p(2,i:i+18);p(3,i:i+18)];
更改为pp(k,:)={[p(1,i:i+n1);p(2,i:i+18);p(3,i:i+18)]};
这样更改pp作为cell保存数据,而非矩阵。

另外,你的k是每隔3个取一个值,pp(k,:)这种形式会造成保存数据不连续,浪费存储空间。

新手

15 麦片

财富积分


050


20

主题

62

帖子

0

最佳答案
 楼主| 发表于 2018-5-16 10:08:26 | 显示全部楼层
TCCMATLAB 发表于 2018-5-16 07:44
如果想简单解决的话,pp为cell形式就可以解决:
也就是pp(k,=;
更改为pp(k,={};

大神,我用你的方法解决了,但是为啥有会出现这种情况
snipaste20180516_100258.png

新手

18 麦片

财富积分


050


0

主题

25

帖子

3

最佳答案
发表于 2018-5-16 15:06:11 | 显示全部楼层
首先程序是一个整体,二楼或许可以解决你原始的问题,但会产生更多的后续问题,因为你后面的实现步骤依赖于前面变量的定义。如果你将向量储存在元胞数组中,那么后面也应该调用元胞数组。所以,最好将全部程序附上,才能修改至无误。

我猜测楼主的想法是想将x储存在1,4,7行,y储存在2,5,8行,z储存在3,6,9行,循环没问题,主要是赋值不对。p1,p2,p3是行向量,如果用分号隔开再组合那就表示一个矩阵,你能讲一个矩阵储存在pp的第k行么?
所以按照思路可以这样写:首先确保n1=18!

for k=1:3:19*3
    for i=1:n1+1:length(p)
   
        pp(k,:)=p(1,i:i+n1);
        pp(k+1,:)=p(2,i:i+18);
        pp(k+2,:)=p(3,i:i+18);
    end
end

论坛优秀回答者

中级

757 麦片

财富积分


5001500


2

主题

641

帖子

142

最佳答案
  • 关注者: 16
发表于 2018-5-16 21:31:41 | 显示全部楼层
sniper00 发表于 2018-5-16 10:08
大神,我用你的方法解决了,但是为啥有会出现这种情况

后续如果有调用的话,也要使用cell的调用方法才行。
如果调用不多的话,matlab doc文档中查看一下cell的使用。

如果后面调用很多,使用cell不方便,先参考四楼的方法,看是不是你想要的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /3 下一条

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