def apply(self,v,A=None,h=1): nrm = np.linalg.norm(v) v = v/nrm if self.CppFlag: from expint.lib.carnoldi import arnoldi V,H = arnoldi(A,v,self.k) else: from expint.util import arnoldi V,H = arnoldi(A,v,self.k) from scipy.linalg import expm result = nrm*np.dot(V,expm(h*H[:self.k,:self.k])[:,0]) result.shape = (max(result.shape),1) return result
def apply(self,v,A=None,h=1): T = v.dtype nrm = np.linalg.norm(v) v = v/nrm n = np.max(v.shape) from expint.util import arnoldi from scipy.linalg import expm V = np.zeros((n,self.k), dtype=T) H = np.zeros((self.k+1,self.k), dtype=T) V,H = arnoldi(A,v,self.k) result = nrm*np.dot(V,expm(h*H[:self.k,:self.k])[:,0]) result.shape = (max(result.shape),1) return result