1 建议:
自己重写distance函数,matlab自带的函数由于考虑通用性,性能会较低。
2 我的做法:
将函数中的运算一步一步提取出来,最后,代码:
tic
clear;
% nfarms=3526;
nfarms = 1000;
disp(['nfarms is ',num2str(nfarms)]);
farmlati=(37+rand(nfarms,1))*(pi/180);
farmlongi=(-99+rand(nfarms,1))*(pi/180);
disfarmfarm=zeros(nfarms,nfarms);
ellipsoid = geoidtst(almanac('earth','ellipsoid'));
for i=1:1:nfarms
disfarmfarm(i,i+1:nfarms) = shortgeodesicdist(farmlati(i)*ones(length(i+1:nfarms),1), farmlongi(i)*ones(length(i+1:nfarms),1),farmlati(i+1:nfarms), farmlongi(i+1:nfarms),ellipsoid);
end
disfarm=disfarmfarm+disfarmfarm';
toc
3 运行时间
在我的电脑上运行消耗时间情况如下:
>> temp0521
nfarms is 100