使用numpy.polyfit進行數據擬合的技巧

一、簡介

Numpy是一個功能強大的Python科學計算庫,其中包含了很多常用的數學函數和方法。其中numpy.polyfit函數就是一個非常常用的函數,它可以用於多項式擬合。多項式擬合是指將一組數據用一個n階多項式進行擬合,得到一個多項式函數,從而實現對數據的擬合和預測的目的。其中n階多項式的係數就是擬合函數的參數。

二、numpy.polyfit函數使用方法

numpy.polyfit(x, y, deg, rcond=None, full=False, w=None, cov=False)

1. 參數說明

  • x:1-D或2-D數組表示的x坐標系的數據。
  • y:1-D數組,表示y坐標系的數據,與x的維度也應該一致。
  • deg:擬合多項式的階數,即多項式的次數。
  • rcond:用於確定奇異值的容差。也就是說,如果最小奇異值已經小於這個容差值,那麼將放棄行列式的計算。默認值是len(x)*eps,其中eps是浮點數的機器精度。
  • full:如果為True,則返回擬合函數的一些附加信息,包括擬合殘差、排名、奇異值和秩的值。默認值是False。
  • w:與y具有相同長度的1-D數組或None,用於指定相應的y值的權重。默認是None。
  • cov:如果為True,返回擬合確信度的協方差矩陣。默認值是False。

2. 返回值

擬合函數的參數。在多項式擬合中,返回值是一個1-D數組,其中第一個元素是最高階項(x^deg)的係數,最後一個元素是常數項係數。注意:返回值是p[::-1]。

3. 代碼實現

import numpy as np

# 利用numpy.polyfit函數進行一階多項式擬合,得到函數f
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
f = np.polyfit(x, y, 1)

# 繪製擬合後的曲線
import matplotlib.pyplot as plt
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, np.polyval(f, x), 'r', label='Fitted line')
plt.legend()
plt.show()

三、numpy.polyfit函數在多項式擬合中的應用

1. 用一階多項式擬合數據

一階多項式指的是y = kx + b,即直線函數。利用numpy.polyfit函數可以方便地進行直線擬合,代碼實現如下:

import numpy as np
import matplotlib.pyplot as plt

# 原始數據
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])

# 擬合函數
f = np.polyfit(x, y, 1)

# 繪製擬合結果
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, np.polyval(f, x), 'r', label='Fitted line')
plt.legend()
plt.show()

2. 用高階多項式擬合數據

除了一階多項式外,還可以用高階多項式(例如二次函數、三次函數等)進行數據擬合。

import numpy as np
import matplotlib.pyplot as plt

# 原始數據
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 6, 9, 10, 11])

# 二次函數擬合
f = np.polyfit(x, y, 2)

# 繪製擬合結果
plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, np.polyval(f, x), 'r', label='Fitted line')
plt.legend()
plt.show()

3. 用numpy.polyfit對非線性數據進行擬合

除了對線性數據的擬合外,還可以利用numpy.polyfit函數對非線性數據進行擬合,例如下圖所示的非線性函數擬合:

import numpy as np
import matplotlib.pyplot as plt

# 原始數據
x = np.array([1, 2, 3, 4, 5])
y = np.array([10, 17, 25, 37, 50])

# 擬合函數(使用3階多項式)
f = np.polyfit(x, y, 3)

# 繪製擬合結果
xp = np.linspace(0, 6, 100)
plt.plot(x, y, 'o', label='data', markersize=10)
plt.plot(xp, np.polyval(f, xp), 'r', lw=2.5, label='fit')
plt.legend()
plt.show()

四、綜合實例:用numpy.polyfit進行黃金分割數擬合

黃金分割數是指將一條線段分割為兩部分,較大部分與整條線段之比等於較小部分與較大部分之比,其值約為1.6180339887。利用numpy.polyfit函數,可以方便地對黃金分割數進行擬合,從而得到它的近似值。

import numpy as np
import matplotlib.pyplot as plt

# 生成黃金分割數列
x = np.arange(1, 50)
y = x[:-1] / x[1:]

# 擬合函數
f = np.polyfit(x[:-1], y, len(x)-2)

# 繪製擬合結果
plt.plot(x, y, 'ro', label='Golden ratio', markersize=7)
plt.plot(x[:-1], np.polyval(f, x[:-1]), 'b', label='Fitted curve')
plt.legend()
plt.show()

五、總結

本文通過介紹numpy.polyfit函數的參數、返回值以及應用實例,詳細闡述了如何使用該函數進行多項式擬合,以及如何將其應用於非線性數據擬合和特定場景中的實際問題,從而使讀者能夠更加深入地理解和使用Python中的numpy庫。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/186719.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-27 05:48
下一篇 2024-11-27 05:48

相關推薦

  • 使用vscode建立UML圖的實踐和技巧

    本文將重點介紹在使用vscode在軟件開發中如何建立UML圖,並且給出操作交互和技巧的指導。 一、概述 在軟件開發中,UML圖是必不可少的重要工具之一。它為軟件架構和各種設計模式的…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29

發表回復

登錄後才能評論