数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-15 11:01
标题: 使用 numpy 包进行最小二乘拟合
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。
4 I# O5 M* j0 [( o, q* O& d2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。0 a1 ~- O- S7 @. }1 f6 j  x
3.打印出三个多项式对象。
0 l3 C  P5 T( e7 r  N3 w; y4.生成一组新的 x 值,在指定范围内均匀分布。8 s  x! {5 b2 n5 M
5.使用多项式对象计算对应的 y 值。
9 U' e( ]7 J, w+ L6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。$ n* s7 a2 z( I
7.最后,显示图形。
* x3 l5 z' M- F' s( o( N. X* a: }
2 @! n5 s5 y. V: n: X7 C* c这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。
  E! B% e- _% D! i当你执行这段代码时,它会进行以下操作:
7 ]7 G. y. y/ }) F, D. ^3 L. r; R' {# O
1.导入所需库:
  1.   d& w1 g' l- ~4 j. ]7 ?
  2.    import matplotlib.pyplot as plt
    5 Q; @+ L0 i2 p' L- Z
  3.    import numpy as np! Y3 ~. _" G* E8 |
复制代码
2.定义源数据:

  1. ; W) ^7 Q7 G4 N$ V: t, r
  2.    x = np.array([1, 2, 3, 4])3 u. Y# t& E  T4 _
  3.    y = np.array([4, 10, 18, 26])3 o6 r2 d, |! ^
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
8 @6 C4 t( A  A( c" r9 f. Q4 n( l5 t4 v: W4 N7 v! D# r
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)
    ! z) a1 A) k  ^
  2.    z2 = np.polyfit(x, y, 2)( H+ I$ P& y8 M* F# J  S& B1 |
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。) ~! o8 x7 U: b. ^8 q

  a. \* h) V, f. x& G' `4.创建多项式对象:
  1.    p1 = np.poly1d(z1)
    , C  |6 S3 F% a  ~; G& G% ^
  2.    p2 = np.poly1d(z2)0 ^3 Y6 a% F' m; `
  3.    p3 = np.poly1d(z3)
    % @/ s# e8 l/ r" ~, w
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。
" ]' l$ {3 }9 ^, x1 E: N/ u4 y
4 d) W0 D! Z+ B9 d* U/ N5.打印多项式对象:
  1.    print('p1 =\n', p1)+ y2 L; E- g4 @" B6 Z
  2.    print('p2 =\n', p2)
    + _- y( o8 t$ l9 }4 h  r
  3.    print('p3 =\n', p3)
    ' i# D& e% l5 T
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。/ G5 K) [6 Z) s+ B

1 ]% z  {& {& p$ x- P6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
' x% M5 g5 A7 K# F, x, J" n" y
4 ~" w- W0 {  f2 t! ^8 F7.计算对应的 y 值:
  1.    y1 = p1(x1)5 M3 W0 r$ E) l, P$ Q
  2.    y2 = p2(x1): z) l9 P6 D7 b: O% u# S
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
: Y# `3 z3 R' p  V5 C7 u: _3 n7 y0 {/ e1 w
8.绘制图形:
  1.    plt.scatter(x, y)
    ' b4 B) S& R1 Z, j9 ]& B& s& ]
  2.    plt.plot(x1, y1, label='linear')
    7 x2 v* o4 L% `4 i1 m2 g% @
  3.    plt.plot(x1, y2, label='quadratic')
    % m6 ~  z  F7 N; J" B
  4.    plt.plot(x1, y3, label='cubic')2 U6 o; U5 g( m$ f: n! A
  5.    plt.legend()
复制代码
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。2 H/ A" D- X* s  L( W4 W8 }9 k

: U5 z* s/ h' ?" S, E9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。# w6 ]+ P! n7 T$ O& R( x
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
, Y. d/ h) V4 Y& N. `6 [, D  `/ Q3 E1 t1 \- b0 o7 }

$ @! t( _) @; E% F" _: g& c5 \3 M) @5 n

09.least_square_fitting.py

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

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






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