我想在一组500个随机点上拟合一个三次贝塞尔曲线。
以下是贝塞尔曲线的代码:
E/ERROR: java.io.IOException: DICOM JPEG compression not yet supported
我知道Numpy和Scipy有最小二乘法:numpy.linalg.lstsq和scipy.optimize.least_squares
但我不知道如何使用它们来拟合500点的曲线。有人能提供一些帮助吗?
谢谢
答案 0 :(得分:1)
在scipy https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html
中使用函数curve_fitimport numpy as np
from scipy.optimize import curve_fit
def func(x, a, b, c):
return a * np.exp(-b * x) + c
xdata = np.linspace(0, 4, 50)
y = func(xdata, 2.5, 1.3, 0.5)
ydata = y + 0.2 * np.random.normal(size=len(xdata))
popt, pcov = curve_fit(func, xdata, ydata)
#Constrain the optimization to the region of 0 < a < 3, 0 < b < 2 and 0 < c < 1:
popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 2., 1.]))
答案 1 :(得分:0)
scipy文档本身有一个关于使用样条曲线的最佳教程:
https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html
有大量代码,示例和比较不同类型样条曲线的酷图。