用matlab通过8个已知点求n个未知点坐标,使这8+n个点间距离和最短 100
3个回答
展开全部
因为,8个点已知,要使得所有点距离和最小,另外n个点肯定在这8个点的x,y坐标范围之间,所以简单给你陈述下我的想法:
(因为你没有给出具体的数据,所以只给你陈述下算法),中心思想是用枚举法,(目前只想到这个麻烦点的方法^^,并且这个方法算出的n个点的精度只能是你在程序中设置的,此处设置精度为0.01,你可以任意修改)
step1: 首先比较出8个坐标中的x,y的范围,设xE[a,b]; yE[c,d],(E在此表示属于的意思);
step2: 然后设置距离和的一个初始值,如:sum;
step3: 假设所求点的精度为0.01,开始循环n个点的坐标,使得这n个点的坐标循环的范围为{x,y}其中xE[a:0.01:b],yE[c:0.01:d],(并且如果你不想n个点重复的话,可设置相应的限制条件),用距离公式求所有点的距离和,每循环一次,就更新一下这个距离总和sum,将最小值赋给sum;用两个loop来实现上述功能,如:先循环x值,外面嵌套y值循环的大loop即可;
step4: 达到循环条件,跳出循环,return sum,程序结束。
good luck~
(因为你没有给出具体的数据,所以只给你陈述下算法),中心思想是用枚举法,(目前只想到这个麻烦点的方法^^,并且这个方法算出的n个点的精度只能是你在程序中设置的,此处设置精度为0.01,你可以任意修改)
step1: 首先比较出8个坐标中的x,y的范围,设xE[a,b]; yE[c,d],(E在此表示属于的意思);
step2: 然后设置距离和的一个初始值,如:sum;
step3: 假设所求点的精度为0.01,开始循环n个点的坐标,使得这n个点的坐标循环的范围为{x,y}其中xE[a:0.01:b],yE[c:0.01:d],(并且如果你不想n个点重复的话,可设置相应的限制条件),用距离公式求所有点的距离和,每循环一次,就更新一下这个距离总和sum,将最小值赋给sum;用两个loop来实现上述功能,如:先循环x值,外面嵌套y值循环的大loop即可;
step4: 达到循环条件,跳出循环,return sum,程序结束。
good luck~
展开全部
你这题肯定有问题。有一些东西没有说清楚。
我只要找到一个未知点坐标,使得它跟这己知的8个点距离的和最短。
然后后续n-1个点与这个未知点重合。
即可。
这题难度不小
我只要找到一个未知点坐标,使得它跟这己知的8个点距离的和最短。
然后后续n-1个点与这个未知点重合。
即可。
这题难度不小
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
wacs5
只要找到一个未知点坐标,使得它跟这己知的8个点距离的和最短。
然后后续n-1个点与这个未知点重合。即可。
本题的题意:求出一个点,使得它跟这己知的8个点距离的和最短。
下面是程序。
close all
clear,clc
% 8个已知点
x1 = rand(8,1);
y1 = rand(8,1);
% 8+n个点间距离和1
ff = @(x) sum(sqrt( (x(1)-x1).*(x(1)-x1) + (x(2)-y1).*(x(2)-y1) ))
x0 = [sum(x1)/8,sum(y1)/8] % 初始值
[x,fval] = fminunc(ff,x0) % n个未知点坐标 极值
plot(x1,y1,'*') % 8个已知点
hold on
plot(x(1),x(2),'ro') % n个未知点坐标 极小值点
只要找到一个未知点坐标,使得它跟这己知的8个点距离的和最短。
然后后续n-1个点与这个未知点重合。即可。
本题的题意:求出一个点,使得它跟这己知的8个点距离的和最短。
下面是程序。
close all
clear,clc
% 8个已知点
x1 = rand(8,1);
y1 = rand(8,1);
% 8+n个点间距离和1
ff = @(x) sum(sqrt( (x(1)-x1).*(x(1)-x1) + (x(2)-y1).*(x(2)-y1) ))
x0 = [sum(x1)/8,sum(y1)/8] % 初始值
[x,fval] = fminunc(ff,x0) % n个未知点坐标 极值
plot(x1,y1,'*') % 8个已知点
hold on
plot(x(1),x(2),'ro') % n个未知点坐标 极小值点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询