qq_33960049 2019-06-28 09:16 采纳率: 0%
浏览 539

MATLAB求距离最小值的计算

问题:已知四个点A,B,C,D的具体位置A(0, 0),B(0, 3), C(8, 1), D(10, 5),求两个点H1,H2的具体位置,使AH1+BH1+H1H2+H2C+H2D为最短。
网上搜到如下的MATLAB代码,本人小白不知道代码是怎么求出最小值的,也不知道怎么在最后输出所求的H1,H2的坐标,望各位大神解释一下,感激不尽!

function zd
A = [0, 0];
B = [0, 3];
C = [8, 1];
D = [10, 5];

x0 = [1 1 1 1];

figure(gcf)
clf
set(gcf,'DoubleBuffer','on');
plot(A(1), A(2), 'o');
hold on
plot(B(1), B(2), 'o');
plot(C(1), C(2), 'o');
plot(D(1), D(2), 'o');
text(A(1), A(2), '  A', 'Horiz', 'left')  %文本外框左边对齐
text(B(1), B(2), '  B', 'Horiz', 'left')
text(C(1), C(2), '  C', 'Horiz', 'left')
text(D(1), D(2), 'D  ', 'Horiz', 'right')
h.H1 = plot(x0(1), x0(2), 'rp');
h.H2 = plot(x0(3), x0(4), 'rp');
h.AH1 = plot([A(1) x0(1)], [A(2) x0(2)], 'g');  %绘制绿色线段
h.BH1 = plot([B(1) x0(1)], [B(2) x0(2)], 'g');
h.H1H2 = plot([x0(1) x0(3)], [x0(2) x0(4)], 'g');
h.H2C = plot([C(1) x0(3)], [C(2) x0(4)], 'g');
h.H2D = plot([D(1) x0(3)], [D(2) x0(4)], 'g');
axis equal

opt = optimset('Display', 'iter');
x = fminunc(@sumd, x0, opt, A, B, C, D, h);


function f = sumd(x, A, B, C, D, h)
H1 = x(1:2);
H2 = x(3:4);
f = dist(A, H1) + dist(B, H1) + dist(H1, H2) + dist(H2, C) + dist(H2, D);

set(h.H1, 'XData', H1(1), 'YData', H1(2));
set(h.H2, 'XData', H2(1), 'YData', H2(2));
set(h.AH1, 'XData', [A(1) H1(1)], 'YData', [A(2) H1(2)]);
set(h.BH1, 'XData', [B(1) H1(1)], 'YData', [B(2) H1(2)]);
set(h.H1H2, 'XData', [H1(1) H2(1)], 'YData', [H1(2) H2(2)]);
set(h.H2C, 'XData', [C(1) H2(1)], 'YData', [C(2) H2(2)]);
set(h.H2D, 'XData', [D(1) H2(1)], 'YData', [D(2) H2(2)]);
title(['AH_1 + BH_1 + H_1H_2 + H_2C + H_2D = ' num2str(f,'%.3f')])
drawnow

function d = dist(p1, p2)
d = sqrt( sum( (p1-p2).^2 ) );

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 17:52
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)