24小时热门版块排行榜    

Znn3bq.jpeg
查看: 1481  |  回复: 7

tao317594856

金虫 (小有名气)

[求助] 关于Matlab中for循环的问题,求达人指点,谢谢了 已有1人参与

c1=[];
c2=[];
N=100000;
a1=-pi/2+2*(pi/2)*rand(N,1);
a2=-pi/3+2*(pi/3)*rand(N,1);
a4=-pi/2+2*(pi/2)*rand(N,1);
a5=-pi/3+2*(pi/3)*rand(N,1);
b=cos(a1+a4)./10 + cos(a1)./10 + (cos(a1 + a4).*cos(a5))./5 + (cos(a1).*cos(a2))./5;
c=sin(a1+a2)./10+sin(a1+a4)./10+sin(a1)./10+sin(a1-a2)./10+(sin(a1+ a4).*cos(a5))./5;
d=sin(a2)./5 + sin(a5)./5;
c1=[c1 d]; %将Z轴数值赋值到C1中
c2=[c2 b c]; %将x、y轴数值赋值到C2中
c11=max(c1);
c12=min(c1) %求出Z轴的最大值和最小值
% 定义Z轴分隔间隔的大小
syms derta1
% 定义Z轴分隔的数目
k1=3;
xl=abs(c11-c12);    %求解Z坐标最大值与最小值的差
derta1=xl/k1;
c3=[c1 c2];
c4=sortrows(c3,1);
for j=1:k1-1
    c5{j}=[];
for i=1:N
if c4(i,1)<=(c12+(xl/k1)*(j+1))&&c4(i,1)>(c12+(xl/k1)*(j))
c5{j}=[c5{j};c12+derta1*(j-1) c4(i,2) c4(i,3)]; %%%%%%%%%%% 不同点,改其横坐标为分段数值
end
end
end

以上是我写的程序,问题是从第一个for循环开始的。我想要在判断出来if 条件后,将满足条件的C4中的行矩阵赋值为[] 空集,这样就可以大大的减小循环时间,可是我没有写出来 ,写成如下的程序后
k3=0
for j=1:k1-1
    c5{j}=[];
    k2=1
   for i=k2:N-k3
if c4(i,1)<=(c12+(xl/k1)*(j+1))&&c4(i,1)>(c12+(xl/k1)*(j))
c5{j}=[c5{j};c12+derta1*(j+0.5) c4(i,2) c4(i,3)] %%%%%%%%%%% 不同点,改其横坐标为分段数值
c4(i,=[]
k2=i
k3=k3+1
else
    k2=k2+1
end
end
end
发现,for 循环后面跟的循环体在循环过程中是不能变化的,因此没办法再每次循环到符合条件的C4矩阵中的行抽离出来,导致将数据分多少层就需要进行N(数据点数)*K(分层数)次计算。
不知道有什么别的方法可以实现每循环一次,遇到符合条件的变量就抽离出来,在进行下一次循环的时候就可以扫描N-1个数据了,然后还能继续运行呢?求大神指教啊,
求大神指教!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tao317594856

金虫 (小有名气)

自己先顶一下
2楼2014-10-31 23:37:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zhswee

铁杆木虫 (著名写手)

不清楚你要实现什么。

[ 发自小木虫客户端 ]
3楼2014-11-01 00:51:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

johnliu1983

至尊木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
你可以把内层循环改成这样的试试,把for i=1:N,改成 for i=1:length(c4)
然后再删数据。这样每次循环到内循环的时候就会改变循环次数了。有什么不明白的再问我。
4楼2014-11-01 06:14:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tao317594856

金虫 (小有名气)

引用回帖:
4楼: Originally posted by johnliu1983 at 2014-11-01 06:14:24
你可以把内层循环改成这样的试试,把for i=1:N,改成 for i=1:length(c4)
然后再删数据。这样每次循环到内循环的时候就会改变循环次数了。有什么不明白的再问我。

首先,我是想内循环的时候,每循环判定符合条件1次,c4就减少符合条件的相应的一行,而您所说的是在最外部每次取K值的时候,减少响应符合上一次k值条件的所有的行。
其次,即使把for i=1:N,改成 for i=1:length(c4),将程序写成如下:
for j=1:k1-1
    c5{j}=[];
for i=1:length(c4)
if c4(i,1)<=(c12+(xl/k1)*(j+1))&&c4(i,1)>(c12+(xl/k1)*(j))
c5{j}=[c5{j};c12+derta1*(j+0.5) c4(i,2) c4(i,3)]; %%%%%%%%%%% 不同点,改其横坐标为分段数值
c4(i,=[];
end
end
end
也是无法执行的,因为for 后面的 i=1:length(c4),已经确定i是从1执行到c4的初始长度了,在该循环下c4的长度是不能改变的

最后,还请您再帮忙思考思考,怎么能在内循环层里,每次遇到满足条件的就剔除,然后还能在循环体 里直接执行新C4的行数次数的循环呢,是不是有别的循环循环函数之类的可以满足要求呢,因为这样可以大量减小计算量,有很大优势的。
5楼2014-11-01 11:19:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tao317594856

金虫 (小有名气)

自己再顶一下,防止帖子沉了
6楼2014-11-01 11:19:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tao317594856

金虫 (小有名气)

引用回帖:
3楼: Originally posted by zhswee at 2014-11-01 00:51:31
不清楚你要实现什么。

就是将三维散点数据按Z轴分段啊
7楼2014-11-01 14:07:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

johnliu1983

至尊木虫 (著名写手)

引用回帖:
5楼: Originally posted by tao317594856 at 2014-11-01 11:19:30
首先,我是想内循环的时候,每循环判定符合条件1次,c4就减少符合条件的相应的一行,而您所说的是在最外部每次取K值的时候,减少响应符合上一次k值条件的所有的行。
其次,即使把for i=1:N,改成 for i=1:length(c ...

您好,如果用c4(i,=[];执行这个之后,再用length(c4)的值就会相应的少一个。其它的我就没有时间看了。不过我写这个有问题,你应该把length(c4),改成size(c4,1),我之前是随便看了一下,没想到是好几列,应该有这个。
8楼2014-11-01 21:01:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tao317594856 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 344 材料专业 求调剂211 无地域要求 +8 hualkop 2026-04-11 8/400 2026-04-12 22:24 by fqwang
[考研] 366求调剂 +8 不知名的小卅 2026-04-11 8/400 2026-04-12 19:49 by zhouxiaoyu
[考研] 一志愿双非085400电子信息344 求调剂,对材料和化学方向也感兴趣 +11 无情的小羊 2026-04-09 12/600 2026-04-12 17:41 by 686666
[考研] 305求调剂 +7 玛卡巴卡boom 2026-04-11 7/350 2026-04-12 07:35 by zhouxiaoyu
[考研] 331求调剂 +5 王国帅 2026-04-11 5/250 2026-04-11 22:56 by 溪涧流水
[考研] 药学专硕调剂 +8 ? 一路生?花? 2026-04-10 10/500 2026-04-11 21:21 by zhouxiaoyu
[考研] 求调剂 +3 胃痉挛累了 2026-04-11 5/250 2026-04-11 14:13 by luhong1990
[考研] 0854调剂 +5 音像店听花鼓戏 2026-04-10 5/250 2026-04-11 10:49 by qingpingzhu
[考研] 283求调剂,工科! +12 苏打水7777 2026-04-08 12/600 2026-04-11 10:28 by 逆水乘风
[考研] 广东省 085601 329分求调剂 +14 Eddieddd 2026-04-10 14/700 2026-04-11 09:58 by bljnqdcc
[考研] 368求调剂 +3 17385968172 2026-04-10 3/150 2026-04-10 20:12 by 电子奥德彪
[考研] 085404 298分求调剂 +10 呼啦呼啦呼呼呼 2026-04-10 11/550 2026-04-10 16:44 by wangy0907
[考研] 0702物理学学硕299求调剂 +6 祁柒连 2026-04-06 6/300 2026-04-10 11:10 by Roomoo
[考研] 085400电子信息类(川大控制工程)求调剂可跨专业 求老师联系 +3 626776879 2026-04-08 3/150 2026-04-09 16:05 by 猪会飞
[考研] 086000生物与医药调剂 +7 awwwwwooooo 2026-04-09 7/350 2026-04-09 13:31 by 北极159263
[考研] 286求调剂 +19 Faune 2026-04-08 20/1000 2026-04-09 08:36 by 哦哦123
[考研] 机械专硕273请求调剂 +6 庚申壬申 2026-04-07 6/300 2026-04-08 22:41 by bljnqdcc
[考研] 0703化学调剂 348分 +14 唉我超真没招了 2026-04-06 15/750 2026-04-08 19:16 by 我减肥1
[考研] 277求调剂 +4 考研调剂lxh 2026-04-06 6/300 2026-04-08 10:40 by 逆水乘风
[考研] 材料调剂 +11 一样YWY 2026-04-07 11/550 2026-04-07 15:13 by shdgaomin
信息提示
请填处理意见