【发布时间】:2011-10-14 19:17:29
【问题描述】:
现在,我正在尝试将曲线拟合到大量数据;有两个数组 x 和 y,每个数组有 352 个元素。我已经为数据拟合了一个多项式,效果很好:
import numpy as np
import matplotlib.pyplot as plt
coeff=np.polyfit(x, y, 20)
coeff=np.polyfit(x, y, 20)
poly=np.poly1d(coeff)
但是我需要一个更精确优化的曲线,所以我一直在尝试用 scipy 拟合曲线。这是我到目前为止的代码:
import numpy as np
import scipy
from scipy import scipy.optimize as sp
coeff=np.polyfit(x, y, 20)
coeff=np.polyfit(x, y, 20)
poly=np.poly1d(coeff)
poly_y=poly(x)
def poly_func(x): return poly(x)
param=sp.curve_fit(poly_func, x, y)
但它返回的只是这个:
ValueError: Unable to determine number of fit parameters.
我怎样才能让它工作? (或者我怎样才能为这些数据拟合曲线?)
【问题讨论】:
-
您为什么认为非线性最小二乘法可以为多项式模型(线性)提供更精确的结果?线性结果是在最小二乘意义上的最佳拟合。使用非线性方法获得与线性模型的最小二乘拟合只会花费更长的时间,并且不能保证返回良好的拟合...除此之外,您为什么要拟合 20 阶多项式?该模型对您的数据有意义吗? (如果是这样,出于模糊的好奇心,你的数据到底是什么?)
-
您是否要进行样条插值,而不是为您的数据拟合多项式模型? (即,您是否想要精确通过每个点但不适合单个数学模型的东西,或者您是否想要找到最能重现您的数据的特定数学模型的参数?)
-
调用
numpy.polyfit两次应该达到什么目的?
标签: optimization numpy scipy curve-fitting