声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 948|回复: 3

[编程技巧] 请教一个关于循环与编程的问题

[复制链接]
发表于 2009-3-26 21:16 | 显示全部楼层 |阅读模式

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

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

x
我想写一个程序 要求求出所有点之间的距离 并且在每一次求距离的过程中(比如求完第一个点和其他所有点的距离之后) 先排序 然后取出先X位(x自己定),如果距离有相同的也计入范围内,并计数,还要保存最大的距离(比如距离是 1 2 3 3 4 5,取前3位距离 那么第二个3也计入要求范围内,计数为4,最大的距离是3) ,接着求每个点的距离与最大距离的最大值并保存(就是要知道第二个点和最大距离的最大值是几 第三点和最大距离的最大值是几)。


我自己写了第一个点的所有东西 但是如何做循环(也就是把第二点及以后的点所需的数据求出来)我写不出来 死活都不对

矩阵的格式是a=[1 2;2 3;3 4;6 8]

我自己写的如下
a=load('1.txt');
na=length(a);
x=10;//这就是自己定的x位
sort(dist);
  na=length(a);
   nminpts=zeros(na,1);
    dista=zeros(na,1);
      nminpt=zeros(na,1);
          rist=zeros(na,1);
            ird=zeros(na,1);
ids=1;
     
for ii=1:ids,
    for jj=ii+1:na,
        ids=ids+1;
        nminpts(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );
         dista(ids)=sqrt( sum( (a(ii,:)-a(jj,:)).^2 ) );         
end;
end

ids=0;
  sort(dista);
        disa(minpts);
            disa=unique(dista,'rows');
k=ismember(dista,disa(minpts));
    n=find(k);
        nminpt(1)=n
rist=max(disa(minpts),nminpts);
    na=length(rist);
        t=1;
          ird(t)=1/(sum(rist)/n)

这段程序首先肯定是不太好  而且我留了许多的接口给后面的程序 希望各位前辈指教一下这个循环怎么写
另:实际上真正输出的就是各个点的X到底是几 还有就是Ird(每个点的距离与对象最大距离的最大值),其他
都可以当做中间变量用

小弟是第四天学习matlab 对于矢量化概念也不是很清楚 这段程序肯定是效率低下  但是最困扰的就是这个循环实在是不会写

先行谢谢各位前辈了
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-3-26 21:42 | 显示全部楼层
另外 各位前辈对于如何 把这种for循环精简成矢量化 有什么好的建议与改动也欢迎 小子就是抱着学习的态度来的
 楼主| 发表于 2009-3-27 10:47 | 显示全部楼层

一次循环内做多次操作

发现上个帖子自己要求说的太多 把话精简一下 我现在编一个程序求出所有点之间的距离 并且在每一次求距离的过程中(比如求完第一个点和其他所有点的距离之后做许多操作 但是我只做了第一个点的。。循环写不出来

矩阵格式:a=[1 2;2 3;3 4;6 8]

谢谢各位前辈帮忙
发表于 2009-3-27 10:59 | 显示全部楼层
help dist
:@)

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-22 17:38 , Processed in 0.057515 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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