当有人说“其复杂的”答案总是过于复杂,因为我从来不知道你有什么。所以我会介绍一些基本的想法。
如果曲线是已知的非线性函数,则使用符号工具箱开始。例如,考虑函数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
这是距离的平方ÿ