如何应用牛顿拉夫森根来确定函数的根

How to apply Newton Raphson roots to determine roots for a function

假设 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)

因此我的问题是,我的 Newton Raphson 迭代可能出了什么问题,或者您将如何进行迭代。我的输入有问题还是我需要什么其他输入?我的错误结果可以在生成的输出下方看到。

公式为:

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'

您应该将函数 f 和参数 k 传递给 optimize.newton,而不是对该函数的一次求值,因为 f(k) 会 return。优化例程的 x0 变量的初始估计,在本例中是您的“k”。也就是说,您可能想要:

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

这有点猜测,因为我不确定我是否真的理解您的问题,而且错误消息并不完整。但是你肯定想传递函数 f 而不是结果 f(k).