如何计算一个python函数来计算/绘制点和曲线之间的最小距离?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何计算一个python函数来计算/绘制点和曲线之间的最小距离?相关的知识,希望对你有一定的参考价值。

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fmin_cobyla
P = (2487,1858)  
def f(x):  
    return (1.77425666496e-05 * x**3 + -0.125555135823 * x**2 + 296.656015233 * x + -232082.382985)
def objective(X):
    x,y = X 
    return np.sqrt((x - P[0])**2 + (y - P[1])**2)
def c1(X):
    x,y = X
    return f(x) - y
X = fmin_cobyla(objective, x0=[0.1, 0.01], cons=[c1])
print ("The minimum distance is {0:1.2f}".format(objective(X)))
v1 = np.array(P) - np.array(X)
v2 = np.array([1, 2.0 * X[0]])
print ("dot(v1, v2) = ",np.dot(v1, v2))
x = np.linspace(1000, 3000, 500000)
plt.plot(x, f(x), 'r-', label='f(x)')
plt.plot(P[0], P[1], 'bo', label='point')
plt.plot([P[0], X[0]], [P[1], X[1]], 'b-', label='shortest distance')
plt.plot([X[0], X[0] + 1], [X[1], X[1] + 2.0 * X[0]], 'g-', label='tangent')
plt.axis('equal')
plt.xlabel('x')
plt.ylabel('y')
plt.show()

显示计算距离的数字显然是错误的。有人能告诉我我的代码有什么问题吗?

答案

我将问题从二维优化问题改为一维问题:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fmin_cobyla


P = (2487,1858)

def f(x):
    return (1.77425666496e-05 * x**3 + -0.125555135823 * x**2 + 296.656015233 * x + -232082.382985)

def objective(x):
    return np.sqrt((x[0] - P[0])**2 + (f(x[0]) - P[1])**2)

def c1(x):
    return 0.0


x_c = fmin_cobyla(objective, x0=2300, cons=c1)
X = [x_c , f(x_c)]

print ("The minimum distance is {0:1.2f}".format(objective(X)))


v1 = np.array(P) - np.array(X)
v2 = np.array([1, 2.0 * X[0]])

print ("dot(v1, v2) = ",np.dot(v1, v2))

x = np.linspace(1000, 3000, 500000)


plt.plot(x, f(x), 'r-', label='f(x)')

plt.plot(P[0], P[1], 'bo', label='point')

plt.plot([P[0], X[0]], [P[1], X[1]], 'b-', label='shortest distance')

plt.plot([X[0], X[0] + 1], [X[1], X[1] + 2.0 * X[0]], 'g-', label='tangent')
plt.axis('equal')

plt.xlabel('x')

plt.ylabel('y')

plt.show()

以上是关于如何计算一个python函数来计算/绘制点和曲线之间的最小距离?的主要内容,如果未能解决你的问题,请参考以下文章

Python计算PR曲线绘制:二分类PR曲线绘制多分类PR曲线绘制平均PR值计算

Python计算分类评估KS值最佳阈值及绘制KS曲线

二次贝塞尔曲线:计算点

R语言使用pROC包绘制ROC曲线实战:roc函数计算AUC值plot.roc函数绘制ROC曲线添加置信区间为回归模型中的每个因子绘制ROC曲线并在同一个图中显示出来

Python计算KS值并绘制KS曲线

绘制/计算指数曲线的问题(python、matplotlib、pandas)