def _correctorSteps(self,y0,b):
     err = 10
     count = 0
     while err>self.epsCorr and count<1e2:
         F = self._PC_F(y0)
         dF = self._PC_DF(y0)
         A = np.append(dF,b,axis=0)
         B = A.dot(y0) - np.append(F,[[0]],axis=0)            
         ynew = linalg.solve(A,B)
         err = linalg.norm(F,2)
         y0 = ynew
         count = count + 1
     print "Correction err:", err
     return (y0,err)
    def _JacLinearHomotopy(self, x, t):
        # dH(x,t) = [dH/dx dH/dt]
        #         = [I-t*dF(x) x0-F(x) ]

        return np.append(self.Id - t * self.DF(x),
                         self.xinit - self.F(x),
                         axis=1)
    def runSolver(self):
        (y, i_iter) = self._solverPC(np.append(self.xinit, [[0]], axis=0))
        errCode = 0
        if (i_iter > self.maxSteps):
            errCode |= 0b001
        if ~self.isValidEquilibrium(1e-2):
            errCode |= 0b010
        self.yeq = y
        self.tfinal = y[-1]

        return (y, errCode)
 def dfun(x):
     y = np.array([x]).T
     dF = self._PC_DF(y)
     return np.append(dF,b,axis=0)
 def fun(x):
     y = np.array([x]).T
     F = self._PC_F(y)
     return np.append(F,b.dot(y-y0),axis=0)[:,0]
 def dfun(x):
     y = np.append(np.array([x]).T, [1])
     return self._PC_DF(np.array([y]).T)[:, :-1]
 def fun(x):
     y = np.append(np.array([x]).T, [1])
     return self._PC_F(np.array([y]).T)[:, 0]