Python以数字方式计算Jacobian

时间:2018-08-01 11:44:07

标签: python differential-equations

您好,我有一个用于求解微分方程组的类,该类包含一个名为Rhs(右侧)的类,其中包含微分问题的所有功能:init_time,final_time,初始值,function(那个是一个包含lambda函数的numpy.array)

当我有一个微分方程组时,功能是通过这种方式管理的:

eq1 = lambda t,u : a*(u[0]-u[0]*u[1]);
eq2 = lambda t,u : -c*(u[1]-u[0]*u[1]);

func1 = np.array([eq1,eq2])

y0      = np.array([2.,1.])
system1 = rhs.Rhs(func1, 0,10,y0,500 )

使用Rhs类上方的参数完成了!它有一个返回每个函数值的方法,以及一个计算每个函数的导数的方法:

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


def Df(self,ti,ui):
      eps = 10e-12
      return (self.f(ti,ui+eps) - self.f(ti,ui-eps) )/(2*eps)

现在我有一个大问题,为了创建一个类来解决隐式方法,我必须计算函数的雅可比行列式!但是我不知道该怎么做! 我写下了这个,但没有用:

   def J(self,ti,ui):   
     self.t = ti 
     self.u = ui
     Jac = np.zeros((len(ui),len(ui)))
     n = len(ui)
     eps = 1e-12
     for i in range(n):
         for j in range(n):
             Jac[i,j] = self.Df(ti,ui) 

     return Jac

0 个答案:

没有答案