python画反比例函数_拟合一个反比例函数
為了澄清一點(diǎn)。有兩個(gè)相關(guān)的問題:
最小化功能
擬合模型數(shù)據(jù)
要擬合模型對(duì)觀測(cè)數(shù)據(jù)是要找到一個(gè)模型的這種參數(shù),減少某種模型數(shù)據(jù)與觀測(cè)數(shù)據(jù)之間的錯(cuò)誤。 (x)可以是一個(gè)向量)。
F(x) = 0.5 * sum(rho(f_i(x)**2), i = 0, ..., m - 1)
(rho是虧損的功能,默認(rèn)是rho(x) = x所以不介意它)
least_squares(func, x0)預(yù)計(jì)調(diào)用func(x)將返回一個(gè)矢量[a1, a2, a3, ...]為其平方和,將計(jì)算:S = 0.5 * (a1^2 + a2^2 + a3^2 + ...)。
least_squares將調(diào)整x0以盡量減少S。
因此,為了用它來擬合模型數(shù)據(jù),必須構(gòu)建誤差的函數(shù)的模型和實(shí)際數(shù)據(jù)之間 - 殘差然后最小化殘差功能。
import numpy as np
from scipy.optimize import least_squares
x = np.asarray(range(20,401,20))
y = np.random.rand(20)
params = np.array([1,1])
def funcinv(x, a, b):
return b + a/x
def residuals(params, x, data):
# evaluates function given vector of params [a, b]
# and return residuals: (observed_data - model_data)
a, b = params
func_eval = funcinv(x, a, b)
return (data - func_eval)
res = least_squares(residuals, params, args=(x, y))
這給出了一個(gè)結(jié)果:在你的情況,你可以如下寫 print(res)
...
message: '`gtol` termination condition is satisfied.'
nfev: 4
njev: 4 optimality: 5.6774618339971994e-10
status: 1
success: True
x: array([ 6.89518618, 0.37118815])
但是,作為一個(gè)殘差功能幾乎相同的所有的時(shí)間(res = observed_data - model_data),有scipy.optimize中的快捷方式叫做curve_fit:curve_fit(func, xdata, ydata, x0)。 curve_fit自動(dòng)構(gòu)建殘差函數(shù),你可以簡(jiǎn)單地寫:
import numpy as np
from scipy.optimize import curve_fit
x = np.asarray(range(20,401,20))
y = np.random.rand(20)
params = np.array([1,1])
def funcinv(x, a, b):
return b + a/x
res = curve_fit(funcinv, x, y, params)
print(res) # ... array([ 6.89518618, 0.37118815]), ...
總結(jié)
以上是生活随笔為你收集整理的python画反比例函数_拟合一个反比例函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python jupter输入文字行_少
- 下一篇: python统计三国_如何用python