为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2022-05-24 17:01:38
当我尝试在我的代码中使用一些数字时出现此错误,我要求用户输入第一个角度,因此 python 使用 Newton-raphson 给出一个新数字。但是,当我输入小数字甚至是一些随机数字时,我会收到该错误。这是我的代码,这是我第一次使用python:import numpy as npdef cos(x):    return np.cos(np.radians(x))def sin(x):    return np.sin(np.radians(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)我不知道如何解决它
查看完整描述

2 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

问题是您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'' 无法安全地将输入强制转换为任何支持的类型


查看完整回答
反对 回复 2022-05-24
?
LEATH

TA贡献1936条经验 获得超6个赞

np.cos 和 np.sin 指的是弧度。无需转换


import numpy as np

def cos(x):

    return np.cos(x)

def sin(x):

    return np.sin(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)


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信