程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

用Python的numpy库进行线性拟合或者多项式拟合

hfteth 2024-12-15 12:15:25 技术文章 20 ℃

在前文中,笔者使用最小二乘法矩阵计算进行数据的线性拟合

其实有更简单的方法:

  • 用Python的numpy中的polyfit函数直接进行线性拟合
  • 或者用numpy中的polyfit和poly1d进行多项式拟合


用Python的numpy中的polyfit函数直接进行线性拟合

程序代码:

import matplotlib.pyplot as plt
import numpy as np

#绘制原始数据的散点图
x = np.array([3.6, 3.7 ,3.8 ,3.9 ,4.0, 4.1, 4.2])
y = np.array([1.0, 0.9, 0.9, 0.81, 0.60, 0.56, 0.35])
plt.scatter(x,y)
#直接拟合
# y = slope * x + intercept
slope,intercept = np.polyfit(x,y,1)
#
print("线性方程的系数:")
print(slope)
print(intercept)
# 创建数据点
#x = np.linspace(-1, 10, 1100) # 从-1到10之间生成1100个点
x = np.linspace(3.5, 4.5, 100)
#y = f(x) # 对每个点计算y值

# 绘制拟合出来的一元一次线性方程的图像
plt.plot(x, slope * x + intercept, color = "blue")
plt.xlabel('x')
plt.ylabel('y')
plt.title('Display func: f(x) = ax+b ')
plt.grid() # 显示网格
plt.show() # 显示图像

运行结果:

用numpy中的polyfit和poly1d进行多项式拟合

程序代码:

import matplotlib.pyplot as plt
import numpy as np

#绘制原始数据的散点图
x = np.array([3.6, 3.7 ,3.8 ,3.9 ,4.0, 4.1, 4.2])
y = np.array([1.0, 0.9, 0.9, 0.81, 0.60, 0.56, 0.35])
plt.scatter(x,y)
#直接拟合
# 3次方程 的 多项式回归系数
coefs = np.polyfit(x,y,3)
# 多项式函数
poly = np.poly1d(coefs)
#
print("多项式 coefs:")
print(coefs)
# [-0.27777778 2.07142857 -4.50912698 3.3352381 ]
# 创建数据点
#x = np.linspace(-1, 10, 1100) # 从-1到10之间生成1100个点
# new_x
x = np.linspace(3.5, 4.5, 1000)
#y = f(x) # 对每个点计算y值

# 绘制拟合出来的一元一次线性方程的图像
plt.plot(x, poly(x), color = "blue")
plt.xlabel('x')
plt.ylabel('y')
plt.title('Display func: f(x) = ax^3 + bx^2 + cx + d')
plt.grid() # 显示网格
plt.show() # 显示图像

运行结果:

Tags:

最近发表
标签列表