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=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):
def RungeKutta(self,fcn,x0,y0,xend,h):
def solve(self,which, fcn, x0, y0, xend, h):
if which==0:
self.Euler(fcn,x0,y0,xend,h)
elif which==1:
self.Heun(fcn,x0,y0,xend,h)
else:
self.RungeKutta(fcn,x0,y0,xend,h)
我正在嘗試選擇函式并以list([]). 但e=r.solve(0,diff,0,1200,6000,30)回傳NONE。我怎樣才能從這段代碼中得到正確的回報?
*我簡化了其他函式,例如 Heun、RungeKutta,因為我注意到問題出在r.solve()因為簡單地呼叫像這樣的函式r.Euler效果很好。
uj5u.com熱心網友回復:
您可以使用getattr.
像這樣:
def solve(self, which, fcn, x0, y0, xend, h):
fn = getattr(self, which)
return fn(fcn, x0, y0, xend, h)
...然后將所需的方法名稱作為引數傳遞:
solver = ODEsolver()
return solver.solve('Euler', 42, 42, 42, 42, 100500)
uj5u.com熱心網友回復:
你不回來了。您剛剛呼叫了 Euler、Heun 和 RungeKutta 函式。您必須回傳答案,嘗試將答案存盤在變數中并在函式末尾回傳,如下所示:
def solve(self,which, fcn, x0, y0, xend, h):
if which==0:
answer = self.Euler(fcn,x0,y0,xend,h)
elif which==1:
answer = self.Heun(fcn,x0,y0,xend,h)
else:
answer = self.RungeKutta(fcn,x0,y0,xend,h)
return answer
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/363433.html
