es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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 como r.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 como r.euler funcionó bien.>
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay un par de errores en el código proporcionado que causan que r.solve(0,diff,0,1200,6000,30) devuelva None.

    En primer lugar, en el método solve(), las llamadas a la función Euler(), Heun() y RungeKutta() no tienen una declaración de return. Por lo tanto, incluso si se llama correctamente al método según el valor de which, el valor devuelto no se está pasando de vuelta al método solve().

    Para solucionar esto, debemos agregar declaraciones de return a los tres métodos de la siguiente manera:

    def Euler(self, fcn, x0, y0, xend, h):
        estimate=[y0]
        z=y0
        b=0
        t=x0   
        while(t<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
    

    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 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


    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 anteriormente.>

Comments are closed.