matlab的mink函数

mink函数

近期由于地统计的课程要编写克里格插值方法,会涉及到对一个坐标点求其邻域范围内最近的4个点,如何在matlab里较为快速的方式来找到最近的点呢

1. 输入

输入是各个点的坐标值

2. 输出

输出为离目标坐标点最近的四个点的序号(索引)

3. mink函数用法

B = mink(A,k) 返回 A 的 k 个最小元素。
如果 A 是向量,则 mink 返回一个向量,其中包含 A 的 k 个最小元素。
如果 A 是矩阵,则 mink 返回一个矩阵,该矩阵的列包含 A 的每一列中的 k 个最小元素。
如果 A 是多维数组,则 mink 返回大小不等于 1 的第一个维度上的 k 个最小元素。
运算维度,指定为正整数标量。默认情况下,mink 沿其大小不为 1 的第一个维度进行运算。
例如,如果 A 是矩阵,则 mink(A,k,1) 沿 A 的行进行运算,计算每一列的最小值
mink(A,k,2) 沿 A 的列进行运算,计算每一行的最小值。
[B,I] = mink(A,k) 计算 A 的 k 个最小值的索引,并在 I 中返回这些索引。

代码实例

data=[652753.64762600000	3401386.13520000000
651398.23551100000	3401243.71019000000
650757.32551100000	3397599.36602000000
650383.78438800000	3397655.75152000000
648218.09904800000	3400244.31901000000
649289.90303600000	3399735.42808000000
648800.23382300000	3396647.88481000000
647428.12291900000	3395735.58427000000
647470.40602700000	3398478.01034000000
648293.25574800000	3394792.44465000000
];
xy=[6.0087e+05,3.3647e+06];
%计算样点离xy距离平方
num_neighbor=4;%邻近点数
D2=(data(:,1)-xy(1)).^2+(data(:,2)-xy(2)).^2;
[D,tag]=mink(D2,num_neighbor);%tag表示最近的4个点D表示对应的距离平方
Dc_neighbor=sqrt(D);
tag_neighbor=tag;%最近的4个点的索引

总结

如果原始点数较多,那么此方法是比较快能够搜索到最近的k个点的方法,如果对计算距离后的距离列向量进行排序sort函数操作再来取前四个对应得索引,无疑会增加时间复杂度。第一次推送博客,如有错误之处还请勘正!

参考链接

https://ww2.mathworks.cn/help/matlab/ref/mink.html

上一篇:14、OSPF学习心得2


下一篇:sanic 路由