def findbasis(V): while not hw4.is_independent(V): for i in range(len(V)): if hw4.is_superfluous(V,i): V.remove(V[i]) break return V
def findbasis(V): while not hw4.is_independent(V): for i in range(len(V)): if hw4.is_superfluous(V, i): V.remove(V[i]) break return V
def morph(S, B): ''' Input: - S: a list of distinct Vec instances - B: a list of linearly independent Vec instances - Span S == Span B Output: a list of pairs of vectors to inject and eject Example: >>> #This is how our morph works. Yours may yield different results. >>> S = [list2vec(v) for v in [[1,0,0],[0,1,0],[0,0,1]]] >>> B = [list2vec(v) for v in [[1,1,0],[0,1,1],[1,0,1]]] >>> morph(S, B) [(Vec({0, 1, 2},{0: 1, 1: 1, 2: 0}), Vec({0, 1, 2},{0: 1, 1: 0, 2: 0})), (Vec({0, 1, 2},{0: 0, 1: 1, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 1, 2: 0})), (Vec({0, 1, 2},{0: 1, 1: 0, 2: 1}), Vec({0, 1, 2},{0: 0, 1: 0, 2: 1}))] ''' A = [] Sprime = S[:] ret = [] while len(A) < len(B): for vec in B: A.append(vec) if is_independent(A): A.pop() ejected = exchange(Sprime, A, vec) Sprime[Sprime.index(ejected)] = vec ret.append((vec, ejected)) A.append(vec) else: A.pop() return ret
def is_invertible(M): ''' input: A matrix, M outpit: A boolean indicating if M is invertible. >>> M = Mat(({0, 1, 2, 3}, {0, 1, 2, 3}), {(0, 1): 0, (1, 2): 1, (3, 2): 0, (0, 0): 1, (3, 3): 4, (3, 0): 0, (3, 1): 0, (1, 1): 2, (2, 1): 0, (0, 2): 1, (2, 0): 0, (1, 3): 0, (2, 3): 1, (2, 2): 3, (1, 0): 0, (0, 3): 0}) >>> is_invertible(M) True ''' return len(M.D[0]) == len(M.D[1]) and is_independent([v for k,v in mat2coldict(M).items() ])
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' while not is_independent(T): T.pop() return T
def subset_basis(T): """ input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True """ S = list(T) for i in range(len(T)): if is_independent(S): return S S.remove(S[i])
def is_invertible(M): ''' input: A matrix, M outpit: A boolean indicating if M is invertible. >>> M = Mat(({0, 1, 2, 3}, {0, 1, 2, 3}), {(0, 1): 0, (1, 2): 1, (3, 2): 0, (0, 0): 1, (3, 3): 4, (3, 0): 0, (3, 1): 0, (1, 1): 2, (2, 1): 0, (0, 2): 1, (2, 0): 0, (1, 3): 0, (2, 3): 1, (2, 2): 3, (1, 0): 0, (0, 3): 0}) >>> is_invertible(M) True ''' from hw4 import is_independent from matutil import mat2rowdict, mat2coldict rowsdict = mat2rowdict(M) rowslist = [ rowsdict[i] for i in rowsdict.keys() ] coldict = mat2coldict(M) collist = [ coldict[i] for i in coldict.keys() ] if len(rowslist) == len(collist) and is_independent(collist): return True else: return False
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' from hw4 import is_independent,is_superfluous T_temp = list(T) if not is_independent(T): for i in range(len(T)-1,-1,-1): if is_superfluous(T_temp,i): T_temp.remove(T[i]) return T_temp
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' from hw4 import is_independent basis = list() for vec in T: if True == is_independent(basis+[vec]): basis.append(vec) return basis
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' C=[] for i,v in enumerate(T): C.append(v) if not is_independent(C): C.pop() return C
def is_invertible(M): ''' input: A matrix, M outpit: A boolean indicating if M is invertible. >>> M = Mat(({0, 1, 2, 3}, {0, 1, 2, 3}), {(0, 1): 0, (1, 2): 1, (3, 2): 0, (0, 0): 1, (3, 3): 4, (3, 0): 0, (3, 1): 0, (1, 1): 2, (2, 1): 0, (0, 2): 1, (2, 0): 0, (1, 3): 0, (2, 3): 1, (2, 2): 3, (1, 0): 0, (0, 3): 0}) >>> is_invertible(M) True ''' from hw4 import is_independent from matutil import mat2rowdict, mat2coldict rowsdict = mat2rowdict(M) rowslist = [rowsdict[i] for i in rowsdict.keys()] coldict = mat2coldict(M) collist = [coldict[i] for i in coldict.keys()] if len(rowslist) == len(collist) and is_independent(collist): return True else: return False
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' from hw4 import is_independent, is_superfluous T_temp = list(T) if not is_independent(T): for i in range(len(T) - 1, -1, -1): if is_superfluous(T_temp, i): T_temp.remove(T[i]) return T_temp
def subset_basis(T): ''' input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True ''' rank_T = rank(T) S = [] for x in T: if(is_independent([S+[x]])): S.append(x) if rank(S) == rank_T:break return S
def subset_basis(T): """ input: A list, T, of Vecs output: A list, S, containing Vecs from T, that is a basis for the space spanned by T. >>> a0 = Vec({'a','b','c','d'}, {'a':1}) >>> a1 = Vec({'a','b','c','d'}, {'b':1}) >>> a2 = Vec({'a','b','c','d'}, {'c':1}) >>> a3 = Vec({'a','b','c','d'}, {'a':1,'c':3}) >>> subset_basis([a0,a1,a2,a3]) == [Vec({'c', 'b', 'a', 'd'},{'a': 1}), Vec({'c', 'b', 'a', 'd'},{'b': 1}), Vec({'c', 'b', 'a', 'd'},{'c': 1})] True """ from hw4 import is_independent basis = list() for vec in T: if True == is_independent(basis + [vec]): basis.append(vec) return basis