| 查看: 1292 | 回复: 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个数据了,然后还能继续运行呢?求大神指教啊, 求大神指教! |
» 猜你喜欢
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
论文投稿,期刊推荐
已经有6人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
孩子确诊有中度注意力缺陷
已经有14人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
» 本主题相关价值贴推荐,对您同样有帮助:
Vasp 5.2 lib编辑错误 求达人指点 谢谢
已经有23人回复
Information Technology Journal第一轮被拒,求达人指点ITJ投稿经验
已经有6人回复
换热计算问题,望达人指点!!
已经有18人回复
【求助】MATLAB 如何解矩阵方程(达人救命)
已经有6人回复
tao317594856
金虫 (小有名气)
- 应助: 2 (幼儿园)
- 金币: 1271.8
- 散金: 128
- 红花: 2
- 帖子: 232
- 在线: 153.6小时
- 虫号: 1476658
- 注册: 2011-11-04
- 性别: GG
- 专业: 机构学与机器人
|
首先,我是想内循环的时候,每循环判定符合条件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
zhswee
铁杆木虫 (著名写手)
- 应助: 130 (高中生)
- 金币: 6195.7
- 散金: 400
- 红花: 19
- 帖子: 2416
- 在线: 398.7小时
- 虫号: 2658798
- 注册: 2013-09-16
- 专业: 力学
3楼2014-11-01 00:51:31
johnliu1983
至尊木虫 (著名写手)
- 应助: 43 (小学生)
- 金币: 15091.3
- 红花: 8
- 帖子: 2426
- 在线: 149.7小时
- 虫号: 370817
- 注册: 2007-05-14
- 性别: GG
- 专业: 物理学II
4楼2014-11-01 06:14:24
tao317594856
金虫 (小有名气)
- 应助: 2 (幼儿园)
- 金币: 1271.8
- 散金: 128
- 红花: 2
- 帖子: 232
- 在线: 153.6小时
- 虫号: 1476658
- 注册: 2011-11-04
- 性别: GG
- 专业: 机构学与机器人
6楼2014-11-01 11:19:47













=[]
回复此楼