数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-3-15 11:01
标题: 使用 numpy 包进行最小二乘拟合
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。4 a8 t7 o( m! o
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。( H8 d: Y) p0 ]' H$ e3 r# s2 z
3.打印出三个多项式对象。
/ r# X' K3 k8 k! Q4.生成一组新的 x 值,在指定范围内均匀分布。
1 ]3 k. v0 P6 d6 Z) q5.使用多项式对象计算对应的 y 值。" M' s/ ~" d) K8 a
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
. ^3 x$ M; h2 C  f2 n; N3 V7.最后,显示图形。/ ]5 R' Q4 @& ]+ q
2 g" }1 X5 H+ B0 f$ H
这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。
3 ^0 ^2 Y8 x0 Q; W: m, G2 R3 f0 r2 i当你执行这段代码时,它会进行以下操作:+ X# z3 Q* o" D$ o3 G- \

: A- B  V; O! U1.导入所需库:
  1. + j0 y" E' f! @( `
  2.    import matplotlib.pyplot as plt/ Y# l: h+ ^9 S
  3.    import numpy as np: s+ M5 g3 Z- k. ~
复制代码
2.定义源数据:
  1. % V, h9 H. v9 S
  2.    x = np.array([1, 2, 3, 4])2 }: Y- S( |' w# M
  3.    y = np.array([4, 10, 18, 26])+ u8 i- \% u( l9 {* }) F4 `) P5 m
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。3 y% V- C5 u& V: i3 Y, E

& y* J7 [# t9 D" s0 x5 ~3 H3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)/ d1 J2 ?& R  h5 V! `' X
  2.    z2 = np.polyfit(x, y, 2)# o4 O3 O3 F$ S7 o, s. I9 a
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。1 ^5 w' `; [: q1 @( ?

- G5 r9 l  j: w, ?4.创建多项式对象:
  1.    p1 = np.poly1d(z1)
    5 {+ l' d4 \' K- s3 L3 B
  2.    p2 = np.poly1d(z2)- I: I* z" |9 Q$ X8 _- W
  3.    p3 = np.poly1d(z3)
    0 Y9 x9 a4 V) Q# R2 G. M
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。
; v$ j5 q5 s9 S: o3 i- e3 f2 j0 _
- R  Q2 K, e3 ]& l' r2 }% K/ V& N5.打印多项式对象:
  1.    print('p1 =\n', p1): G* v' @5 u! ~. d& \- q; h/ l
  2.    print('p2 =\n', p2)
    2 e- o+ y* Z! j( V6 a/ W3 O" _
  3.    print('p3 =\n', p3)
    8 y6 Y& @1 }$ R  _# |2 j, _4 {
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。4 y: b+ E, b; P  P: ^
' Q) c# R. a2 V: p; E/ f
6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。$ `( J& W" q1 c- I' E  N  Q( W
2 J& S1 ?5 H  V& a2 Q5 F4 ]
7.计算对应的 y 值:
  1.    y1 = p1(x1)
    4 n9 e& P( d2 a  _( ?5 v
  2.    y2 = p2(x1); n& T2 @  V& `) Y% f
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
$ x; x5 ~* a" X
" x; Y" Z. S7 [( h3 N8.绘制图形:
  1.    plt.scatter(x, y): ~3 k5 V  k+ s3 Y' _* n% h
  2.    plt.plot(x1, y1, label='linear')
    % l% I- _+ H1 ?, [5 q( M
  3.    plt.plot(x1, y2, label='quadratic')
    7 H2 o/ s( u( R  S
  4.    plt.plot(x1, y3, label='cubic')" y! y$ r, A; i/ e# e5 a
  5.    plt.legend()
复制代码
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
' S; x  B- Q1 w. ^
: ]2 K5 _$ y1 j9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。& F8 ~; o7 H7 H2 @  N
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
, D) s& j: \+ O$ I6 \
8 b& @1 ?. J7 V9 W
0 D2 \; Y9 U2 X0 k% p. }- f  U% R7 [

09.least_square_fitting.py

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

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






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