如何在Python进行指数和对数曲线拟合?
在本文中,我们将学习如何在Python进行指数和对数曲线拟合。首先我们想到的问题是什么是曲线拟合?
曲线拟合是构建曲线或数学函数,它最适合一系列数据点,可能受到约束。
- 对数曲线拟合:对数曲线是对数函数的绘图。
- 指数曲线拟合:指数曲线是指数函数。
让我们考虑两个方程
y = alog(x) + b where a ,b are coefficients of that logarithmic equation.
y = e(ax)*e(b) where a ,b are coefficients of that exponential equation.
我们将在上面的方程上拟合两条曲线,并找到最适合它的曲线。对于Python的曲线拟合,我们将使用一些库函数
- 麻木的
- matplotlib.pyplot
我们还将使用 numpy.polyfit() 方法来拟合曲线。此函数采用三个参数 x、y,多项式 degree(n) 返回第 n 次多项式的系数。
Syntax: numpy.polyfit(x, y, deg)
Parameters:
- x->x-coordinates
- y->y-coordinates
- deg -> Degree of the fitting polynomial. So, if deg is given one we get coefficients of linear polynomial or if it is 2 we get coefficients of a quadratic polynomial.
对数曲线拟合
要进行对数曲线拟合,我们必须遵循下面将在实现中解释的一些步骤。
导入库
Python
import numpy as np
# It is for ploting the curve
import matplotlib.pyplot as plt
Python3
# Points on X-axis
x_data = np.array([11, 23, 31, 43, 51])
# Points on Y-axis
y_data = np.array([2, 4, 6, 8, 10])
print(x_data)
print(y_data)
# Taking log of x values
xlog_data = np.log(x_data)
print(xlog_data)
Python3
# Given log values of x , y as input
curve = np.polyfit(log_x_data, y_data, 1)
print(curve)
Python3
y = 5.04 * log_x_data - 10.79
print(y)
Python3
# Blue color
plt.plot(log_x_data, y_data)
# Best fit in orange
plt.plot(log_x_data, y)
Python3
x_data = np.array([11, 19, 31, 39, 51])
print(x_data)
y_data = np.array([5, 8, 32, 84, 110])
print(y_data)
Python3
ylog_data = np.log(y_data)
print(ylog_data)
curve_fit = np.polyfit(x_data, log_y_data, 1)
print(curve_fit)
Python3
y = np.exp(0.69) * np.exp(0.085*x_data)
print(y)
Python3
# Blue
plt.plot(x_data, y_data)
# best fit in orange
plt.plot(x_data, y)
创建/加载数据
由于我们已经导入了所需的库,我们必须创建两个名为 x 和 y 的数组。在创建这两个数组之后,我们必须在 numpy.log() 方法的帮助下获取 x 和 y 中值的日志。
蟒蛇3
# Points on X-axis
x_data = np.array([11, 23, 31, 43, 51])
# Points on Y-axis
y_data = np.array([2, 4, 6, 8, 10])
print(x_data)
print(y_data)
# Taking log of x values
xlog_data = np.log(x_data)
print(xlog_data)
输出:
数据拟合
之后,获得 x 和 y 数组的对数值,在 numpy.polyfit() 的帮助下,我们找到方程的系数。由于我们采用了线性方程,因此在 polyfit 方法中,我们将在度参数中传递 1。
蟒蛇3
# Given log values of x , y as input
curve = np.polyfit(log_x_data, y_data, 1)
print(curve)
输出:
获取输出
所以我们得到的系数为 [5.04, -10.79] ,我们可以得到曲线的方程,即 (y= a*log(x)+y, 其中 a,b 是系数)
y = 5.04*log(x) - 10.79
蟒蛇3
y = 5.04 * log_x_data - 10.79
print(y)
输出:
绘制结果
现在,让我们绘制图表,一个是 xlog_data、ylog_data,另一个是我们获得的 xlog_data 和 y 方程。为了在Python绘制图形,我们将借助 Matplotlib.pyplot.plot()函数。
Syntax: matplotlib.pyplot.plot(x-coordinates, y-coordinates)
Parameters:
- x: horizontal coordinates of the data points
- y: vertical coordinates of the data points
蟒蛇3
# Blue color
plt.plot(log_x_data, y_data)
# Best fit in orange
plt.plot(log_x_data, y)
输出:
上图中黄线代表原x和y坐标图,蓝线是我们计算得到的坐标图,是最合适的。
指数曲线拟合
我们将重复与上述相同的过程,但唯一的区别是对数函数被指数函数代替。
首先,让我们创建数据点
蟒蛇3
x_data = np.array([11, 19, 31, 39, 51])
print(x_data)
y_data = np.array([5, 8, 32, 84, 110])
print(y_data)
输出:
Equation: y = e(ax)*e(b)
在这个方程中,我们将绘制图形,a、b 是我们可以使用 numpy.polyfit() 方法获得的系数。现在让我们找出度数为指数函数的系数。
蟒蛇3
ylog_data = np.log(y_data)
print(ylog_data)
curve_fit = np.polyfit(x_data, log_y_data, 1)
print(curve_fit)
输出:
因此,a = 0.69 和 b = 0.085 这些是我们可以得到曲线方程的系数,即 (y = e (ax) *e (b),其中 a, b 是系数)
y = e(0.69x)*e(0.085) final equation.
蟒蛇3
y = np.exp(0.69) * np.exp(0.085*x_data)
print(y)
输出:
现在,让我们借助 Matplotlib.pyplot.plot()函数绘制图形。
蟒蛇3
# Blue
plt.plot(x_data, y_data)
# best fit in orange
plt.plot(x_data, y)
输出:
上图中蓝线代表原x和y坐标图,橙色线是我们计算得到的坐标图,是最合适的。
因此,这是在 NumPy 和 matplotlib 的帮助下在Python中拟合指数和对数曲线的过程。