马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
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列嗎?請賜教。謝謝。 |