QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2446|回复: 0
打印 上一主题 下一主题

使用 numpy 包进行最小二乘拟合

[复制链接]
字体大小: 正常 放大

1188

主题

4

听众

2931

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。* O$ I/ N$ k* ?2 R; x) j
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。* ?! j; q" E$ N/ _9 P$ M6 j7 h/ X4 J9 w
3.打印出三个多项式对象。
6 ^; A8 G8 Q% J, e4.生成一组新的 x 值,在指定范围内均匀分布。
; ^& S& Z' o6 s9 F: T5.使用多项式对象计算对应的 y 值。! r2 J' L! p, u% T7 b6 R% l& ^2 D% n
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
' U& n! h; g) {4 t  ]7.最后,显示图形。1 m( J; s- Q( u6 {4 O. ^+ @

. L( r6 Y7 o$ [5 N( ?这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。1 F# x2 n& R. s5 b
当你执行这段代码时,它会进行以下操作:
; q6 a2 L" |: N
. [+ T: X: n! J. ]7 M$ a% O+ Z* F& {1.导入所需库:
  1. 7 f6 h\" x# ?+ M/ H) H- s
  2.    import matplotlib.pyplot as plt
    $ Z& O5 ~3 v8 L! u\" H; H- z/ u
  3.    import numpy as np, `. C9 ^; r  n\" n1 G* d' F
复制代码
2.定义源数据:
  1.   Z& V7 s# W) |. D8 R+ t& Q
  2.    x = np.array([1, 2, 3, 4])
    2 M6 u' Z2 P& e+ J5 z* ~
  3.    y = np.array([4, 10, 18, 26])6 z# K\" u9 V# i9 G) t( x+ I
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。6 w" w0 ^( t' T4 s/ H* Y
- c8 t; p* g9 o* f* o! X
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)
    0 t1 g, {$ |9 G  ~) t
  2.    z2 = np.polyfit(x, y, 2)% D6 a4 v- U% k. w6 Q* F
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。
. u+ a; c# E" n" [0 @
5 k! v! `# y" n7 Y$ y' y4.创建多项式对象:
  1.    p1 = np.poly1d(z1): I, g7 x* h/ k+ ~4 D( T
  2.    p2 = np.poly1d(z2)4 J0 o* E% C* ]$ q9 i: I
  3.    p3 = np.poly1d(z3)0 S* G; O( J9 d; L; R
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。
5 c9 }! a" p4 t+ a" A0 {9 `1 F+ C6 q7 U+ Z) H: J) P4 x9 h$ w: V
5.打印多项式对象:
  1.    print('p1 =\n', p1)
    - }' o8 a: l2 [! `  i! ]3 h& j
  2.    print('p2 =\n', p2)
    + u( I) k( p# n\" K+ o
  3.    print('p3 =\n', p3)
    - w1 w, W& d% H, ?: _2 Q: {
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。
# g; l# I- m5 Q
; X4 D# n6 d7 k6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
8 K9 h5 o9 Y; _5 N; D
6 Z8 x7 \! Y( U- _6 Z7.计算对应的 y 值:
  1.    y1 = p1(x1)
    & b# m0 `8 o% R+ }
  2.    y2 = p2(x1)
    * G6 n' Q/ {- _$ H6 P\" a* u, E# f! a
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。6 ]3 P$ k$ G7 K* _9 d

3 h+ T5 c& K% S, E9 ^1 D) ^8.绘制图形:
  1.    plt.scatter(x, y)
  2. % p) w0 s- C/ W3 r\\" w9 A3 _7 n
  3.    plt.plot(x1, y1, label='linear')8 o& R% X+ s! G; a* Y: Z0 J
  4.    plt.plot(x1, y2, label='quadratic')9 B* y3 c& E% |$ i: ?; R
  5.    plt.plot(x1, y3, label='cubic')
  6. \\" W8 s! Q+ ^\\" W7 |5 w9 W7 ~) B
  7.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
2 M- V7 Q" n2 c7 g' G0 Z
% y( Q# S" J' i7 A6 C9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。! i) l! T# X( B2 T2 J
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
5 W8 h" i# c8 k* T- F  ]( t' h2 ]0 f% r9 o' \: E
; I: q8 I# X; W) X( {) J

2 g' j* k4 `; `, Q

09.least_square_fitting.py

699 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-5-26 04:16 , Processed in 0.396905 second(s), 55 queries .

回顶部