python求解二次方程
为了找到x
和y
之间的关系,并假设这种关系是一个二次函数,我们可以使用numpy
的polyfit
函数来拟合一个二次方程(即形式为y = ax^2 + bx + c
的方程)。然后,我们可以使用matplotlib
来绘制散点图,并在图上添加最佳拟合的二次曲线以及实际值和预测值的标记(尽管对于大量数据点来说,标记所有点可能会使图表过于拥挤)。
以下是完成这些步骤的Python代码:
import numpy as np
import matplotlib.pyplot as plt# 定义x和y数据
x = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120])
y = np.array([1.55, 4.19, 7.3, 10.41, 13.52, 16.62, 19.73, 22.84, 25.94, 29.05, 32.16, 35.27])# 使用polyfit拟合二次多项式
coefficients = np.polyfit(x, y, 2)
a, b, c = coefficients# 使用拟合的二次方程预测y值
y_pred = a * x**2 + b * x + c# 绘制散点图
plt.scatter(x, y, label='Actual Data')# 绘制最佳拟合的二次曲线
x_line = np.linspace(min(x), max(x), 100) # 生成一条平滑的线用于绘图
y_line = a * x_line**2 + b * x_line + c
plt.plot(x_line, y_line, color='red', label='Best Fit Quadratic Curve')# 添加实际值与预测值的标记(这里仅标记部分点以避免图表过于拥挤)
# 例如,我们可以每隔几个点标记一个
for i in range(0, len(x), 3): # 每隔3个点标记一个plt.text(x[i], y[i], f'({x[i]:.0f}, {y[i]:.2f})', ha='right')plt.text(x[i], y_pred[i], f'Pred: ({x[i]:.0f}, {y_pred[i]:.2f})', ha='left', color='red')# 添加标题和轴标签
plt.title('x vs y Relationship (Quadratic Fit)')
plt.xlabel('x')
plt.ylabel('y')# 添加图例
plt.legend()# 显示图表
plt.grid(True) # 可选,添加网格线
plt.show()
在这段代码中,我们使用np.polyfit(x, y, 2)
来拟合一个二次多项式,其中2
表示多项式的次数。然后,我们使用拟合得到的系数a
、b
和c
来计算预测值y_pred
。在绘制图表时,我们使用np.linspace
生成了一条平滑的线x_line
,以便更好地可视化二次曲线。最后,我们添加了实际值和预测值的标记,但仅每隔几个点标记一个,以避免图表过于拥挤。