python画反比例函数_拟合一个反比例函数
為了澄清一點。有兩個相關的問題:
最小化功能
擬合模型數據
要擬合模型對觀測數據是要找到一個模型的這種參數,減少某種模型數據與觀測數據之間的錯誤。 (x)可以是一個向量)。
F(x) = 0.5 * sum(rho(f_i(x)**2), i = 0, ..., m - 1)
(rho是虧損的功能,默認是rho(x) = x所以不介意它)
least_squares(func, x0)預計調用func(x)將返回一個矢量[a1, a2, a3, ...]為其平方和,將計算:S = 0.5 * (a1^2 + a2^2 + a3^2 + ...)。
least_squares將調整x0以盡量減少S。
因此,為了用它來擬合模型數據,必須構建誤差的函數的模型和實際數據之間 - 殘差然后最小化殘差功能。
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))
這給出了一個結果:在你的情況,你可以如下寫 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])
但是,作為一個殘差功能幾乎相同的所有的時間(res = observed_data - model_data),有scipy.optimize中的快捷方式叫做curve_fit:curve_fit(func, xdata, ydata, x0)。 curve_fit自動構建殘差函數,你可以簡單地寫:
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]), ...
總結
以上是生活随笔為你收集整理的python画反比例函数_拟合一个反比例函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python jupter输入文字行_少
- 下一篇: python统计三国_如何用python