为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

HUX布斯 2021-04-15 14:15:24
我定义了一个python类,以计算差分方程系统的解。为此,我定义了一个名为Rhs(右侧和右侧)的类,该类应表示dy / dt(i-th)的右侧和右侧,该类包含单个浮点值(初始时间,初始值,最终时间)和一个函数(函数数组)以定义此数组,我仅定义了3个lambda函数,该函数表示等式(i)并创建此函数的np.arrayfunc1 = 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类调用该函数时 fclass 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 ++中我没有遇到这个问题,请看这里:我不知道的所有类层次结构都以哪种方式计算出这个东西
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

这应该工作


def f(self,ti,ui):

    return  np.array([function(ti,ui) for function in self.func])


查看完整回答
反对 回复 2021-04-27
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-04-27
  • 2 回答
  • 0 关注
  • 454 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信