首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python、scipy.optimize.curve_fit不适合已知斜率的线性方程

Python、scipy.optimize.curve_fit不适合已知斜率的线性方程
EN

Stack Overflow用户
提问于 2016-09-23 19:40:07
回答 1查看 194关注 0票数 1

我想我有一个相对简单的问题,但我已经尝试了几个小时,但没有运气。我正在尝试拟合一个线性函数(linearf)或幂律函数(plaw),其中我已经知道了这些函数的斜率(b,在本研究中我必须保持它不变)。结果应该是1.8左右的截获,这是我没能做到的。我一定是做错了什么事,但我不能指手画脚。有人知道如何解决这个问题吗?

提前谢谢你!

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2016-09-23 21:33:06

我只是在函数中发现了一个错误:

它应该是:

代码语言:javascript
复制
def plaw(x,a):

    b=-0.1677 # known slope
    y = a*(x**b)

    return y

而不是

代码语言:javascript
复制
def plaw(a,x):

b=-0.1677 # known slope
y = a*(x**b)

return y

愚蠢的错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39659900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档