資源簡介
計算測地距離的matlab代碼,包括Dijkstra和Floyd 兩種方法的代碼,以及一個瑞士卷的例子

代碼片段和文件信息
clc;??
clear?all;??
close?all;??
%?%?用mds對瑞士卷降維????
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??瑞士卷的生成圖??
N=1000;??
t=(3*pi/2)*(1+2*rand(1N));??
s=21*rand(1N);??
X=[t.*cos(t);s;t.*sin(t)];??
plot3(X(1:)X(2:)X(3:)‘.‘)??
%計算距離矩陣個??
X=X‘;???????????%X行代表樣本個數1000*3
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%??其他數據??
clc;??
clear?all;??
close?all;??
load?MAIN_data
MAIN_data1=MAIN_data(:1:32);
MAIN_data2=MAIN_data(:322:330);
MAIN_data=[MAIN_data1MAIN_data2];
X=[MAIN_data(1:180:);MAIN_data(541:720:);MAIN_data(1081:1260:);MAIN_data(1621:1800:)];????%取信號小波包分解后的能量特征
[mn]=size(X);??%m是行,n是列數
D=zeros(mm);?
%計算樣本之間的歐式距離
for?i=1:m??????
????for?j=i:m??????????
????????D(ij)=norm(X(i:)-X(j:));??????%n?=?norm(v)?返回向量v的2-范數或歐幾里得范數。????
????????D(ji)=D(ij);???????????????????%一個距離矩陣是對稱矩陣
????end
end
%D為歐式距離矩陣
%計算矩陣中每行前k個值的位置并賦值(先按大小排列)??
W1=zeros(mm);??
k=90;??
for?i=1:m??
????A=D(i:);??
????t=sort(A(:));??????????????????%對每行進行排序后構成一個從小到大有序的列向量??
????[rowcol]=find(A<=t(k)k);?????%找出每行前K個最小數的位置row和col是行和列下標??
????for?j=1:k??
????????c=col(1j);???
????????W1(ic)=D(ic);????????????%W1(ic)=1;%給k近鄰賦值為距離??
????end
end
for?i=1:m??????
????for?j=1:m??????????
????????if?W1(ij)==0&i~=j??????????????
????????????W1(ij)=inf;??????????
????????end
????end
end
%計算測地距離,Q是每個點到其他點的測地距離矩陣
[distmypathQ]=myfloyd(W114);??
dist??
mypath????
[colrol]=size(mypath)??%rol是mypath即路徑長度
X1=[];??
for?i=1:rol??????
????ding=mypath(1i);??????
????X1=[X1;X(ding:)];??
end
plot3(X(:1)X(:2)X(:3)‘.‘)??
hold?on??
plot3(X1(:1)X1(:2)X1(:3)‘o-r‘)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-06?17:06??計算測地距離\
?????文件????????1870??2018-10-06?17:06??計算測地距離\Example.m
?????文件????????1061??2018-10-06?17:06??計算測地距離\mydijkstra.m
?????文件?????????703??2018-10-06?17:06??計算測地距離\myfloyd.m
評論
共有 條評論