Exemple #1
0
def fourseven(iter_stack):
    # load matrices
    Ai = iter_stack.A
    Bi = iter_stack.B
    P1i_roc = iter_stack.P1_roc
    P1i_rpinv = iter_stack.P1_rpinv
    
    K2 = roc_hint("B", iter_stack.i, Bi) if mode=="manual" else al.right_ortho_complement(Bi)

    K1 = al.regular_completion(K2)

    K = st.concat_cols(K1, K2)

    assert al.is_regular_matrix(K), "K is not a regular matrix."

    Bi_tilde = al.custom_simplify(Bi*K1) # unit matrix

    if myStack.calc_G:
        Bi_tilde_lpinv = al.left_pseudo_inverse(Bi_tilde)
    else:
        Bi_tilde_lpinv = None

    P1i_tilde_roc = al.custom_simplify( P1i_roc*K1 )

    Zi = al.custom_simplify( P1i_roc*K2 )

    Zi_lpinv = al.Zi_left_pinv_with_restrictions(P1i_rpinv, P1i_tilde_roc, Zi)

    assert al.is_unit_matrix( Zi_lpinv*Zi ), "Zi_lpinv seems to be wrong."

    # store
    iter_stack.store_special_case_matrices( Zi, Zi_lpinv, Bi_tilde, Bi_tilde_lpinv, P1i_tilde_roc )

    return Bi_tilde
Exemple #2
0
def reduction(iter_stack):
    P1i = iter_stack.P1
    P0i = iter_stack.P0

    P1i_roc = roc_hint(
        "P1", iter_stack.i,
        P1i) if mode == "manual" else al.right_ortho_complement(P1i)
    P1i_rpinv = rpinv_hint(
        "P1", iter_stack.i,
        P1i) if mode == "manual" else al.right_pseudo_inverse(P1i)

    P1i_dot = st.time_deriv(P1i, myStack.diffvec_x)

    Ai = al.custom_simplify((P0i - P1i_dot) * P1i_rpinv)
    Bi = al.custom_simplify((P0i - P1i_dot) * P1i_roc)

    if myStack.calc_G:
        Bi_lpinv = al.left_pseudo_inverse(Bi)
    else:
        Bi_lpinv = None

    # store
    iter_stack.store_reduction_matrices(Ai, Bi, Bi_lpinv, P1i_roc, P1i_rpinv,
                                        P1i_dot)

    return Bi
    def mul_rs_and_simplify_nc(self, A, B):
        """ multiplies nc matrices A and B, right shifts s, converts
            the result to commutative and simplifies it
        """
        AB_nc = A * B
        AB_nc_shifted = self.right_shift_all_in_matrix(AB_nc)
        AB_shifted_c = self.make_symbols_commutative(AB_nc_shifted)
        extr_result = list(AB_shifted_c)[0]
        result = al.custom_simplify(extr_result)

        return result
    def mul_rs_and_simplify_nc(self, A, B):
        """ multiplies nc matrices A and B, right shifts s, converts
            the result to commutative and simplifies it
        """
        AB_nc = A*B
        AB_nc_shifted = self.right_shift_all_in_matrix(AB_nc)
        AB_shifted_c = self.make_symbols_commutative(AB_nc_shifted)
        extr_result = list(AB_shifted_c)[0]
        result = al.custom_simplify(extr_result)

        return result
Exemple #5
0
def reduction(iter_stack):
    P1i = iter_stack.P1
    P0i = iter_stack.P0
    
    P1i_roc = roc_hint("P1", iter_stack.i, P1i) if mode=="manual" else al.right_ortho_complement(P1i)
    P1i_rpinv = rpinv_hint("P1", iter_stack.i, P1i) if mode=="manual" else al.right_pseudo_inverse(P1i)

    P1i_dot = st.time_deriv(P1i, myStack.diffvec_x)

    Ai = al.custom_simplify( (P0i - P1i_dot)*P1i_rpinv )
    Bi = al.custom_simplify( (P0i - P1i_dot)*P1i_roc )

    if myStack.calc_G:
        Bi_lpinv = al.left_pseudo_inverse(Bi)
    else:
        Bi_lpinv = None

    # store
    iter_stack.store_reduction_matrices( Ai, Bi, Bi_lpinv, P1i_roc, P1i_rpinv, P1i_dot )

    return Bi
Exemple #6
0
def fourseven(iter_stack):
    # load matrices
    Ai = iter_stack.A
    Bi = iter_stack.B
    P1i_roc = iter_stack.P1_roc
    P1i_rpinv = iter_stack.P1_rpinv

    K2 = roc_hint("B", iter_stack.i,
                  Bi) if mode == "manual" else al.right_ortho_complement(Bi)

    K1 = al.regular_completion(K2)

    K = st.concat_cols(K1, K2)

    assert al.is_regular_matrix(K), "K is not a regular matrix."

    Bi_tilde = al.custom_simplify(Bi * K1)  # unit matrix

    if myStack.calc_G:
        Bi_tilde_lpinv = al.left_pseudo_inverse(Bi_tilde)
    else:
        Bi_tilde_lpinv = None

    P1i_tilde_roc = al.custom_simplify(P1i_roc * K1)

    Zi = al.custom_simplify(P1i_roc * K2)

    Zi_lpinv = al.Zi_left_pinv_with_restrictions(P1i_rpinv, P1i_tilde_roc, Zi)

    assert al.is_unit_matrix(Zi_lpinv * Zi), "Zi_lpinv seems to be wrong."

    # store
    iter_stack.store_special_case_matrices(Zi, Zi_lpinv, Bi_tilde,
                                           Bi_tilde_lpinv, P1i_tilde_roc)

    return Bi_tilde