声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1568|回复: 4

[编程技巧] 急求如何缩短此程序的运行时间,双循环加if结构

[复制链接]
发表于 2011-6-14 09:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
程序如下,其中t(i)是结构体变量,xii,yii,zii都是有243200个分量的向量,分别代表x,y,z坐标。程序的目的是如果有同一k值的xii,yii,zii与t(i)的坐标相差在规定范围内,就用t(i)的分量代替。此程序要运行三天三夜才出结果,求高手优化一下,感激不尽(我把第二个for改成k=1:243200;速度是快了,但结果不对)
for i=1:185998
for k=1:243200
if abs(t(i).x-xii(k))<=75 & abs(t(i).y-yii(k))<=75 & abs(t(i).z-zii(k))<=40
xii(k)=t(i).nx0;
yii(k)=t(i).ny0;
zii(k)=t(i).nz0;
continue
end
end
end
回复
分享到:

使用道具 举报

发表于 2011-6-14 11:01 | 显示全部楼层
本帖最后由 ChaChing 于 2011-6-14 22:51 编辑

回复 1 # viviani1 的帖子

先看下这些帖, LZ将功力大增
1.matlab矢量化编程技巧集锦 http://forum.vibunion.com/thread-41583-1-1.html
2.[原创] 提高matlab运行速度的一点心得 http://forum.vibunion.com/thread-25305-1-1.html
  [原创] 提高matlab运行速度的一点心得(之二) http://forum.vibunion.com/thread-26449-1-1.html
  [原创]提高matlab运行速度和节省空间的一点心得(之三) http://forum.vibunion.com/thread-33199-1-1.html
  [原创]关于Profiler的介绍和使用心得 http://forum.vibunion.com/thread-32293-1-1.html
  matlab 的内存如何管理 http://forum.vibunion.com/thread-35912-1-1.html
From http://forum.vibunion.com/home-space-uid-63979-do-blog-id-18250.html

ps:有问题再提! 并期待LZ的结果分享

 楼主| 发表于 2011-6-14 20:22 | 显示全部楼层
回复 2 # ChaChing 的帖子

谢谢你的热心解答,我直接把算法的思路修改了一下,程序如下:
for k=1:243200
[C,I]=min((xii(k)-t.x).^2+(yii(k)-t.y).^2+(zii(k)-t.z).^2);
xii(k)=t(I).nx0;
yii(k)=t(I).ny0;
zii(k)=t(I).nz0;
end
其中t是结构体变量,但是运行结果出现错误,显示为??? Error using ==> minus
Too many input arguments.
t.x是1x189599的向量,不会是因为这个t.x太大了吧?
发表于 2011-6-14 23:50 | 显示全部楼层
回复 3 # viviani1 的帖子

没LZ资料, 结构体变量不常用, 随便试下
运行不会出现错误!?
  1. xii=rand(1,243200);yii=rand(1,243200);zii=rand(1,243200);
  2. tx=rand(1,185998); ty=rand(1,185998); tz=rand(1,185998);
  3. for k=1:243200
  4.     dd=(xii(k)-tx).^2+(yii(k)-ty).^2+(zii(k)-tz).^2;
  5.     [C,I]=min(dd);
  6.     xii(k)=tx(I); yii(k)=ty(I); zii(k)=tz(I);
  7. end
复制代码

评分

1

查看全部评分

 楼主| 发表于 2011-6-15 11:05 | 显示全部楼层
回复 4 # ChaChing 的帖子

非常感谢,运行时出现的错误应该和结构体有关,您给的这段程序运行就没有问题,我用这个语句:for i=1:185998
    tx(i)=t(i).x; ty(i)=t(i).y; tz(i)=t(i).z;
把结构体改成向量的形式就没有问题了,不明白为什么换成结构体就不行
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-11 01:16 , Processed in 0.056401 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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