北京石油化工学院2026年研究生招生接收调剂公告
查看: 1467  |  回复: 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

金虫 (小有名气)

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

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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 085600,材料与化工321分求调剂 +10 大馋小子 2026-03-28 10/500 2026-03-29 23:35 by 飞行日记西
[考研] 309求调剂 +7 谁不是少年 2026-03-29 7/350 2026-03-29 13:17 by mumin1990
[考研] 一志愿北京理工大学本科211材料工程294求调剂 +8 mikasa的围巾 2026-03-28 8/400 2026-03-29 12:48 by 无际的草原
[考研] 318一志愿吉林大学生物与医药 求调剂 +4 笃行致远. 2026-03-28 4/200 2026-03-29 11:55 by longlotian
[考研] 0703化学 +11 妮妮ninicgb 2026-03-27 11/550 2026-03-29 06:45 by 544594351
[考研] 332求调剂 +4 @MZB382400 2026-03-28 4/200 2026-03-28 21:02 by 唐沐儿
[考研] 295材料工程专硕求调剂 +7 1428151015 2026-03-27 7/350 2026-03-28 19:58 by S240
[考研] 283求调剂 +3 A child 2026-03-28 3/150 2026-03-28 15:41 by ms629
[考研] 346求调剂 一志愿070303有机化学 +3 萝卜炖青菜 2026-03-28 3/150 2026-03-28 14:11 by 唐沐儿
[考研] 一志愿南京航空航天大学材料学硕求调剂 +3 @taotao 2026-03-28 3/150 2026-03-28 10:26 by JourneyLucky
[考研] 085404求调剂,总分309,本科经历较为丰富 +4 来财aa 2026-03-25 4/200 2026-03-28 07:41 by 棒棒球手
[考研] 315分求调剂 +7 26考研上岸版26 2026-03-26 7/350 2026-03-28 04:05 by fmesaito
[考研] 308求调剂 +7 墨墨漠 2026-03-25 7/350 2026-03-27 14:47 by 狂炫麦当当
[考研] 调剂推荐 +5 清酒714 2026-03-26 6/300 2026-03-27 11:12 by 不吃魚的貓
[考研] 343求调剂 +4 赠我一本书 2026-03-23 4/200 2026-03-27 00:40 by wxiongid
[考研] 281求调剂 +6 Koxui 2026-03-24 7/350 2026-03-26 15:37 by 无际的草原
[考研] 环境专硕324分求调剂推荐 +5 轩小宁—— 2026-03-26 5/250 2026-03-26 12:05 by i_cooler
[考研] 26考研-291分-厦门大学(085601)-柔性电子学院材料工程专业求调剂 +3 min3 2026-03-24 4/200 2026-03-25 18:22 by xcjcqu
[考研] 网络空间安全0839招调剂 +4 w320357296 2026-03-25 6/300 2026-03-25 17:59 by 255671
[考研] 调剂 +4 13853210211 2026-03-24 4/200 2026-03-24 19:44 by ms629
信息提示
请填处理意见