24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1471  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 311求调剂 +8 李芷新1 2026-03-31 8/400 2026-04-01 01:39 by 1018329917
[考研] 288求调剂 一志愿哈工大 材料与化工 +19 洛神哥哥 2026-03-31 19/950 2026-04-01 01:35 by 1018329917
[考研] 346求调剂 一志愿070303有机化学 +11 萝卜炖青菜 2026-03-28 12/600 2026-03-31 17:54 by xhai2011
[考研] 考研生物与医药调剂 +6 铁憨憨123425 2026-03-31 6/300 2026-03-31 17:48 by 544594351
[考研] 086000生物与医药 初试274求调剂 +4 小叮当来了 2026-03-30 4/200 2026-03-31 16:48 by shengliu165
[考研] 理学07化学 303求调剂 +8 睿08 2026-03-27 8/400 2026-03-31 16:31 by 690616278
[考研] 求收留 +8 1943443204 2026-03-28 8/400 2026-03-31 15:00 by -迷了路啊路
[考研] 化学工程085602 305分求调剂 +28 RichLi_ 2026-03-25 36/1800 2026-03-31 14:56 by JourneyLucky
[考研] 生物学 296 求调剂 +7 朵朵- 2026-03-26 9/450 2026-03-31 14:26 by jp9609
[考博] 材料专业申博 +5 杜雨婷dyt 2026-03-29 5/250 2026-03-31 11:19 by oooqiao
[考研] 一志愿大连理工大学,机械工程学硕,341 +3 西瓜田的守望者 2026-03-30 3/150 2026-03-31 11:08 by asdfzly
[考研] 276求调剂 +3 赵久华 2026-03-29 3/150 2026-03-31 10:06 by cal0306
[考研] 269求调剂 +4 我想读研11 2026-03-31 4/200 2026-03-31 10:04 by cal0306
[考研] 370求调剂 +3 080700调剂 2026-03-30 3/150 2026-03-31 01:09 by A_Zhe
[考研] 求调剂 +10 家佳佳佳佳佳 2026-03-29 10/500 2026-03-30 18:34 by 544594351
[考研] 342求调剂 +4 加油a李zs 2026-03-26 4/200 2026-03-30 16:39 by 晶体之美
[考研] 296求调剂 +10 彼岸t 2026-03-29 10/500 2026-03-30 10:50 by 探123
[考研] 275求调剂 +15 Micky11223 2026-03-25 20/1000 2026-03-29 20:44 by 唐沐儿
[考研] 321求调剂 +7 璞玉~~ 2026-03-25 8/400 2026-03-29 06:41 by 544594351
[考研] 机械学硕310分,数一英一,一志愿211本科双非找调剂信息 +3 @357 2026-03-25 3/150 2026-03-26 16:34 by by.MENG
信息提示
请填处理意见