如何使用函数 a * x ^ m 来近似 polyfit() 或 Python 中的类似函数?

How to use function a * x ^ m to approximate function with polyfit() or something similar in Python?

我有一组数据,需要比较一些逼近函数

我使用 polyfit() 进行对数和指数拟合,但如何将其用于函数 a * x ^ m? 是对数回归的代码:

x = numpy.array([1, 7, 20, 50, 79])
y = numpy.array([10, 19, 30, 35, 51])
numpy.polyfit(numpy.log(x), y, 1)
array([ 8.46295607,  6.61867463])
#y ≈ 8.46 log(x) + 6.62

直接的做法是计算自变量的各个次方的值,然后用系数做矩阵乘法:

>>> deg = 1
>>> x = np.array([1, 7, 20, 50, 79])
>>> y = np.array([10, 19, 30, 35, 51])
>>> log_x = np.log(x)
>>> p = np.polyfit(log_x, y, deg)
>>> p @ np.vstack([log_x ** i for i in range(deg, -1, -1)])
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])

更简单的方法是使用np.polyval,它是通过循环计算的:

>>> np.polyval(p, log_x)
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])

但是,NumPy提倡在新代码中使用np.polynomial.Polynomial

>>> p = np.polynomial.Polynomial.fit(log_x, y, deg)
>>> p(log_x)
array([ 6.61867463, 23.08682675, 31.97142527, 39.72595348, 43.59711987])