python numpy`函数数组(lambda函数)

我定义了一个python类,以计算差分方程系统的解。为此,我定义了一个名为Rhs(右侧和右侧)的类,该类应表示dy / dt(i-th)的右侧和右侧,该类包含单个浮点值(初始时间,初始值,最终时间)和一个函数(函数数组)以定义此数组,我仅定义了3个lambda函数,该函数表示等式(i)并创建此函数的np.array


func1 = lambda t,u : 10   * (u[1] - u[0])

func2 = lambda t,u : 28   * u[0] - u[1] - u[0] * u[2]  

func3 = lambda t,u : -8/3 * u[2] + u[0]*u[1]

然后以这种方式传递给rhs类:


func = np.array([func1,func2,func3])

y0 = np.array([1.,0.,0.])

problem3 = rhs.Rhs(func,0.0,100.0,y0,1000) 

Rhs类是这样的:


    class Rhs:

    def __init__(self, fnum : np.ndarray , t0: np.float, tf: np.float, y0 : np.array, n: int , fanal = None ):

          self.func = fnum

          Rhs.solution  = fanal

          self.t0   = t0

          self.tf   = tf

          self.n    = n

          self.u0   = y0

   def createArray(self):

      '''   

         Create the Array time and f(time) 

         - the time array can be create now 

         - the solution array can be just initialize with the IV

      ''' 

      self.t = np.linspace(self.t0, self.tf, self.n )

      self.u = np.array([self.u0  for i in range(self.n) ])



      return self.t,self.u   


   def f(self,ti,ui):

      return self.func(ti,ui)     


   def Df(self,ti,ui):

      eps = 10e-6

      return ((self.func(ti,ui)+eps) - self.f(ti,ui))/eps

这里的问题是当euler类调用该函数时 f


class Explicit:

     def __init__(self, dydt: rhs.Rhs, save : bool=True, _print: bool=False,  filename : str=None):

          self.dydt   = dydt

          self.dt     = (dydt.tf-dydt.t0)/dydt.n

          self._print = _print 


   def solve(self):

      self.time, self.u = self.dydt.createArray() 

      for i in range(len(self.time)-1): 

         self.u[i+1] = self.u[i] + self.dt*self.dydt.f(self.time[i],self.u[i])




这里的问题是:这是将shape = 1000,3的向量u传递给函数的正确方法(以便使用在lambda函数系统中应用于3向量索引的3函数..)不明白的是为什么在C ++中我没有遇到这个问题,请看这里:我不知道的所有类层次结构都以哪种方式计算出这个东西



HUX布斯
浏览 455回答 2
2回答

largeQ

这应该工作def f(self,ti,ui):    return  np.array([function(ti,ui) for function in self.func])

宝慕林4294392

self.u = np.array([self.u0  for i in range(self.n) ])还应该给您带来问题,因为这会产生带有u0行的矩阵或2d数组,而不是预期的副本。你可能想要  self.u = np.array([self.u0[i]  for i in range(self.n) ])或更容易  self.u = self.u0.copy()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python