2017-08-11 53 views
-1

假设x是每小时风速,我试图使用牛顿拉夫逊方法来拟合,如下所示。 K是我打算使用x值解决的无量纲参数。 def f(k)是实际方程,def d_f(k)是方程的导数,def f2(c)解决了第二个参数c。默认情况下,Scipy优化库需要使用Newton-Raphson或割线方法来查找以下输入。如何应用牛顿拉夫森根来确定函数的根

scipy.optimize.newton(func, x0, fprime=None, args=(), tol=1.48e-08, maxiter=50, fprime2=None) 

因此,我的问题是,我的牛顿拉夫逊迭代可能是错误的,或者你将如何去迭代。我的输入有什么问题,或者我需要哪些其他输入?我的错误结果可以在下面看到的输出中看到。

的公式是: enter image description here

import warnings 
import numpy as np 
import scipy 
import scipy.stats 
import sympy 
from scipy import stats as st 

x = np.random.randint(1, 23, size=3000) 
x0 = np.random.choice(x, 100, replace=True) 

def f(k): 
    return np.sum(x**k*np.log (x))/np.sum(x**k)-1/k- \ 
       1/len(x)*np.sum(np.log(x)) 

def d_f(k): 
    return len(x)*np.sum(np.log (x)*np.log(np.log-[1-f(k)])- \ 
       np.sum(np.log(x)*np.sum(np.log(np.log-[1-f(k)])))) 

def f2(c): 
    return np.exp(k*np.sum(np.log (x))-np.sum(np.log(x)* \ 
       np.sum(np.log(np.log-[1-f(k)])))) 

#Initial Guess 

k = 1.2 
scipy.optimize.newton(f(k), x0, fprime=d_f(k)) 

Generated Output 
AttributeError: 'numpy.float64' object has no attribute 'concatenate' 
+2

请添加完整的错误堆栈跟踪,而不仅仅是最后一行。 – cel

回答

1

您应该通过功能f和参数koptimize.newton,该函数没有一个评价,f(k)将返回。 x0这个优化例程是变量的初始估计值,在这种情况下,它是您的'k'。也就是说,你可能想:

scipy.optimize.newton(f, k, ...) 

这是一个有点猜的,因为我不知道我真的能理解你的问题,并且错误信息是不完整的。但是你一定要通过功能f而不是结果f(k)