QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2923

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。$ o$ ~: ~" T0 R; u. f: o+ k$ B
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。
7 i) y0 n: r# `4 D2 [3.打印出三个多项式对象。
/ h4 A+ R1 [& n/ V4.生成一组新的 x 值,在指定范围内均匀分布。1 E- G+ [8 [5 _% g' b! {
5.使用多项式对象计算对应的 y 值。
* Q+ q, G9 R7 t# R% M2 t) |' W$ C6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
: y. T+ H" }: G7.最后,显示图形。+ l5 _6 l; ?( Q7 }8 R% {) ]

% g1 T4 s& c/ G/ j1 Q这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。
3 X4 s; y7 |' r5 K当你执行这段代码时,它会进行以下操作:; e1 p" `7 k( ?9 M: x4 H- Y
* y! H+ c4 J( y! h! U/ V4 N# @& X
1.导入所需库:

  1. . ~( s- b1 H3 U+ B
  2.    import matplotlib.pyplot as plt$ y5 t1 y, z$ r9 S* b1 ]* y
  3.    import numpy as np
    1 q) x0 f4 Y6 r
复制代码
2.定义源数据:

  1.   S\" G* ?\" L/ e  M3 T% f
  2.    x = np.array([1, 2, 3, 4])
    * h1 ]# [8 Y: p* \
  3.    y = np.array([4, 10, 18, 26])
      g9 A  k& n1 U4 d1 B) t
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。
' N7 ?: D  @  @3 p# N% o1 c* j' Y; }( W7 A7 i: M: |
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)
    * x5 k) @+ |, f6 O$ ]! {\" P  ~( k\" ^
  2.    z2 = np.polyfit(x, y, 2)
    4 z1 C9 l  H8 ^5 N
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。) S; B" ]  I, w* Q" E( m

8 |3 _$ L! |$ y4.创建多项式对象:
  1.    p1 = np.poly1d(z1); ?! O8 m2 d\" [2 i( u' t
  2.    p2 = np.poly1d(z2)
    ' b+ U; V7 J0 m% j( n2 t8 g2 d6 [
  3.    p3 = np.poly1d(z3); E* y1 y% e' i+ U: \
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。% H& g. \8 Z# }
: M6 A1 u0 B& N" c5 ^" a
5.打印多项式对象:
  1.    print('p1 =\n', p1)
    ( ]# n9 l, V# v& f7 r4 y
  2.    print('p2 =\n', p2)
    6 W1 s6 f6 J) Q3 S; p# i
  3.    print('p3 =\n', p3)
    ) ?7 P9 v4 [% `+ E$ L
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。1 V. `& E: H8 x. L2 u3 V7 [
+ S; c1 _/ _& Q$ l: |8 C
6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
- l& y9 W! d+ `% }" I3 C; q! ~4 l+ o% L; @  N, ?7 X+ o
7.计算对应的 y 值:
  1.    y1 = p1(x1)' t+ U2 e1 v& ~\" L+ I' X  h& M\" |: J
  2.    y2 = p2(x1)0 q9 N& f2 K7 }0 S/ x3 Q9 G! F- y
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。5 @2 H( u2 L$ R" ~* u, o
- i" s# J5 Z4 T  Z3 R
8.绘制图形:
  1.    plt.scatter(x, y)2 P) @  p7 V5 U8 u9 t\\" L  S) n, A
  2.    plt.plot(x1, y1, label='linear')! K1 D- K- u- N4 j/ d( G
  3.    plt.plot(x1, y2, label='quadratic')  v/ n8 ~: `9 z/ c  F, f
  4.    plt.plot(x1, y3, label='cubic')+ @\\" }% Y$ L# j* e\\" @\\" k
  5.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
9 `5 Z% m0 O# ~* g4 q- j; X& ?3 |$ V% X3 n# _) g
9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。
2 f! [; e- m& O" I; ?这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。9 v; j1 F2 q% R0 P+ Z

. N' {8 U8 Y4 ^. {+ U9 B  f+ t' G8 l

: P9 z' S9 ^1 y9 f

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-4-21 07:02 , Processed in 0.413928 second(s), 55 queries .

回顶部