Python(scipy.optimize.curve_fit 的问题)

标签 python optimization scipy curve-fitting

所以我在这里遇到了这段代码的问题:

import numpy as np
import matplotlib.pyplot as plt
import scipy as sy
import pylab as plb

def oscDecay(x, A, B, C, tau, omega):
    return A*(1+B*np.cos(omega*x))*np.exp(-1*x**2/(2*tau**2))+C


def LMfit(func, x, y, p0, sig):
    #Fits data to non-linear curve using Levenberg-Marquart Method
    #Inputs: func = the function you are fitting data to
    #        x, y = data set
    #       p0 = tuple containing inital guesses for fitting  parameters
    #       sig = uncertainty in values
    #Outputs: nlfit = array containing optimal values for fitting parameters
    #       nlcov = two dimensional array (square root of diagonals contain
    #               uncertainty in fitting parameters)
    nlfit, nlpcov = sy.optimize.curve_fit(func, x, y, p0, sig)
    return nlfit, nlpcov

data=np.loadtxt('testing.txt', skiprows=4)

x=data[:, 0]
y=data[:, 1]
sig=data[:, 2]

#intial parameters
A0=16.5
B0=0.57
C0=17
tau0=30
omega0=7
p0=(A0, B0, C0, tau0, omega0)

nlfit, nlpcov = LMfit(oscDecay, x, y, p0, sig)

当我尝试运行它时,收到此错误消息:

nlfit, nlpcov = sy.optimize.curve_fit(oscDecay, x, y, p0, sig)。 AttributeError:“模块”对象没有属性“优化”

我不确定这意味着什么,因为我的软件已经为我提供了 scipy.optimize 供我使用。

最佳答案

在您的情况下,导入似乎没有像评论者所指出的那样起作用。 我必须制作一个合成样本来测试您的代码。我只是省略了西格玛,它工作得很好(使用 Ipython 笔记本)。

import numpy as np
import matplotlib.pyplot as p
from scipy import optimize as opt
%matplotlib inline

def oscDecay(x, A, B, C, tau, omega):
    return A*(1+B*np.cos(omega*x))*np.exp(-1*x**2/(2*tau**2))+C

# make an example of data with some experimental noise
def oscDecayexp(x, A, B, C, tau, omega):
    rand=np.random.rand(len(x))
    return A*(1+(B+rand/10)*np.cos(omega*x))*np.exp(-1*x**2/(2*tau**2))+C


def LMfit(func, x, y, p0 ,sig=None):
    #Fits data to non-linear curve using Levenberg-Marquart Method
    #Inputs: func = the function you are fitting data to
    #        x, y = data set
    #       p0 = tuple containing inital guesses for fitting  parameters
    #       sig = uncertainty in values
    #Outputs: nlfit = array containing optimal values for fitting parameters
    #       nlcov = two dimensional array (square root of diagonals contain
    #               uncertainty in fitting parameters)
    nlfit, nlpcov = opt.curve_fit(func, x, y, p0, sig)
    return nlfit, nlpcov


#intial parameters
A0=16.5
B0=0.57
C0=17
tau0=30
omega0=7

x=np.arange(0,80,0.02)
y=oscDecayexp(x,A0,B0,C0,tau0,omega0)

p.figure(figsize=(12,8))

p.plot(x, oscDecay(x,A0,B0,C0,tau0,omega0)) # blue
p.plot(x, oscDecayexp(x,A0,B0,C0,tau0,omega0),lw=0.5) #green

p0=(A0, B0, C0, tau0, omega0)
# scipy.optimize.curve_fit(f, xdata, ydata, p0=None, sigma=None, absolute_sigma=False, check_finite=True, **kw)  
nlfit, nlpcov = LMfit(oscDecay, x, y, p0 )

print nlfit

输出:

enter image description here

关于Python(scipy.optimize.curve_fit 的问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107627/

相关文章:

python - Flask 文件结构

python - "Group"行基于一列,然后为现有其他列值的可能组合创建新列

c++ - 使用 g++ 制作静态库的优化和标志

python - scipy.misc 模块没有属性 imread?

python - Scipy.Optimise Curve_fit 的指数拟合不起作用

python - 在 Python 中验证长链条件的 Pythonic 方法

python - 从给定的 I 和 D 序列中形成最小数

c++ - 优化 vector<string> 中不必要的字符串复制

python - 优化pdfminer

optimization - SLSQP 优化算法是如何工作的?