我想我有一个相对简单的问题,但我已经尝试了几个小时,但没有运气。我正在尝试拟合一个线性函数(linearf)或幂律函数(plaw),其中我已经知道了这些函数的斜率(b,在本研究中我必须保持它不变)。结果应该是1.8左右的截获,这是我没能做到的。我一定是做错了什么事,但我不能指手画脚。有人知道如何解决这个问题吗?
提前谢谢你!
import numpy as np
from scipy import optimize
p2 = np.array([ 8.08543600e-06, 1.61708700e-06, 1.61708700e-05,
4.04271800e-07, 4.04271800e-06, 8.08543600e-07])
pD = np.array([ 12.86156, 16.79658, 11.52103, 21.092 , 14.47469, 18.87318])
# Power-law function
def plaw(a,x):
b=-0.1677 # known slope
y = a*(x**b)
return y
# linear function
def linearf(a,x):
b=-0.1677 # known slope
y = b*x + a
return y
## First way, via power-law function ##
popt, pcov = optimize.curve_fit(plaw,p2,pD,p0=1.8)
# array([ 7.12248200e-37]) wrong
popt, pcov = optimize.curve_fit(plaw,p2,pD)
# >>> return 0.9, it is wrong too (the results should be around 1.8)
## Second way, via log10 and linear function ##
x = np.log10(p2)
y = np.log10(pD)
popt, pcov = optimize.curve_fit(linearf,x,y,p0=0.3)
K = 10**popt[0]
## >>>> return 3.4712954470408948e-41, it is wrong发布于 2016-09-23 21:33:06
我只是在函数中发现了一个错误:
它应该是:
def plaw(x,a):
b=-0.1677 # known slope
y = a*(x**b)
return y而不是
def plaw(a,x):
b=-0.1677 # known slope
y = a*(x**b)
return y愚蠢的错误。
https://stackoverflow.com/questions/39659900
复制相似问题