QQ登录

只需要一步,快速开始

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

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

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

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-3-15 11:01 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
1.使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,得到拟合系数。
" k" }- o2 a2 N9 m4 r8 T4 Y. q# E2.使用 np.poly1d() 函数根据拟合系数创建多项式对象。) }8 H7 l% r/ n- h! V
3.打印出三个多项式对象。
3 V/ Z! K" t9 U5 D3 u: u; X& j4.生成一组新的 x 值,在指定范围内均匀分布。$ r4 i- H- K. v# C& V
5.使用多项式对象计算对应的 y 值。
0 }3 @/ U6 l/ p4 z. X6.使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例。
% q2 k7 V- {  \  J6 I, ]7.最后,显示图形。% F) Y: t- x- u

' o  ?! f7 v7 h0 E这段代码将原始数据拟合为一次、二次和三次多项式,并在同一图中展示了拟合曲线。8 M' x3 a; h& Z
当你执行这段代码时,它会进行以下操作:1 z* Z, j- |: \, H# P& P& d3 F, R+ p

' [! w  i" L) V; N! \9 O) E/ w2 N1.导入所需库:

  1. ( j9 R; z$ j5 o  Q: {
  2.    import matplotlib.pyplot as plt
    9 v8 n$ z' W9 R: J
  3.    import numpy as np+ W8 Q\" d6 }: f* ^
复制代码
2.定义源数据:
  1. 5 h5 V) G, X/ {
  2.    x = np.array([1, 2, 3, 4])
    ' Y+ x) I, t3 a3 z, u
  3.    y = np.array([4, 10, 18, 26])) f$ ~! f- @% [6 F' D5 z! a
复制代码
这里 x 和 y 分别是输入数据的 x 和 y 值,用于进行多项式拟合。8 o4 F, N  A( Z0 U. s) e4 ~  O3 _# A
/ R- U: U! k" h3 ?7 a5 E
3.多项式拟合:
  1.    z1 = np.polyfit(x, y, 1)- u! M5 s/ b( t$ W& h
  2.    z2 = np.polyfit(x, y, 2)& ?5 J, F. k8 s$ C* M2 w9 ?
  3.    z3 = np.polyfit(x, y, 3)
复制代码
使用 np.polyfit() 函数对数据进行多项式拟合,分别拟合为一次、二次和三次多项式,并返回拟合系数。
$ q$ b3 g* A7 h8 a  Y1 i' y
; \1 ]+ O4 N2 P4.创建多项式对象:
  1.    p1 = np.poly1d(z1)
    # I7 K% d+ J: {
  2.    p2 = np.poly1d(z2)  a7 Z! I- T$ ?; D5 G3 h, M
  3.    p3 = np.poly1d(z3)0 G0 c2 V5 j4 c\" K: ]  i5 y
复制代码
使用 np.poly1d() 函数根据拟合系数创建多项式对象,这样可以方便地对多项式进行计算。% ]; t0 I! l; m6 {! T" A9 t1 D' k  q+ d
5 a2 W/ ~2 G8 [
5.打印多项式对象:
  1.    print('p1 =\n', p1)- e' D6 Q! F  a, Z# h# U, q1 j+ m
  2.    print('p2 =\n', p2)) Y3 i1 {\" f) L2 m  c4 O
  3.    print('p3 =\n', p3)
    \" f, m7 C- n\" m% D9 _1 h
复制代码
打印出三个多项式对象,分别对应一次、二次和三次多项式。7 j6 S% o- q$ m  }+ X$ J
5 e& C3 E% ?4 h+ f5 m
6.生成新的 x 值:
  1.    x1 = np.linspace(-2, 7, 100)
复制代码
使用 np.linspace() 函数生成了一组新的 x 值,在范围从 -2 到 7 之间均匀分布,用于绘制拟合曲线。" M! N+ W5 Z0 ?
& C1 N% m* s- I/ N
7.计算对应的 y 值:
  1.    y1 = p1(x1)
    6 O' U) i! G\" p/ x0 z( F7 C
  2.    y2 = p2(x1)
    8 T/ n1 O% @, v
  3.    y3 = p3(x1)
复制代码
使用多项式对象 p1、p2 和 p3 计算了对应于新 x 值的 y 值。( v0 e+ g& F' h$ [+ u
2 |) e( C2 K* y7 G; ]: ?
8.绘制图形:
  1.    plt.scatter(x, y)1 `% S0 ~' F. U( ^8 p
  2.    plt.plot(x1, y1, label='linear')
  3. & j* [) K# D1 [. H  Q
  4.    plt.plot(x1, y2, label='quadratic')7 q- \( I$ a/ d, _5 O4 t' d6 q0 k* J
  5.    plt.plot(x1, y3, label='cubic')2 J7 s, _+ K6 o: F
  6.    plt.legend()
使用 plt.scatter() 绘制原始数据点,使用 plt.plot() 绘制拟合曲线,并添加图例,标记不同曲线对应的多项式阶数。
3 M6 N4 F) s$ e. v6 @# ~5 A. j* ?6 l9 m4 u' |% X+ B0 _
9.显示图形:
  1.    plt.show()
复制代码
最后,显示绘制的图形。7 |, W: Y& ^) a; R+ W
这样,你就能够看到原始数据点以及拟合的一次、二次和三次多项式曲线,并对其进行比较。1 E6 S% {( D0 e3 g
) e' k" T, u9 h
2 E$ @" |! K; Z4 R$ P
- L1 A5 Q4 A+ ?3 V4 ^7 n+ R: ~

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 08:01 , Processed in 0.513608 second(s), 54 queries .

回顶部