数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-15 11:01
标题: 使用 numpy 包进行最小二乘拟合
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。
0 x5 ^' ]$ V% p0 C2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。) c5 ^/ Q3 [" h/ z( \+ f' H- {# R
3.打印出三个多项式对象。
0 }% Z6 o4 w+ n# G1 i3 _! n. b( A6 B4.生成一组新的 x 值,在指定范围内均匀分布。
# T5 M5 r  ^9 o! X1 S( f# V6 h5.使用多项式对象计算对应的 y 值。
2 J) W% _6 y! a+ D3 r6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
& p/ p) U  j  e7.最后,显示图形。  ^# w0 p$ E6 i' X6 B
1 H0 f1 J# B- r! A7 T* b
这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。! D# }  c; A# n' H+ C
当你执行这段代码时,它会进行以下操作:8 {. `+ [. l& }0 L9 ]4 A
+ i( A5 [( ~6 T4 g$ r0 i
1.导入所需库:
  1. 4 m) o0 P) h  k: H! p7 k
  2.    import matplotlib.pyplot as plt
    2 l% x: v* t, D0 \# E% ^/ D9 D& x
  3.    import numpy as np
    9 V& U$ b- f0 x" L
复制代码
2.定义源数据:
  1. 2 F% h% R# t3 ~" B. F' W5 E1 m
  2.    x = np.array([1, 2, 3, 4])
    1 k6 X; a) J. O# r! J
  3.    y = np.array([4, 10, 18, 26]); F% r7 a5 J( r, f6 c4 i9 M
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
) T0 v& o, Z. T8 n' x+ U2 I3 q! K8 c/ `+ v# y8 G
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)
    . H8 e. X  u. w" A
  2.    z2 = np.polyfit(x, y, 2)( ~$ f5 l" u/ ^/ z0 p# d9 F
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。6 K0 `/ g% |# x: e2 w, P% a
! t8 y, y' Y8 S5 Z& V0 @
4.创建多项式对象:
  1.    p1 = np.poly1d(z1)& }/ m( @  Z# p. @% H
  2.    p2 = np.poly1d(z2)0 _- F* p8 M% W4 T, Z
  3.    p3 = np.poly1d(z3)
    ; S' e5 }! W8 f
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。$ w3 F+ u& Z; i3 ]

* |+ c9 ^6 z: V2 \+ T  d5.打印多项式对象:
  1.    print('p1 =\n', p1)
    % B. i  {7 Q5 d6 @" X  d- ]
  2.    print('p2 =\n', p2)3 b3 ]! A0 z8 F7 C6 a5 r3 U
  3.    print('p3 =\n', p3)
    6 C0 k3 {& x2 `( u, g$ J9 M
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。5 W+ s+ v# X$ _; S* [  M; d" M
7 s( b; _) v  J6 g& M3 g$ s
6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。& Z2 x- f6 N% x$ h6 A# h+ V3 u
/ A4 j! e. a/ f9 D4 X" b4 [) M
7.计算对应的 y 值:
  1.    y1 = p1(x1)9 k/ }3 ?) o( P3 j/ o
  2.    y2 = p2(x1), W/ J8 S, [" B2 ]
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
1 p+ \  w- `; u% x. u0 P, ^7 m; X9 C2 [2 a1 p* Y. @
8.绘制图形:
  1.    plt.scatter(x, y)
    & N0 X" }" M/ j  g
  2.    plt.plot(x1, y1, label='linear'): e; z- Q) a" D" ?
  3.    plt.plot(x1, y2, label='quadratic')
    $ b4 X- o9 j; A( o
  4.    plt.plot(x1, y3, label='cubic'): U1 M: J# `) h( g- A& D! u4 l. P
  5.    plt.legend()
复制代码
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。' Z* }0 f5 f2 c" G( H7 u# V0 b  V

- B4 c: u' ^2 g4 a$ C9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。3 y* ]+ K% p9 b2 T+ g1 G
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
* E' o( c/ ]6 Q+ n, x' F1 X8 Y
" h# T) k. H$ }2 f" t
- z7 @1 }! H9 q$ o# @6 E+ M. H
9 V' ~0 A' Z" }8 ?, U4 s

09.least_square_fitting.py

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

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






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