diff --git a/source/common/sagemath/library.sage b/source/common/sagemath/library.sage index 2aa4e192a..4241ada9a 100644 --- a/source/common/sagemath/library.sage +++ b/source/common/sagemath/library.sage @@ -576,6 +576,18 @@ class TBIL: string+=latex(self.vectors[-1]) return string + #Vector equation class + class LinearCombinationFromMatrix(LinearCombination): + def __init__(self,A,vars=None): + A=A.subdivision(0,0) # ignores augmented matrices + if vars is None: + self.coefficients=[var(f"x_{i}") for i in range(1,len(A.columns())+1)] + else: + self.coefficients=[vars[:len(A.columns())]] + self.vectors=[column_matrix(v) for v in A.columns()] + self.length=min(len(self.coefficients),len(self.vectors)) + self.parentheses=False + #Generic equation, which could be used with polynomial or matrix equations. Often used with a LinearCombination passed as leftside class Equation(SageObject): def __init__(self,leftside,rightside): diff --git a/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage index aee75e831..a498fd309 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV1/generator.sage @@ -9,6 +9,10 @@ class Generator(BaseGenerator): a,b,c,d = var("a b c d") ls = [a,b,c,d][:rows] + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) + #start with nice RREF number_of_pivots = 2 A = CheckIt.simple_random_matrix_of_rank(number_of_pivots,rows=rows,columns=columns) @@ -32,14 +36,16 @@ class Generator(BaseGenerator): for i in range(number_of_pivots) ], ) - matrix = A.augment(column_matrix(lin_combo), subdivide=True) + A_aug = A.augment(column_matrix(lin_combo), subdivide=True) vectors = [ { "v": column_matrix(lin_combo), "lin_combo": True, "lin_combo_exp": lin_combo_exp, - "A": matrix, - "rref": matrix.rref(), + "A": A_aug, + "rref": A_aug.rref(), + "veceq": TBIL.VectorEquation(A_aug), + statements[0]: True, } ] @@ -53,13 +59,15 @@ class Generator(BaseGenerator): choice([-1,1]) for _ in range(rows) ]) - matrix = A.augment(column_matrix(non_lin_combo), subdivide=True) + A_aug = A.augment(column_matrix(non_lin_combo), subdivide=True) vectors += [ { "v": column_matrix(non_lin_combo), "lin_combo": False, - "A": matrix, - "rref": matrix.rref(), + "A": A_aug, + "rref": A_aug.rref(), + "veceq": TBIL.VectorEquation(A_aug), + statements[1]: True, } ] @@ -72,7 +80,6 @@ class Generator(BaseGenerator): "vectors": vectors, # "combovector": column_matrix(A.column(-1)), # "statement": choice([True,False]), - # "veceq": TBIL.VectorEquation(A), # "matrix": A, # "rref": A.rref(), # "pivots": A.pivots(), diff --git a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml index b1404f907..22f08587a 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV1/template.xml @@ -16,7 +16,26 @@ that's equivalent to this claim.

-

The vector equation (...) has at least one solution.

+

Here's an example of one such statement: + + The vector equation {{veceq}} has at least one solution. + + + The following vector equation is consistent: {{veceq}}. + + + At least one solution exists for the equation {{veceq}}. + + + {{veceq}} has at least one solution vector. + + + A minimum of one solution for {{veceq}} can be found. + + + We can find at least one vector which solves the equation {{veceq}}. + +

diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage index 82ee12f65..37a8e39e5 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([2,3]),rows=4,columns=3) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "spans": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] spans = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] spans = not spans @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml index d33b3bef5..9623cae29 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV2/template.xml @@ -16,8 +16,25 @@

-

- The vector equation (...)=\vec w has at least one solution for every \vec w\in\mathbb R^4. +

Here's an example of one such statement: + + The vector equation {{veceqleft}}=\vec w has at least one solution for any \vec w\in\mathbb R^4. + + + For any \vec w\in\mathbb R^4, the following vector equation is consistent: {{veceqleft}}=\vec w. + + + At least one solution exists for the equation {{veceqleft}}=\vec w for every vector \vec w in \mathbb R^4. + + + {{veceqleft}}=\vec w has at least one solution vector regardless of how \vec w is chosen from \mathbb R^4. + + + Given any \vec w from \mathbb R^4, a minimum of one solution for {{veceqleft}}=\vec w can be found. + + + We can find at least one vector which solves the equation {{veceqleft}}=\vec w no matter what \vec w\in\mathbb R^4 is. +

diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage index 138e6631b..d86772742 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([3,4]),rows=4,columns=5) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "independent": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] independent = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] independent = not independent @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml index f9c75ae35..eae27700e 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV4/template.xml @@ -16,8 +16,25 @@

-

- The vector equation (...)=\vec 0 has exactly one solution. +

Here's an example of one such statement: + + The vector equation {{veceqleft}}=\vec 0 has exactly one solution. + + + The following vector equation is consistent with a unique solution: {{veceqleft}}=\vec 0. + + + Exactly one solution exists for the equation {{veceqleft}}=\vec 0. + + + {{veceqleft}}=\vec 0 can only be solved by the solution vector \vec 0. + + + The unique solution for {{veceqleft}}=\vec 0 is the zero vector. + + + There is no vector besides \vec 0 which solves the equation {{veceqleft}}=\vec 0. +

diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage b/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage index f9302b8bc..5d2c6b210 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/generator.sage @@ -4,12 +4,18 @@ TBIL.config_matrix_typesetting() class Generator(BaseGenerator): def data(self): A=CheckIt.simple_random_matrix_of_rank(choice([2,3]),rows=4,columns=choice([3,5])) + + # roll different statements + statements = [f"statement{l}" for l in "ABCDEF"] + shuffle(statements) tasks = [{ "basis": False, "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[0]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] basis = choice([True,False]) @@ -24,6 +30,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[1]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] basis = not basis @@ -38,6 +46,8 @@ class Generator(BaseGenerator): "vecset": TBIL.VectorSet(A.columns()), "matrix": A, "rref": A.rref(), + statements[2]: True, + "veceqleft": TBIL.LinearCombinationFromMatrix(A), }] shuffle(tasks) diff --git a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml index 151335ce0..ee38aa9d3 100644 --- a/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml +++ b/source/linear-algebra/exercises/outcomes/EV/EV5/template.xml @@ -16,8 +16,25 @@

-

- The vector equation (...)=\vec w has exactly one solution for every \vec w\in\mathbb R^4. +

Here's an example of one such statement: + + The vector equation {{veceqleft}}=\vec w has a unique solution for any \vec w\in\mathbb R^4. + + + For any \vec w\in\mathbb R^4, the following vector equation has exactly one solution: {{veceqleft}}=\vec w. + + + One and only one solution exists for the equation {{veceqleft}}=\vec w for every vector \vec w in \mathbb R^4. + + + {{veceqleft}}=\vec w has a unique solution regardless of how \vec w is chosen from \mathbb R^4. + + + Given any \vec w from \mathbb R^4, exactly one solution for {{veceqleft}}=\vec w can be found. + + + We can find a unique vector which solves the equation {{veceqleft}}=\vec w no matter what \vec w\in\mathbb R^4 is. +