matlab 找最近点函数,在MATLAB中找到点和曲线之间的最小距离

当有人说“其复杂的”答案总是过于复杂,因为我从来不知道你有什么。所以我会介绍一些基本的想法。

如果曲线是已知的非线性函数,则使用符号工具箱开始。例如,考虑函数y = x^3-3 * x + 5,以及x,y平面中的点(x0,y0)=(4,3)。

写下距离的平方。欧几里德距离很容易写。

(x - x0)^2 + (y - y0)^2 = (x - 4)^2 + (x^3 - 3*x + 5 - 3)^2

所以,在MATLAB中,我会用符号工具箱来完成这个工作。最小距离必须位于一阶导数的根部。

sym x

distpoly = (x - 4)^2 + (x^3 - 3*x + 5 - 3)^2;

r = roots(diff(distpoly))

r =

-1.9126

-1.2035

1.4629

0.82664 + 0.55369i

0.82664 - 0.55369i

我对复杂的根没有兴趣。

r(imag(r) ~= 0) = []

r =

-1.9126

-1.2035

1.4629

哪一个是距离平方的最小值?

subs(P,r(1))

ans =

35.5086

subs(P,r(2))

ans =

42.0327

subs(P,r(3))

ans =

6.9875

这是距离的平方ÿ

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值