在这种情况下,线性化会做什么?

时间:2017-12-02 00:52:29

标签: python numpy matplotlib linearization

def linearize(p, x):
    return p[0] * x**p[1]
def error(p, x, y):    
    return (np.log10(y) - np.log10(linearize(p, x)))


from scipy import optimize

args = freq_log[1:9063], np.abs(spec_log[1:9063])
qout, success = optimize.leastsq(error,
                             [1e5,-0.8],
                             args=args,
                             maxfev=3000)

fig,ax1=plt.subplots(figsize=(5,5))

spec = ax1.plot(freq_log,np.abs(spec_log), 'o', alpha=0.3)
approx = ax1.plot(freq_log[1:], linearize(qout, freq_log[1:]), linewidth=3)

我正在尝试复制代码,我试图理解线性化在这种情况下做了什么,它需要什么参数,以及为了弥补以下错误而返回的内容

目前它返回运行时错误和ValueError

RuntimeWarning: divide by zero encountered in power return p[0] * x**p[1]
RuntimeWarning: invalid value encountered in power return p[0] * x**p[1]
ValueError: object too deep for desired array

我主要关注的是前四行,是否有人可以帮助我了解导致此错误的原因以及如何解决此问题?

完整代码为@ https://github.com/seg/tutorials-2017/blob/master/1710_Colored_inversion/Colored_inversion_notebook.ipynb

1 个答案:

答案 0 :(得分:0)

详细的描述太长了,但值得了解。

我在网上发现了这个简短的例子。

留下链接,而不是在这里复制和粘贴。

http://www.scipy-lectures.org/intro/summary-exercises/optimize-fit.html

这里的线性化试图返回传递数据中的总噪声,然后用于评估您的误差,然后听到 leastsq ,最小化初始波形的平方和