使用 newthon-raphson 时出现此错误:在 double_scalars 中遇到无效值

当我尝试在我的代码中使用一些数字时出现此错误,我要求用户输入第一个角度,因此 python 使用 Newton-raphson 给出一个新数字。但是,当我输入小数字甚至是一些随机数字时,我会收到该错误。这是我的代码,这是我第一次使用python:


import numpy as np

def cos(x):

    return np.cos(np.radians(x))

def sin(x):

    return np.sin(np.radians(x))


D = 5

Q = 18


def poli(x):

    y= (2/D**2)*((((D*(Q**2))/9.81)*(sin(x)))**0.33) + 0.25*sin(2*x) + 0.5*x - x

    return (y)


def deri(x):

    d=0.0087*cos(2*x) + ((0.0155*(Q**0.66)*cos(x))/(D*9.81*((D*sin(x))/9.81)*0.67)) - 0.5

    return (d)


print ("Método de Newton-Raphson")

x = float(input('Introduce el valor de inicio '))

erroru=0.001

raiz=[ ]

raiz.insert(0,0)

i=0

error=1

while abs(error) > erroru:

    x1=x-(poli(x)/deri(x))

    raiz.append(x1)

    i=i+1

    x=x1

    error=(raiz[i]-raiz[i-1])/raiz[i]

    print (x)

我不知道如何解决它


侃侃尔雅
浏览 93回答 2
2回答

胡说叔叔

问题是您numpy.float64在代码中输入了类型,而 float64 就像 c float,并且重载所有操作(包括)电源以使其正常工作。当你这样做时,你会发生错误(value ** 0.33)其中 value 是负numpy.float64类型。值** 0.33可能是一个虚数。Python numpy float64s 是真实的,所以上面是一个无效的表达式(python float 可以处理)。为了使它起作用,您可以将其转换为float(但最终结果可能不正确)您可以这样转换 poli 函数:def poli(x):    y= (2/D**2)*(float(((D*(Q**2))/9.81)*(sin(x)))**0.33) + 0.25*sin(2*x) + 0.5*x - x    return (y)之后你得到另一个错误,但那是另一个故事TypeError:输入类型不支持 ufunc 'radians',并且根据转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型

LEATH

np.cos 和 np.sin 指的是弧度。无需转换import numpy as npdef cos(x):    return np.cos(x)def sin(x):    return np.sin(x)D = 5Q = 18def poli(x):    y= (2/D**2)*((((D*(Q**2))/9.81)*(sin(x)))**0.33) + 0.25*sin(2*x) + 0.5*x - x    return (y)def deri(x):    d=0.0087*cos(2*x) + ((0.0155*(Q**0.66)*cos(x))/(D*9.81*((D*sin(x))/9.81)*0.67)) - 0.5    return (d)print ("Método de Newton-Raphson")x = float(input('Introduce el valor de inicio '))erroru=0.001raiz=[ ]raiz.insert(0,0)i=0error=1while abs(error) > erroru:    x1=x-(poli(x)/deri(x))    raiz.append(x1)    i=i+1    x=x1    error=(raiz[i]-raiz[i-1])/raiz[i]    print (x)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python