evan910 发表于 2008-5-5 16:22

請教matlab迴圈改善的方法與技巧....

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

首先是資料的部分:
loc =

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, :) = ;
     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列嗎?請賜教。謝謝。

sigma665 发表于 2008-5-5 18:36

回复 楼主 的帖子

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

evan910 发表于 2008-5-8 09:42

我去參考看看,謝謝。希望可以獲得幫助。
页: [1]
查看完整版本: 請教matlab迴圈改善的方法與技巧....