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'' 无法安全地将输入强制转换为任何支持的类型
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)
添加回答
举报