数学建模社区-数学中国

标题: 使用 numpy 包进行最小二乘拟合 [打印本页]

作者: 2744557306    时间: 2024-3-15 11:01
标题: 使用 numpy 包进行最小二乘拟合
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。. ^/ M+ V7 i, u
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。
9 Z8 [8 W+ }& ?: c3.打印出三个多项式对象。( d/ r4 C) H+ a) f
4.生成一组新的 x 值,在指定范围内均匀分布。
8 K# V; C; s- W* V5.使用多项式对象计算对应的 y 值。2 Y. I7 S7 s2 m' B. c  v
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
: |3 U5 ~0 L  T- ?4 C4 q* b7.最后,显示图形。
& a& B2 e; o4 [/ ^; n& w. p- @( f# M5 r+ L9 t5 A
这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。6 S" ]$ r3 _% ^6 F
当你执行这段代码时,它会进行以下操作:
/ k( _; k: d' k* h1 H$ B* l2 [, I8 r6 H. n, _: F0 [4 A
1.导入所需库:
  1. $ n/ P! c  m7 d! K5 g
  2.    import matplotlib.pyplot as plt1 S8 y" V" |6 ~) X1 a8 E# z9 L
  3.    import numpy as np% L# K, ]# y* w/ I
复制代码
2.定义源数据:

  1. 0 t/ b/ k& q! V5 @/ _8 R) t5 [* h
  2.    x = np.array([1, 2, 3, 4])8 Z! h3 P$ c8 d* `/ \; @
  3.    y = np.array([4, 10, 18, 26])
    0 I& c6 ~7 ]4 l3 m+ @! m5 u
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
/ T) |$ k$ ?) e3 m- c/ p, X
! e! i* {, n2 v! ?* @2 ^3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)
    - e8 ?# `7 x* E" C9 a6 I( T
  2.    z2 = np.polyfit(x, y, 2)
    + B: F7 Q/ u" a+ F: L
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。; N/ _' r6 B+ `* T8 P$ t
$ q/ C- L- P9 i  W
4.创建多项式对象:
  1.    p1 = np.poly1d(z1), B! I' ^+ k7 \4 j+ p4 U0 Q: X
  2.    p2 = np.poly1d(z2)
    ! [- C4 j( ~7 Z3 q
  3.    p3 = np.poly1d(z3)/ a* [: v2 O9 i$ l" ~* X  f
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。  d3 J* |  t8 R2 U
+ q- D+ w6 P2 i8 F5 _
5.打印多项式对象:
  1.    print('p1 =\n', p1)
    & O+ i* S' Z2 c+ q" N. O' J1 P
  2.    print('p2 =\n', p2)
    * L2 n. ?8 w8 _! V# X  y
  3.    print('p3 =\n', p3)  f5 J/ Q! Y& o3 ~  I
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。
! C8 h: a+ \/ b8 b4 \
- m/ D! W/ f2 S  d, p) R6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。6 R/ X& S. q8 w8 z4 y  O

3 O7 P7 A: P0 G$ d7.计算对应的 y 值:
  1.    y1 = p1(x1)1 ?/ s0 A- T- L- C! ^1 ?
  2.    y2 = p2(x1)
    ; w. ~, v7 t2 |, L# O
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
% S8 u' c# S  ^# j" \
, `" t( Y+ P7 m7 Z; `4 W8.绘制图形:
  1.    plt.scatter(x, y)
      O9 u5 |% k# s. x& z" V
  2.    plt.plot(x1, y1, label='linear')
    $ F5 a1 V9 V: |
  3.    plt.plot(x1, y2, label='quadratic')
    , V1 T* z  u* F
  4.    plt.plot(x1, y3, label='cubic')
    8 B; ~7 _' V" z) p5 U3 d
  5.    plt.legend()
复制代码
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
+ U  t/ Z5 u% c9 j8 {/ b, I" U/ f0 A4 K4 ?
9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。
' Y* d6 W$ ?$ l' |这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
5 Y. j* W; `( [" ~% R& n6 v  ?. c; Y# |$ Q; }2 F0 e( @0 U; Z/ }

9 ^/ V% }7 \3 I0 f
8 s6 U  |7 e; L4 o& E6 S

09.least_square_fitting.py

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

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






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5