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]