def solve(self, A, F, N, b): """ Solve linear system ``Ax = b`` using numeric factorization ``N`` and symbolic factorization ``F``. Store the solution in ``b``. Parameters ---------- A Sparse matrix F Symbolic factorization N Numeric factorization b RHS of the equation Returns ------- None """ if self.sparselib == 'umfpack': umfpack.solve(A, N, b) return b elif self.sparselib == 'klu': klu.solve(A, F, N, b) return b elif self.sparselib in ('spsolve', 'cupy'): raise NotImplementedError
def calcInc(): global F system.Line.gcall() system.PQ.gcall() system.Shunt.gcall() system.PV.gcall() system.SW.gcall() system.Line.Gycall() system.PQ.Gycall() system.Shunt.Gycall() system.PV.Gycall() system.SW.Gycall() A = sparse(system.DAE.Gy) inc = matrix(system.DAE.g) if system.DAE.factorize: F = symbolic(A) #重新排列A矩阵以减少填充并执行LU分解,返回为可以传递的不透明 C object到umfpack.numeric()。 system.DAE.factorize = False try: N = numeric(A, F) solve(A, N, inc) except: print('unexpect') F = symbolic(A) solve(A, numeric(A, F), inc) return inc
def solve(rhs): x = cvxopt.matrix(rhs) ## If cvxopt_solver is cvxopt.umfpack cvxopt_solver.solve(system, full_factorization, x) ## If cvxopt_solver is cvxopt.cholmod ## UPDATE: Neither of these work. # cvxopt_solver.solve( full_factorization, x, sys = 1 ) # cvxopt_solver.spsolve( system, x, sys = 0 ) return numpy.asarray(x).reshape(rhs.shape)
def solve( rhs ): x = cvxopt.matrix( rhs ) ## If cvxopt_solver is cvxopt.umfpack cvxopt_solver.solve( system, full_factorization, x ) ## If cvxopt_solver is cvxopt.cholmod ## UPDATE: Neither of these work. # cvxopt_solver.solve( full_factorization, x, sys = 1 ) # cvxopt_solver.spsolve( system, x, sys = 0 ) return numpy.asarray( x ).reshape( rhs.shape )
def solveNumeric(A,b, Fs): ''' given a static Fs, or symbolic factorization of the matrix A, performs the numeric part ''' aLocal = A.tocoo() s = A.shape AC = cvxopt.spmatrix(aLocal.data.tolist(),aLocal.row.tolist(), aLocal.col.tolist(),s) # Fs = umfpack.symbolic(AC) FA = umfpack.numeric(AC,Fs) bLocal = cvxopt.matrix(copy.deepcopy(b)) umfpack.solve(AC,FA,bLocal) bLocal = np.array(bLocal).flatten() return bLocal
def calcInc(): global F system.Line.gcall() system.PQ.gcall() system.Shunt.gcall() system.PV.gcall() system.SW.gcall() system.Ind3.gcall() system.Line.Gycall() system.Shunt.Gycall() system.PV.Gycall() system.SW.Gycall() system.Ind3.Gycall() system.Ind3.fcall() system.DAE.Fx = matrix(0.0, (system.DAE.nx, system.DAE.nx)) system.DAE.Fy = matrix(0.0, (system.DAE.nx, system.DAE.ny)) system.DAE.Gx = matrix(0.0, (system.DAE.ny, system.DAE.nx)) system.Ind3.Fxcall() system.PV.Fxcall() system.SW.Fxcall() system.DAE.Gy = sparse(system.DAE.Gy) system.DAE.Fx = sparse(system.DAE.Fx) system.DAE.Fy = sparse(system.DAE.Fy) system.DAE.Gx = sparse(system.DAE.Gx) A = sparse([[system.DAE.Fx, system.DAE.Gx], [system.DAE.Fy, system.DAE.Gy]]) inc = matrix([system.DAE.f, system.DAE.g]) if system.DAE.factorize: F = symbolic( A ) # 重新排列A矩阵以减少填充并执行LU分解,返回为可以传递的不透明 C object到umfpack.numeric()。 system.DAE.factorize = False try: N = numeric(A, F) solve(A, N, inc) except: print('unexpect') F = symbolic(A) solve(A, numeric(A, F), inc) return inc
def calcInc(): global F print('y') print(system.DAE.y) system.Line.gcall() system.Statcom.gcall() system.Sssc.gcall() system.PQ.gcall() system.Shunt.gcall() system.PV.gcall() system.SW.gcall() print('g') print(system.DAE.g) system.Line.Gycall() system.Statcom.Gycall() system.Sssc.Gycall() system.Shunt.Gycall() system.PV.Gycall() system.SW.Gycall() # system.Statcom.Gycall() print('Gy') print(system.DAE.Gy) # for i in range(30): # print(system.DAE.Gy[13, i]) # for i in range(30): # print(system.DAE.Gy[27, i]) # for i in range(30): # print(system.DAE.Gy[28, i]) # for i in range(30): # print(system.DAE.Gy[29, i]) A = sparse(system.DAE.Gy) inc = matrix(system.DAE.g) if system.DAE.factorize: F = symbolic( A) #重新排列A矩阵以减少填充并执行LU分解,返回为可以传递的不透明 C object到umfpack.numeric()。 system.DAE.factorize = False try: N = numeric(A, F) solve(A, N, inc) except: print('unexpect') F = symbolic(A) solve(A, numeric(A, F), inc) return inc
def Q( b ): bLocal = cvxopt.matrix(copy.deepcopy(b)) umfpack.solve(AC,FA,bLocal) bLocal = np.array(bLocal).flatten() return bLocal
A = spmatrix(V, I, J) B = matrix(1.0, (5, 1)) umfpack.linsolve(A, B) print(B) VA = [2, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 1] VB = [4, 3, 3, -1, 4, 4, -3, 1, 2, 2, 6, 2] I = [0, 1, 0, 2, 4, 1, 2, 3, 4, 2, 1, 4] J = [0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 4, 4] A = spmatrix(VA, I, J) B = spmatrix(VB, I, J) x = matrix(1.0, (5, 1)) Fs = umfpack.symbolic(A) FA = umfpack.numeric(A, Fs) FB = umfpack.numeric(B, Fs) umfpack.solve(A, FA, x) umfpack.solve(B, FB, x) umfpack.solve(A, FA, x, trans='T') print(x) A = spmatrix([10, 3, 5, -2, 5, 2], [0, 2, 1, 3, 2, 3], [0, 0, 1, 1, 2, 3]) X = matrix(range(8), (4, 2), 'd') cholmod.linsolve(A, X) print(X) X = cholmod.splinsolve(A, spmatrix(1.0, range(4), range(4))) print(X) X = matrix(range(8), (4, 2), 'd') F = cholmod.symbolic(A) cholmod.numeric(A, F)