Я получаю эту ошибку, когда пытаюсь запустить мой коди, я использовал то же уравнение при использовании метода деления пополам, поэтому я не знаю, почему я получаю это: строка 119, в производной val += weights[k]*func(x0+(k-ho)*dx,*args)
TypeError: 'float' object is not callable
Мой код:
import math
from scipy.misc import derivative
d = float(input("Ingresar diametro [m]: "))
q = float(input("Ingresar caudal [m^3/s]: "))
n = float(input("Ingresar coeficiente de manning (n): "))
s = float(input("Ingresar pendiente de fondo (S0): "))
def poli(x):
y= (q*n)*(math.acos(1-(2*x)/d)*d)**(0.666667)-((1/8)*(2*math.acos(1-(2*x)/d)- math.sin(2*math.acos(1-(2*x)/d))))**(1.66667)*(s**0.5)
return (y)
print ("Utilizando Método de bisección")
xi=0
xs=10
error=0.0001
print("Tolerancia:",error)
xa=(xi+xs)/2
i=0
while abs(poli(xi)) > error:
i=i+1
xa = (xi+xs)/2.0
if poli(xi)*poli(xa)<0:
xs=xa
signo="negativo"
limite="superior"
else:
xi=xa
signo="positivo"
limite="inferior"
print(xa)
xa=xa*1
print("Altura normal trapecio en Método de biseccion: ",xa)
#metodo de newton-raphson
def poli(x):
y=(q*n)*(math.acos(1-(2*x)/d)*d)**(0.666667)-((1/8)*(2*math.acos(1-(2*x)/d)- math.sin(2*math.acos(1-(2*x)/d))))**(1.66667)*(s**0.5)
return (y)
def deri(x):
dr=lambda x:(q*n)*(math.acos(1-(2*x)/d)*d)**(0.666667)-((1/8)*(2*math.acos(1-(2*x)/d)- math.sin(2*math.acos(1-(2*x)/d))))**(1.66667)*(s**0.5)
dr=derivative(d,x,1e-3)
return (dr)
print ("Utilizando Método de Newton-Raphson")
x=1
if x<=1:
x=2
else:
x=x
erroru=0.0001
print("Tolereancia:",erroru)
raiz=[ ]
raiz.insert(0,0)
i=0
error=1
while abs(error) > erroru:
x1=x-(poli(x)/deri(x))
i=i+1
x=x1
raiz.append(x1)
error=(raiz[i]-raiz[i-1])/raiz[i]
print (x)
x=x*1
print ("Altura normal trapecio en Método de Newton-Raphson =",x)
Я думаю, что ошибка в производной, но я почти уверен, что мое уравнение верное. Мне действительно нужна помощь, я должен закончить до понедельника