在maxima中是否有一些函数用于评估两个碱基是否跨越同一个子空间。
例如,我要求我的学生计算给定矩阵的零空间的基础。在我的解决方案中,我有一个具体的基础。但我想确保如果学生使用不同但正确的计算来确定基础,那么答案仍将被评为正确。
[created_at]
答案 0 :(得分:0)
nullspace
函数似乎没有规范向量的规定;正如文档所说,它返回“一组”基础向量。但我想你可以很容易地将它们自我标准化。例如。
f : lambda ([v], v/sqrt(v.v));
map (f, whatever_output_of_nullspace);
请注意v/sqrt(v.v)
标准化列v
,假设某些矩阵运算标志的默认值。
答案 1 :(得分:0)
我认为没有内置的方法可以做到这一点。您可以将问题减少到寻找维度和寻找子空间的总和,因为当且仅当dim U = dim V = dim(U + V)时,子空间U等于另一个子空间V。
我们可以用通常的方式表示子空间:矩阵的列构成子空间的跨越集。
这是一个函数,该函数采用矩阵a
和高度与l
相同的向量a
的列表,并返回l
是否跨越{ {1}}:
a
一些解释:
spans_nullspace(a, l) := block(
ker_a : apply(addcol, args(nullspace(a))),
V : apply(addcol,l),
ker_a_plus_V : mat_unblocker(matrix([ker_a,V])),
is(nullity(a) = rank(ker_a_plus_V) and rank(ker_a) = nullity(a))
);
是一个矩阵,其列是ker_a
发现的a
空空间的基础。nullspace(a)
是矩阵,其列是V : apply(addcol,l)
中的向量,因此它表示学生的答案。l
是通过将mat_unblocker(matrix([ker_a,V]))
放在ker_a
旁边获得的矩阵,因此它表示V
的核与学生子空间的总和。在此表示形式中检查子空间是否相等的另一种方法是,使用以下事实:两个且相同大小的矩阵只有且仅当它们的行缩减梯形形式相等时才具有相同的行空间。因为我们关心列空间,所以我们可以转置矩阵,填充矩阵,使其大小相同,然后检查RREF的相等性。但是maxima没有内置RREF函数(它具有梯形形式),因此您仍然必须编写一些代码。