声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 853|回复: 2

[综合讨论] 請教matlab迴圈改善的方法與技巧....

[复制链接]
发表于 2008-5-5 16:22 | 显示全部楼层 |阅读模式

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

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

x
各位會使用matlab的先進、前輩。
小弟想要請教一下matlab的問題,我的程式碼如下:

首先是資料的部分:
loc = [1150.0, 1760.0; 630.0, 1660.0; 40.0, 2090.0; 750.0, 1100.0; 750.0, 2030.0;]

NumCity = length(loc);% Number of cities
distance1 = zeros(NumCity);% Initialize a distance1 matrix
for i = 1:NumCity,
  for j = 1:NumCity,
   distance1(i, j) = norm(loc(i, :) - loc(j, :));
  end
end

Npop = 3

x1 = zeros(Npop, NumCity);
for i =1:Npop
  x1(i, :) = g_evan(NumCity, distance1);
end


而g_evan的函數如下:

function routeX = g_evan(NumCity, distance1)

routeX = zeros(1, NumCity); % 先將 routeX 初始化
sc_index = round(rand*NumCity+.5); % 隨機產生一個出發起點

routeX(1) = sc_index; % 起始點指定到路徑表
rr = 2; % 下一筆路徑存放的位置

while (rr <= NumCity) % 若路徑表還沒有填滿,繼續下列動作

 j = 1; % 存城市與距離
 i = 1; % 重設 i
 clear tt2;

 for i = 1:NumCity
  if i ~= routeX
  t1 = distance1(sc_index, i); % 記錄城市間的距離

   if j < NumCity
     tt2(j, :) = [i t1];
     j = j+1;
   end
  end
 end

x1 = min(tt2(:, 2)); % 取最小值
x2 = tt2(find(tt2(:, 2) == x1)); % 取得擁有最小值的城市 id

routeX(rr) = x2; % 更新路徑表
sc_index = x2; % 指定成下一個城市出發點
rr = rr + 1;
end

end


======================

我想要請問一下,在:
for i =1:Npop
x1(i, :) = g_evan(NumCity, distance1);
end
這一段有沒有更有效率的寫法,因為當我的資料量一大時,整個速度就被拖慢了。
我是matlab的新手,我只會一次處理1列,有辦法一次處理3列嗎?請賜教。謝謝。
回复
分享到:

使用道具 举报

发表于 2008-5-5 18:36 | 显示全部楼层

回复 楼主 的帖子

请参照置顶贴里的矢量编程

评分

1

查看全部评分

 楼主| 发表于 2008-5-8 09:42 | 显示全部楼层
我去參考看看,謝謝。希望可以獲得幫助。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-3 08:35 , Processed in 0.084990 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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