QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。6 }* w6 [% P" I& a2 f# G
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。
( r# P5 @4 G7 M; {# k3.打印出三个多项式对象。/ R) c9 Q$ V6 {( a2 P
4.生成一组新的 x 值,在指定范围内均匀分布。' q+ C7 l* l7 R2 E
5.使用多项式对象计算对应的 y 值。+ {  d1 F$ x. g4 w5 e0 U# W; r$ T
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
! c. r% s* @' w8 P7.最后,显示图形。+ q) u; ^8 `/ S; n# Q  v

  k$ o3 E' |* X* B2 h4 Y4 }1 V3 ]这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。: _; b8 F' ~, P! f; v, g8 n) h* T" C
当你执行这段代码时,它会进行以下操作:7 d8 T; T0 Z" {$ q

$ r) i3 f3 S+ \4 N$ y2 J! R1.导入所需库:
  1. ( G  A% x  t* @2 r. P
  2.    import matplotlib.pyplot as plt! v\" @1 S: i& s: S8 x
  3.    import numpy as np% ?9 o7 o* H6 a5 C9 R: U8 o
复制代码
2.定义源数据:

  1. 6 F* O% r: X% d. C; b9 M
  2.    x = np.array([1, 2, 3, 4])1 U) I# O+ J5 Q1 `5 p4 \2 Q
  3.    y = np.array([4, 10, 18, 26])
    , a- i: C3 N\" q7 X/ l
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
0 s, @& e# G5 s8 o5 j+ ^  {
5 v: f! l1 |1 T: w+ r: c3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)  X8 U) R- k: L3 r
  2.    z2 = np.polyfit(x, y, 2)$ o6 z5 d\" Y7 z& W
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。( ?2 a: R/ U' n
: g8 I% _5 o: i; e- p* G+ T
4.创建多项式对象:
  1.    p1 = np.poly1d(z1)) B/ e) Z* _; w! B\" d. F
  2.    p2 = np.poly1d(z2)2 @\" u# X; g+ H
  3.    p3 = np.poly1d(z3)
    9 _/ j. Q) k3 i2 u# K/ Q7 m
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。+ C9 p9 U  e' b1 i6 f, ]
* b: c( J0 D! c
5.打印多项式对象:
  1.    print('p1 =\n', p1)$ l\" h- b6 v4 m: @
  2.    print('p2 =\n', p2)5 L  j' ?* T9 {: d: o, }  Q/ B# x
  3.    print('p3 =\n', p3)
    # n3 ]$ w, z7 P5 [' a6 K9 v
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。
  v& V8 z4 ^. N( D3 I& V1 t
/ Z0 H0 c% y2 H5 v, P1 d6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
. a6 `- B1 c6 q( M: h" M! g9 O. B; |+ }: X( U) L  g
7.计算对应的 y 值:
  1.    y1 = p1(x1)8 ~' p4 Z0 ?. |# f3 K
  2.    y2 = p2(x1)
    * N9 o2 W7 ~% |% ~  S8 G& i0 D! R\" l
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。
3 ?, v& k, ?3 t* i9 F1 B
% C( k1 X  d3 A, c. V; L' f/ I: a8.绘制图形:
  1.    plt.scatter(x, y)7 p8 ^% h* E- u% b  w
  2.    plt.plot(x1, y1, label='linear')
  3. + A9 f- S\\" i: \0 r8 X\\" }
  4.    plt.plot(x1, y2, label='quadratic')' n( N9 Q3 u6 v7 n. |% d& C4 C0 b
  5.    plt.plot(x1, y3, label='cubic')& Y) P# n' S, f4 Q% L( H
  6.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
$ f" y" y6 l; ?" r3 Z0 \
5 B: n. J% P% M. B9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。
0 E7 C5 I: L9 i: ^2 V( T这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。; w7 A) T# l4 e# w( r8 ^& Q" ^% }) ?

6 W9 f' u) @- [+ ~) D- v6 _7 \8 E+ d5 y
0 O  I5 H1 A5 I2 j1 f9 t8 f3 [

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, 2026-7-10 19:01 , Processed in 0.465556 second(s), 55 queries .

回顶部