作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我用 R 编写了以下代码来估计三个系数(a、b 和 c):
y <- c(120, 125, 158, 300, 350, 390, 2800, 5900, 7790)
t <- 1:9
fit <- nls(y ~ a * (((b + c)^2/b) * exp(-(b + c) * t))/(1 + (c/b) *
exp(-(b + c) * t))^2, start = list(a = 17933, b = 0.01, c = 0.31))
我得到了这个结果
> summary(fit )
Formula: y ~ a * (((b + c)^2/b) * exp(-(b + c) * t))/(1 + (c/b) * exp(-(b +
c) * t))^2
Parameters:
Estimate Std. Error t value Pr(>|t|)
a 2.501e+04 2.031e+03 12.312 1.75e-05 ***
b 1.891e-05 1.383e-05 1.367 0.221
c 1.254e+00 1.052e-01 11.924 2.11e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 248.8 on 6 degrees of freedom
Number of iterations to convergence: 33
Achieved convergence tolerance: 6.836e-06
如何用 Python 做同样的事情?
最佳答案
您可以使用 curve_fit
,它会给出相同的结果:
import scipy.optimize as optimization
import numpy as np
y = np.array([120, 125, 158, 300, 350, 390, 2800, 5900, 7790])
t = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
start = np.array([17933, 0.01, 0.31])
def f(t,a,b,c):
num = a*(np.exp(-t*(b+c))*np.power(b+c, 2)/b)
denom = np.power(1+(c/b)*np.exp(-t*(b+c)), 2)
return num/denom
print(optimization.curve_fit(f, t, y, start))
#(array([ 2.50111448e+04, 1.89129922e-05, 1.25426156e+00]), array([[ 4.12657233e+06, 2.58151776e-02, -2.00881091e+02],
# [ 2.58151776e-02, 1.91318685e-10, -1.44733425e-06],
# [ -2.00881091e+02, -1.44733425e-06, 1.10654268e-02]]))
关于python - 如何用python拟合非线性函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253646/
我是一名优秀的程序员,十分优秀!