QQ登录

只需要一步,快速开始

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

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

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

1186

主题

4

听众

2922

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。5 U+ e0 G7 F/ p0 D, Y* U6 P
2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。
1 Y) O4 u3 h% S) A2 _) H3 ~3.打印出三个多项式对象。
. v3 P5 f4 R* j4.生成一组新的 x 值,在指定范围内均匀分布。
: d) v/ N1 _; W' ~- @5.使用多项式对象计算对应的 y 值。  `9 a0 ?( X( [4 r+ `
6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
2 V5 Y# `5 O1 V) R9 i' g( H, B7.最后,显示图形。
- E  i' {' i: h: J; C# e# D$ U9 B$ R% B; p$ A, O, c0 `9 D
这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。' ~% m6 ^( Z; j7 [8 f
当你执行这段代码时,它会进行以下操作:
0 s+ G% S- k, B/ a6 @
- T2 B* ^8 \* w/ {, Y1.导入所需库:
  1. / `; x4 w5 _\" O9 I
  2.    import matplotlib.pyplot as plt
    ( S3 x3 C4 j# b$ R8 ~$ k: P# f
  3.    import numpy as np
    2 K; d& H( F/ ]  B3 T; B
复制代码
2.定义源数据:

  1. / ~* S. V0 l  Z5 x
  2.    x = np.array([1, 2, 3, 4]); U# [& f7 i3 ^' Q; G
  3.    y = np.array([4, 10, 18, 26])
    \" Q+ h0 a/ N  A% l- t
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。+ T! s9 D( f0 p! _3 B
5 `; ?% O' u6 ~
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)9 R( {' C5 [- T5 W/ D' W\" s# Q1 t
  2.    z2 = np.polyfit(x, y, 2)
    # j7 e/ Y$ D4 t+ [) t0 ]. I
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。
. Q7 H2 k. q$ y3 y* Q0 z6 i4 y
4.创建多项式对象:
  1.    p1 = np.poly1d(z1)
    ; l8 v2 |\" w; s! G9 W4 B8 G. i0 n
  2.    p2 = np.poly1d(z2)% s5 y' j! W9 p2 g
  3.    p3 = np.poly1d(z3)% {- T8 B! _! P* S
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。1 s/ Q& T  E, I/ ~3 y; k1 \
  g/ B* t5 Y, P+ t. {$ F% T' b
5.打印多项式对象:
  1.    print('p1 =\n', p1)
    4 R6 \  P0 w8 g3 [
  2.    print('p2 =\n', p2)7 c3 H& d& d/ Z6 G5 ]
  3.    print('p3 =\n', p3)
    8 w# l* x! B/ I0 K% R# L
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。
: n1 ]8 c0 i* t  V! D" }* w3 t
& E* S  k* R. q6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。
7 `1 j. M( s7 H. U) D+ r+ |) ^5 L0 u5 ?5 n5 v2 t+ k
7.计算对应的 y 值:
  1.    y1 = p1(x1)
    : b1 \: Y9 p4 @, r\" i$ _/ V
  2.    y2 = p2(x1)
    ' Q1 x, o+ P  e
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。" H8 `3 ~) R- h1 T8 h3 K

5 f4 ]. B% v" v8.绘制图形:
  1.    plt.scatter(x, y)
  2. # o) I# {- r, |2 U4 C4 C8 \
  3.    plt.plot(x1, y1, label='linear')6 R5 C\\" r5 q  u9 n2 ?: H/ i8 c
  4.    plt.plot(x1, y2, label='quadratic')
  5. \\" @+ B$ u5 U/ g+ C
  6.    plt.plot(x1, y3, label='cubic')$ d- @9 L2 ?( `  V# b% J$ E  `\\" P
  7.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。% v6 H) @  B. x( Z- H, \4 ?

1 M+ u: W# @, i9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。: S7 E) G) `1 q+ Z( b
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。2 C1 p$ a4 [; S7 E; V
. `5 b, m( [  c4 I" G9 Q- q& @+ o
+ T& ]' m& z& T" z0 @& y* M" w5 f

% k- N' N8 E* Q  }0 j

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-16 15:41 , Processed in 0.405851 second(s), 54 queries .

回顶部