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
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
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 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