日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

numpy基础(part7)--多项式拟合

發布時間:2023/12/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 numpy基础(part7)--多项式拟合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習筆記,這個筆記以例子為主。
開發工具:Spyder


多項式擬合

多項式的一般形式:
y=p0xn+p1xn?1+p2xn?2+p3xn?3+...+pny=p_{0}x^n + p_{1}x^{n-1} + p_{2}x^{n-2} + p_{3}x^{n-3} +...+p_{n} y=p0?xn+p1?xn?1+p2?xn?2+p3?xn?3+...+pn?

多項式擬合的目的是為了找到一組p0-pn,使得擬合方程盡可能的與實際樣本數據相符合。

相關函數:

根據多項式函數(P數組即可以理解為一個多項式函數)與自變量求出擬合值, 由此可得擬合曲線坐標樣本數據 [X, Y'] np.polyval(P, X)->Y'多項式函數求導,根據擬合系數求出多項式函數導函數的系數 np.polyder(P)->Q 已知多項式系數Q 求多項式函數的根(與x軸交點的橫坐標) xs = np.roots(Q)兩個多項式函數的差函數的系數(可以通過差函數的根求取兩個曲線的交點) Q = np.polysub(P1, P2)多項式擬合(可以得到擬合的多項式系數) P = np.polyfit(x, y, k) #k為要擬合的多項式的最高階數
  • 案例

求多項式y = 4x3 + 3x2 - 500*x + 10曲線駐點的坐標。
駐點又稱為平穩點、穩定點或臨界點,是函數的一階導數為零的點,即在“這一點”,函數的輸出值停止增加或減少。

代碼:

# -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as mp import matplotlib.dates as mdx = np.linspace(-20, 20, 1000) y = 4*x**3 + 3*x**2 -500*x + 10# 提取多項式系數 P = np.array([4, 3, -500, 10]) Q = np.polyder(P) xs = np.roots(Q)#把xs帶入原函數中求出駐點Y值 ys = np.polyval(P, xs)print('Q', Q) print('xs:', xs, 'ys:', ys)mp.plot(x, y) mp.scatter(xs, ys, s = 60, color = 'r') mp.show()

結果:

Q [ 12 6 -500] xs: [-6.70981166 6.20981166] ys: [ 2291.62545875 -2021.37545875]

圖像:

  • 案例2

求出y1 = 3x - 1與y2 = -5x + 3的交點。

代碼:

# -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as mpx = np.linspace(-5, 5, 500) y1 = 3*x - 1 y2 = -5*x + 3P1 = np.array([3, -1]) P2 = np.array([-5, 3])P_diff = np.polysub(P1, P2) xs = np.roots(P_diff) ys = np.polyval(P1, xs)print('xs:', xs, 'ys:', ys)mp.plot(x, y1, color = 'dodgerblue', linestyle = '--', label = "y1") mp.plot(x, y2, color = 'r', linestyle = ':', label = "y2")mp.scatter(xs, ys, s = 60, color = 'y') mp.legend(loc = 0)mp.show()

結果:

xs: [ 0.5] ys: [ 0.5]

圖像:

  • 案例3

按照PM25數據,擬合出多項式曲線,并繪制多項式函數曲線圖。

首先繪制PM25的時序圖:

import numpy as np import datetime as dt import matplotlib.pyplot as mp import matplotlib.dates as mddef time2time(yt):yt = str(yt, encoding='utf-8')nt = dt.datetime.strptime(yt, '%Y/%m/%d').date()t = nt.strftime('%Y-%m-%d')return tdates, AQI, PM25 = np.loadtxt(r'C:\Users\goatbishop\Desktop\data\data01.csv',delimiter = ',',usecols = tuple(range(3)),unpack = True,skiprows=1,dtype = 'M8[D], f8, f8',converters = {0:time2time})dates = dates.astype(md.datetime.datetime) mp.subplot(2, 1, 1) mp.plot(dates, PM25, color = 'dodgerblue', linestyle = '--')ax = mp.gca() ax.xaxis.set_major_locator(md.WeekdayLocator(byweekday=md.SU)) ax.xaxis.set_major_formatter(md.DateFormatter('%d %b %Y')) ax.xaxis.set_minor_locator(md.DayLocator())mp.show()

圖像:

我們再擬合PM25數據,得到擬合的多項式系數,并繪制擬合的圖像:

import numpy as np import datetime as dt import matplotlib.pyplot as mp import matplotlib.dates as mddef time2time(yt):yt = str(yt, encoding='utf-8')nt = dt.datetime.strptime(yt, '%Y/%m/%d').date()t = nt.strftime('%Y-%m-%d')return tdates, AQI, PM25 = np.loadtxt(r'C:\Users\goatbishop\Desktop\data\data01.csv',delimiter = ',',usecols = tuple(range(3)),unpack = True,skiprows=1,dtype = 'M8[D], f8, f8',converters = {0:time2time})#dates = dates.astype(md.datetime.datetime) dates = dates.astype('M8[D]').astype('i4') P_PM25 = np.polyfit(dates, PM25, 4) ys = np.polyval(P_PM25, dates)mp.subplot(2, 1, 1) mp.plot(dates, PM25, color = 'dodgerblue', linestyle = '--') mp.subplot(2, 1, 2) mp.plot(dates, ys, color = 'r',linestyle = '--')mp.show()

擬合的多項式系數:

[ -6.57837904e-07 2.29193687e-02 1.98500077e-02 -6.95589722e+066.05866199e+10]

圖像:

總結

以上是生活随笔為你收集整理的numpy基础(part7)--多项式拟合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。