」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在 Python 中執行指數和對數曲線擬合?

如何在 Python 中執行指數和對數曲線擬合?

發佈於2024-11-08
瀏覽:870

How can I perform exponential and logarithmic curve fitting in Python?

曲線擬合:Python 中的指數和對數方法

雖然Python 中可以使用polyfit() 輕鬆進行多項式曲線擬合,但本指南探討了指數和對數曲線的方法擬合。

對數擬合

擬合 y 形式的直線= A B log x,只需執行 y 對 log x 的多項式擬合。

import numpy as np

x = np.array([1, 7, 20, 50, 79])
y = np.array([10, 19, 30, 35, 51])

coeffs = np.polyfit(np.log(x), y, 1)
print("y ≈", coeffs[1], "log(x)  ", coeffs[0])  # y ≈ 8.46 log(x)   6.62

指數擬合

擬合a y = Ae^{Bx} 形式的直線,取兩邊的對數並對log y進行多項式擬合x.

x = np.array([10, 19, 30, 35, 51])
y = np.array([1, 7, 20, 50, 79])

coeffs = np.polyfit(x, np.log(y), 1)
print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 0.670 * exp(0.105 * x)")

為了更好的精確度,使用polyfit() 中的w 關鍵字,槓桿權重與y 成正比。

coeffs = np.polyfit(x, np.log(y), 1, w=np.sqrt(y))
print("y ≈ exp(", coeffs[1], ") * exp(", coeffs[0], " * x) = 4.12 * exp(0.0601 * x)")

請注意,大多數電子表格和科學計算器應用程式使用未加權公式進行指數回歸,因此如果需要相容性,請避免使用權重。

使用scipy.optimize.curve_fit

如果 scipy 可用,則使用 curve_fit 擬合模型而不進行轉換。

from scipy.optimize import curve_fit

# Logarithmic fitting
coeffs, _ = curve_fit(lambda t, a, b: a   b * np.log(t), x, y)
print("y ≈", coeffs[1], "log(x)  ", coeffs[0])  # y ≈ 6.62   8.46 log(x)

# Exponential fitting with initial guess
coeffs, _ = curve_fit(lambda t, a, b: a * np.exp(b * t), x, y, p0=(4, 0.1))
print("y ≈", coeffs[0], "exp(", coeffs[1], " * x) = 4.88 exp(0.0553 x)")

透過提供初始猜測,curve_fit可以達到指數擬合所需的局部最小值,比變換後的polyfit 方法更準確。

最新教學 更多>
  • 我們如何使用 Gin 框架來增強 Go 應用程式中的錯誤處理?
    我們如何使用 Gin 框架來增強 Go 應用程式中的錯誤處理?
    更好的錯誤處理問題在Go應用程式中,我們如何透過定義自訂錯誤類型(例如appError和實現自定義處理程序來捕獲錯誤並將其寫入回應中?正常的流程邏輯。 ))建立錯誤中間件:func JSONAppErrorReporter() gin.HandlerFunc { 返回 func(c *gin...
    程式設計 發佈於2024-11-08
  • DOM API 終極指南
    DOM API 終極指南
    // Selecting Elements: document is not the real DOM element. document.documentElement; // Select the entire page document.head; // Select the head doc...
    程式設計 發佈於2024-11-08
  • Python 中的實例方法與類別方法:什麼時候應該使用“self”和“cls”?
    Python 中的實例方法與類別方法:什麼時候應該使用“self”和“cls”?
    深入研究類別和實例方法的細微差別:Beyond Self 與ClsPython 增強提案(PEP) 8 建議使用“self”作為實例方法中的第一個參數,「cls」作為類別方法中的第一個參數。這種差異源自於這些方法在處理實例和類別時所扮演的不同角色。 實例方法:自我優勢實例方法在實例的實例上呼叫班級。...
    程式設計 發佈於2024-11-08
  • Node.js 傻瓜指南 - MongoDB 和 Fastify
    Node.js 傻瓜指南 - MongoDB 和 Fastify
    O que é Node.js? Node.js, uma plataforma construída sobre o motor de JavaScript V8 do Google Chrome, revolucionou o desenvolvimento backend n...
    程式設計 發佈於2024-11-08
  • 如何使用 Joda Time 將日期字串解析為 DateTime 物件並避免「無效格式」錯誤?
    如何使用 Joda Time 將日期字串解析為 DateTime 物件並避免「無效格式」錯誤?
    使用Joda Time 將日期字串解析為DateTime 物件處理日期和時間資料時,通常需要轉換日期作為字串儲存到結構化物件中以便進一步處理。 Joda Time 庫提供了一套全面的工具,用於處理 Java 中的日期和時間操作。 一個常見任務是將日期字串轉換為 DateTime 物件。但是,如果字串...
    程式設計 發佈於2024-11-08
  • 如何解決 PHP 中的「每個引號前都有斜線」問題?
    如何解決 PHP 中的「每個引號前都有斜線」問題?
    理解「引號前的斜槓」問題在某些情況下,PHP網頁可能會遇到提交表單資料導致添加一個每個雙引號前都有反斜線。此問題是由稱為“魔術引號”的伺服器配置功能引起的。 啟用魔術引號後,PHP 在向資料庫或表單提交發送或從資料庫或表單提交接收某些字符時,會自動轉義某些字符,包括雙引號。雖然這可以透過轉義惡意引號...
    程式設計 發佈於2024-11-08
  • ## 如何在 C++ 中將多維數組轉換為函式庫函數的指標?
    ## 如何在 C++ 中將多維數組轉換為函式庫函數的指標?
    在 C 中將多維數組轉換為指標 在 C 中,多維數組與指標不直接相容。當嘗試使用採用 double** 的函式庫函數時,使用簡單的強制轉換轉換 double4 陣列可能會導致錯誤。 要解決此問題,必須使陣列適應函數的介面。不要將整個陣列轉換為double**,而是建立指向每行開頭的臨時「索引」陣列:...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中非同步執行 cURL 請求?
    如何在 PHP 中非同步執行 cURL 請求?
    PHP中的非同步Curl請求在PHP中非同步執行curl post請求可以提高效能並防止潛在的延遲。以下是如何使用不同的方法實現此目的:使用非同步 cURL 函數使用curl_multi_*時,您可以同時執行多個 cURL 要求。以下是一個範例程式碼:$curl = curl_init($reque...
    程式設計 發佈於2024-11-08
  • 如何將 Boehm 垃圾收集器與 C++ 標準庫類別(如“std::vector”和“std::string”)整合?
    如何將 Boehm 垃圾收集器與 C++ 標準庫類別(如“std::vector”和“std::string”)整合?
    將Boehm 垃圾收集器與C 標準庫結合使用開發多線程C 應用程式時,Boehm 保守的垃圾收集器對於簡化記憶體非常有用管理。這就提出瞭如何將 Boehm GC 與 C 標準函式庫的類別(如 std::map 和 std::vector)整合的問題。 一種方法涉及重新定義全域運算子 ::new 以使...
    程式設計 發佈於2024-11-08
  • 如何管理具有共用欄位的類似 Go 結構的函數?
    如何管理具有共用欄位的類似 Go 結構的函數?
    Go 最佳實踐:管理具有共享字段的相似結構體的函數在Go 中,經常會遇到具有相似字段的多個結構體,並且需要對它們執行相同的操作。為了在保持靈活性的同時避免程式碼重複,請考慮以下策略:為共享欄位建立自訂類型:如果共用欄位是簡單資料類型(例如,字串),考慮為其定義自訂類型。這允許您將方法附加到自訂類型,...
    程式設計 發佈於2024-11-08
  • 如何在Ajax資料載入過程中顯示進度條?
    如何在Ajax資料載入過程中顯示進度條?
    如何在Ajax 資料載入期間顯示進度條處理使用者觸發的事件(例如從下拉方塊中選擇值)時,通常會使用非同步擷取資料阿賈克斯。在獲取數據時,向用戶提供正在發生某事的視覺指示是有益的。本文探討了一種在 Ajax 請求期間顯示進度條的方法。 使用 Ajax 實作進度條要建立一個準確追蹤 Ajax 呼叫進度的...
    程式設計 發佈於2024-11-08
  • 如何在 PHP 中透過 SSH 安全連接到遠端 MySQL 伺服器?
    如何在 PHP 中透過 SSH 安全連接到遠端 MySQL 伺服器?
    在PHP 中透過SSH 安全連接到遠端MySQL 伺服器要為PHP 資料庫連線建立安全隧道,以下SSH 隧道解決方案提供了一種強大的方法。 SSH 隧道設定建立通往 MySQL 資料庫伺服器的 SSH 隧道。為此,請使用以下命令:ssh -fNg -L 3307:10.3.1.55:3306 [em...
    程式設計 發佈於2024-11-08
  • 混淆技術真的可以保護可執行檔免受逆向工程的影響嗎?
    混淆技術真的可以保護可執行檔免受逆向工程的影響嗎?
    保護可執行檔免於逆向工程:解決方案有限的挑戰保護程式碼免於未經授權的逆向工程是開發人員持續關注的問題,尤其是當它包含敏感資訊時。雖然已經提出了各種方法,但重要的是要承認完全防止逆向工程實際上是不可能的。 常見混淆技術使用者建議的策略,例如程式碼注入、混淆和自訂啟動例程的目的是使反彙編變得不那麼簡單。...
    程式設計 發佈於2024-11-08
  • 掌握 Laravel 中的 Eloquent where 條件
    掌握 Laravel 中的 Eloquent where 條件
    Laravel 的 Eloquent ORM(物件關係映射)是其突出的功能之一,提供了與資料庫互動的強大而富有表現力的方式。 Eloquent 提供的一項基本功能是方法,它允許開發人員高效、直觀地過濾查詢。在本文中,我們將深入研究 where 條件,探索其各種形式和實際用例。 w...
    程式設計 發佈於2024-11-08
  • 在 Gmail 的 Chrome 12+ 更新中如何從剪貼簿貼上圖片?
    在 Gmail 的 Chrome 12+ 更新中如何從剪貼簿貼上圖片?
    將剪貼簿中的圖像貼到Gmail:Chrome 12 中的操作方法Google 宣布能夠將剪貼簿中的圖像直接貼到Gmail使用Chrome 12 的Gmail 引發了人們對其底層機制的好奇。儘管使用了最新的 Chrome 版本,但一些用戶仍然無法找到有關如何在 Webkit 中實現此增強功能的資訊。 ...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3