QQ登录

只需要一步,快速开始

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

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

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

1176

主题

4

听众

2887

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。
7 e- ~  @6 t# D# J% x1 }2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。
) m# @2 r5 Y) Q2 z+ g3.打印出三个多项式对象。
2 a) _3 W, r2 j) V" i4.生成一组新的 x 值,在指定范围内均匀分布。
% \- h0 o+ g8 v3 E+ @$ B5.使用多项式对象计算对应的 y 值。) f% k* F$ h, h: ?7 \0 F
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
9 X. X- x' T" X& s7.最后,显示图形。% B4 V+ g8 P. H  n  d) M: P3 r& ]: I' T

; J+ ~% i5 `3 ]: r0 i这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。
; k2 t: M+ Q" K' N0 I" [当你执行这段代码时,它会进行以下操作:
9 w* S6 u7 O/ r5 Y. ?, l0 s7 J& U# L( _" j7 G% ?
1.导入所需库:
  1. & i* I9 O. s0 }8 s# d6 x1 P
  2.    import matplotlib.pyplot as plt
    * r# |4 Q' ^5 O4 f2 y8 ~/ X
  3.    import numpy as np
    0 k. L& D: a+ s
复制代码
2.定义源数据:

  1. * }  a1 m7 }& t
  2.    x = np.array([1, 2, 3, 4])
    4 U) D2 l' z' `. C3 C
  3.    y = np.array([4, 10, 18, 26])\" j3 q+ u8 Z7 z\" r) ?* m
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
# W; T3 A4 o  }7 B# _
* T5 [* V& t5 A7 b1 Q3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)6 ?$ I9 Q. n! p9 ~3 ]
  2.    z2 = np.polyfit(x, y, 2)
    4 U1 m  d9 C; |; N) B5 J# O$ F
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。3 v1 _3 q/ a& ?. ]6 l4 P+ \1 O
) C8 y$ a$ [# a1 W) \7 }
4.创建多项式对象:
  1.    p1 = np.poly1d(z1)) C% l6 ~$ c6 r1 p
  2.    p2 = np.poly1d(z2), U, q. {( g# T, x4 Y
  3.    p3 = np.poly1d(z3)
    * {$ P( _) K3 W2 w+ C
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。
/ {. u! s* ?. V  P2 _. K  f$ p. G- O
5.打印多项式对象:
  1.    print('p1 =\n', p1)
    1 ~4 H2 b\" U: j3 M
  2.    print('p2 =\n', p2)
    : Z- u1 F& c& e  q. M# g
  3.    print('p3 =\n', p3)
    7 e* B0 t/ \# d( i( F
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。& d6 C# Y8 \$ o$ S9 g
- h& J! Y0 j; x: _5 p# b
6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
/ G; U' y+ _& C  `+ j. j+ O( D/ W  ^7 `( P0 e$ n
7.计算对应的 y 值:
  1.    y1 = p1(x1)
    * X' q- H3 ^9 k; W+ u
  2.    y2 = p2(x1)0 H1 y2 _4 ]\" ?3 j' \
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
: _5 d* U* z/ T5 y% P4 ^' m! X
# |4 f' Y* {: x0 l# M3 e8 Y0 ]( I8.绘制图形:
  1.    plt.scatter(x, y); _+ {( ]# w2 R) M6 G* ]  X7 R
  2.    plt.plot(x1, y1, label='linear'), ?/ ]9 n; j* s* a1 v$ e& g
  3.    plt.plot(x1, y2, label='quadratic')
  4. 6 ~* |5 [& d9 z4 s% Y% Z
  5.    plt.plot(x1, y3, label='cubic')
  6. ! l4 b( M$ x+ t& j0 R
  7.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
/ R" T) ?0 {1 x5 }! n+ Q
+ H; U! a2 ?+ R7 C9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。8 W  }% h+ A9 O4 T  A. O
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。
& D0 S# I, e7 U1 s8 J3 H$ A" i/ B' n9 e% B/ [6 ^

$ G* X$ D: P9 ^2 t, H" z2 z: W
/ v) Z% X, Z' h* r& e7 a

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, 2025-10-23 20:11 , Processed in 0.797880 second(s), 55 queries .

回顶部