资源简介

计算测地距离的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

评论

共有 条评论