簡體   English   中英

如何將數學 function 擬合到 Python 中的數據集

[英]How to fit math function to the dataset in Python

我有如下三組數據: 在此處輸入圖像描述

我想知道他們遵循的 function 是什么以及如何在 Python 中擬合這些曲線?

我猜第一個 function 是這樣的:

y = ax b + cx + d

我嘗試了一些任意參數:

x = numpy.arange(1,10000,2.)
a = 100.
b = -0.003 
c = 50.
d = 0.1
y = -a/x**d+b*x+c
scatter(x,y)

如圖所示:

在此處輸入圖像描述

任何人都可以幫助其他兩個?

這就是我解決這個問題的方法,作為 NumPy 和 SciPy 的初學者:

首先,創建一個我們認為為每個x計算y的 Python function。 (這個等式在上面的問題中。)

def fx(x, a, b, c, d):
    return -a / x**d + b*x + c

然后我們需要圖表中的一些數據,這些數據沒有包含在問題中,所以我猜了一下,使用問題中的綠色圖表:

x = [0.01, 1000, 2000, 4000, 6000, 8000, 10000]
y = [1, 1.67, 1.75, 1.67, 1.6, 1.5, 1.4]

(x = 0 是一個無效點,因為0**d是 0,我們不能除以零。這就是我說“0.01”的原因。)

然后我們讓 SciPy 計算常量應該是什么:

from scipy.optimize import curve_fit

popt, pcov = curve_fit(fx, x, y)
print(popt)

這會導致“RuntimeError:未找到最佳參數”。 我們可以通過手動猜測d的值來提供幫助:

def fx(x, a, b, c):
    d = -0.1
    return -a / x**d + b*x + c

popt變量將包含abc的值:

[-5.64063556e-01 -6.55610681e-05  6.41890483e-01]

在進行這樣的實驗並嘗試不同的值時,使用像Desmos這樣的圖形計算器會很有幫助。

scipy中有一個函數可用於將函數擬合到數據: scipy.optimize.curve_fit

感謝您的所有幫助。 我從朋友那里得到了解決方案。

y = -a / x ** d + b * x + c

由於d使擬合變得復雜,因此將d從0.1設置為1.0會更容易,然后使用curve_fit擬合模型。 最后找到最佳參數集。

不勝感激!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM