¿Cómo puedo elegir una función con una función de clase?
class ODEsolver():
def __init__(self):
self.init=self
def Euler(self, fcn, x0, y0, xend, h):
estimate=[y0]
z=y0
b=0
t=x0
while(t<xend):
slope1=fcn(bisection(t,301,1200,10**-4))
y=z+slope1*h/8
t+=h
z=y
estimate.append(y)
return estimate
def heun(self, fcn, x0, y0, xend, h):
pass
def rungekutta(self,fcn,x0,y0,xend,h):
pass
def solve(self,which, fcn, x0, y0, xend, h):
if which==0:
return self.euler(fcn,x0,y0,xend,h)
elif which==1:
return self.heun(fcn,x0,y0,xend,h)
else:
return self.rungekutta(fcn,x0,y0,xend,h)
estoy intentando elegir una función y obtener un retorno como list([])
. pero e=r.solve(0,diff,0,1200,6000,30)
devuelve none
. ¿cómo puedo obtener un retorno correcto de este código?
- simplifiqué otras funciones como heun, rungekutta porque me di cuenta de que el problema está en
r.solve()
porque simplemente llamar a una función comor.euler
funcionó bien. slope1=”fcn(bisection(t,301,1200,10**-4))” y=”z+slope1*h/8″ t+=”h” z=”y” estimate.append(y)=”” return=”” estimate=”” def=”” heun(self,=”” fcn,=”” x0,=”” y0,=”” xend,=”” h):=”” pass=”” def=”” rungekutta(self,fcn,x0,y0,xend,h):=”” pass=”” def=”” solve(self,which,=”” fcn,=”” x0,=”” y0,=”” xend,=”” h):=”” if=”” which=”=0:” return=”” self.euler(fcn,x0,y0,xend,h)=”” elif=”” which=”=1:” return=”” self.heun(fcn,x0,y0,xend,h)=”” else:=”” return=”” self.rungekutta(fcn,x0,y0,xend,h)=””="" estoy="" intentando="" elegir="" una="" función="" y="" obtener="" un="" retorno="" como="" `list([])`.="" pero="" `e="r.solve(0,diff,0,1200,6000,30)`" devuelve="" `none`.="" ¿cómo="" puedo="" obtener="" un="" retorno="" correcto="" de="" este="" código?="" *="" simplifiqué="" otras="" funciones="" como="" heun,="" rungekutta="" porque="" me="" di="" cuenta="" de="" que="" el="" problema="" está="" en="" `r.solve()`="" porque="" simplemente="" llamar="" a="" una="" función="" como="" `r.euler`="" funcionó=""></xend):
slope1=fcn(bisection(t,301,1200,10**-4))
y=z+slope1*h/8
t+=h
z=y
estimate.append(y)
return estimate
def heun(self, fcn, x0, y0, xend, h):
pass
def rungekutta(self,fcn,x0,y0,xend,h):
pass
def solve(self,which, fcn, x0, y0, xend, h):
if which==0:
return self.euler(fcn,x0,y0,xend,h)
elif which==1:
return self.heun(fcn,x0,y0,xend,h)
else:
return self.rungekutta(fcn,x0,y0,xend,h)
estoy intentando elegir una función y obtener un retorno como list([])
. pero e=r.solve(0,diff,0,1200,6000,30)
devuelve none
. ¿cómo puedo obtener un retorno correcto de este código?
- simplifiqué otras funciones como heun, rungekutta porque me di cuenta de que el problema está en
r.solve()
porque simplemente llamar a una función comor.euler
funcionó bien.>
davy.ai
Hay un par de errores en el código proporcionado que causan que
r.solve(0,diff,0,1200,6000,30)
devuelvaNone
.En primer lugar, en el método
solve()
, las llamadas a la funciónEuler()
,Heun()
yRungeKutta()
no tienen una declaración dereturn
. Por lo tanto, incluso si se llama correctamente al método según el valor dewhich
, el valor devuelto no se está pasando de vuelta al métodosolve()
.Para solucionar esto, debemos agregar declaraciones de
return
a los tres métodos de la siguiente manera:en segundo lugar, el método
solve()
no está devolviendo nada. necesita devolver la salida del método seleccionado, de la siguiente manera:finalmente, hay un error tipográfico en el método
solve()
. la funcióndiff
se pasa como argumento al método elegido, pero no está definida en ninguna parte del código proporcionado. suponiendo quediff
es una función válida que está definida en otro lugar del programa, el código debería funcionar bien después de las correcciones mencionadas anteriormente. slope1=”fnc(bisection(t,301,1200,10-4))” y=”z+slope1*h/8″ t+=”h” z=”y” estimate.append(y)=”” return=”” estimate=”” def=”” heun(self,=”” fcn,=”” x0,=”” y0,=”” xend,=”” h):=”” #=”” implementación=”” del=”” método=”” de=”” heun=”” return=”” estimate=”” def=”” rungekutta(self,fcn,x0,y0,xend,h):=”” #=”” implementación=”” del=”” método=”” de=”” runge=”” kutta=”” return=”” estimate=””="" en="" segundo="" lugar,="" el="" método="" `solve()`="" no="" está="" devolviendo="" nada.="" necesita="" devolver="" la="" salida="" del="" método="" seleccionado,="" de="" la="" siguiente="" manera:=""
=”” def=”” solve(self,which,=”” fcn,=”” x0,=”” y0,=”” xend,=”” h):=”” if=”” which=”=0:” return=”” self.euler(fcn,x0,y0,xend,h)=”” #=”” agregar=”” declaración=”” de=”” retorno=”” elif=”” which=”=1:” return=”” self.heun(fcn,x0,y0,xend,h)=”” #=”” agregar=”” declaración=”” de=”” retorno=”” else:=”” return=”” self.rungekutta(fcn,x0,y0,xend,h)=”” #=”” agregar=”” declaración=”” de=”” retorno=”” “`=”” finalmente,=”” hay=”” un=”” error=”” tipográfico=”” en=”” el=”” método=””solve()
.=”” la=”” función=””diff
=”” se=”” pasa=”” como=”” argumento=”” al=”” método=”” elegido,=”” pero=”” no=”” está=”” definida=”” en=”” ninguna=”” parte=”” del=”” código=”” proporcionado.=”” suponiendo=”” que=””diff
=”” es=”” una=”” función=”” válida=”” que=”” está=”” definida=”” en=”” otro=”” lugar=”” del=”” programa,=”” el=”” código=”” debería=”” funcionar=”” bien=”” después=”” de=”” las=”” correcciones=”” mencionadas=””></xend):slope1=fnc(bisection(t,301,1200,10-4))
y=z+slope1*h/8
t+=h
z=y
estimate.append(y)
return estimate
def heun(self, fcn, x0, y0, xend, h):
# implementación del método de heun
return estimate
def rungekutta(self,fcn,x0,y0,xend,h):
# implementación del método de runge kutta
return estimate
def solve(self,which, fcn, x0, y0, xend, h):
if which==0:
return self.euler(fcn,x0,y0,xend,h) # agregar declaración de retorno
elif which==1:
return self.heun(fcn,x0,y0,xend,h) # agregar declaración de retorno
else:
return self.rungekutta(fcn,x0,y0,xend,h) # agregar declaración de retorno
“`
finalmente, hay un error tipográfico en el método
solve()
. la funcióndiff
se pasa como argumento al método elegido, pero no está definida en ninguna parte del código proporcionado. suponiendo quediff
es una función válida que está definida en otro lugar del programa, el código debería funcionar bien después de las correcciones mencionadas anteriormente.>