Esempio n. 1
0
    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
Esempio n. 2
0
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 )
Esempio n. 5
0
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
Esempio n. 6
0
    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
Esempio n. 7
0
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
Esempio n. 8
0
 def Q( b ):
     bLocal = cvxopt.matrix(copy.deepcopy(b))
     umfpack.solve(AC,FA,bLocal)
     bLocal = np.array(bLocal).flatten()
     return bLocal
Esempio n. 9
0
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)