Python如何在连接两点时控制曲率

Python如何在连接两点时控制曲率,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一条原始曲线。我正在开发一个与原始曲线非常匹配的模型曲线。一切正常,但不匹配。如何控制模型曲线的曲率?下面的代码是基于 我的代码: def curve_line(point1, point2): a = (point2[1] - point1[1])/(np.cosh(point2[0]) - np.cosh(point1[0])) b = point1[1] - a*np.sinh(point1[0]) x = np.linspace(point1[0], poin

我有一条原始曲线。我正在开发一个与原始曲线非常匹配的模型曲线。一切正常,但不匹配。如何控制模型曲线的曲率?下面的代码是基于

我的代码:

def curve_line(point1, point2):
    a = (point2[1] - point1[1])/(np.cosh(point2[0]) - np.cosh(point1[0]))
    b = point1[1] - a*np.sinh(point1[0])
    x = np.linspace(point1[0], point2[0],100).tolist()
    y = (a*np.cosh(x) + b).tolist()
    return x,y
###### A sample of my code is given below
point1 = [10,100]
point2 = [20,50]
x,y = curve_line(point1, point2)

plt.plot(point1[0], point1[1], 'o')
plt.plot(point2[0], point2[1], 'o')
plt.plot(x,y)  ## len(x)
我目前的产出:

我还尝试了以下功能:

y = (50*np.exp(-x/10) +2.5)
输出为:


您可以使用以下工具将模型曲线拟合到数据中,而不仅仅是猜测模型函数的正确参数

如果密切拟合起点和终点很重要,则可以将不确定性传递给
曲线拟合
,将其调整为接近终点的较低值,例如

s = np.ones(len(x))
s[1:-1] = s[1:-1] * 3
coef,_ = curve_fit(fun, x, y, sigma=s)

您的另一种方法
a*np.exp(b*x)+c
也会起作用,并给出
-0.006 exp(0.21x+8.49)


在某些情况下,您必须为曲线拟合系数的初始值提供有根据的猜测(默认情况下使用
1

尝试向cosh添加一个参数,例如
np.cosh(const*x)
其中
const
<1,如果您想要较小的曲率。还要删除这两个
tolist()
方法,因为它们是不必要的,并且会在我描述的更改中产生错误。@Ardweaden我尝试过,但没有成功。我试过:
y=(50*np.exp(-x/10)+2.5)
并更新了上面的问题。为什么它不起作用?发布原始曲线的一些数据。这里是曲线拟合。但我只有关于三点的信息。没别的了。请你检查我的新问题,详细说明问题的例子在这里谢谢
s = np.ones(len(x))
s[1:-1] = s[1:-1] * 3
coef,_ = curve_fit(fun, x, y, sigma=s)