gpt4 book ai didi

matlab - 在 MATLAB 中查找点和曲线之间的最小距离

转载 作者:行者123 更新时间:2023-12-01 05:02:56 28 4
gpt4 key购买 nike

我想使用 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

这是距离的平方,这里用列表中的最后一个根最小化。鉴于 x 的最小位置,我们当然可以通过代入 y(x)=x^3-3*x+5 的表达式来找到 y。

subs('x^3-3*x+5',r(3))
ans =
3.7419

因此,如果曲线可以写成如上的简单函数形式,那将是相当容易的。对于仅从平面中的一组点知道的曲线,您可以使用我的 distance2curve效用。它可以找到n维空间曲线样条插值上最接近给定点的点。

对于其他曲线,比如椭圆,通过转换为极坐标可能最容易求解,其中椭圆很容易以参数形式写成极角的函数。完成后,像之前一样写下距离,然后求解导数的根。

一个难以解决的情况是函数被描述为不太流畅。这是噪声还是不可微分曲线?例如,三次样条在某种程度上“不太平滑”。分段线性函数在中断处甚至更不平滑。如果你实际上只有一组数据点,其中有一点噪音,你必须决定是否消除噪音。您是希望在平滑近似上找到最近点,还是在插值曲线上寻找最近​​点?

对于数据点列表,如果您的目标是不进行任何平滑处理,那么我的 distance2curve 也是一个不错的选择实用程序,使用线性插值。如果你想自己进行计算,如果你有足够的数据点,那么你可以通过简单地选择最近的数据点本身来找到一个很好的近似值,但如果你的数据不是很紧密,那可能是一个很差的近似值。

如果您的问题不在其中一个类中,您通常仍然可以使用多种方法来解决它,但我需要了解有关该问题的更多细节才能提供更多帮助。

关于matlab - 在 MATLAB 中查找点和曲线之间的最小距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10539613/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com