如何使用函数 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])
我有一组数据,需要比较一些逼近函数
我使用 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])