Mathematica中针对符号矩阵的NullSpace命令的假设

8
执行Mathematica的NullSpace命令时,针对符号矩阵,Mathematica会对变量进行某些假设。以下是一个例子:
In[1]:= NullSpace[{{a, b}, {c, d}}]

Out[1]= {}

但是未明确说明的假设是
a d != b c.

我该如何确定NullSpace命令使用的假设?
2个回答

13

所谓的基本假设是由内部使用PossibleZeroQ来强制执行的。如果该函数不能将一个表达式视为零,则它将被视为非零,因此可以用作行约简中的主元(这通常用于符号空间)。

---编辑---

关于符号线性代数中的零测试可能会发现什么问题。默认情况下,对PossibleZeroQ的调用经过内部路由。稍后在这些基础上构建了PossibleZeroQ

在Mathematica内核代码开发中,总是存在一个问题,即哪些内容应通过主计算循环进行处理,以及哪些内容(例如为了提高速度)应短路。只有前者容易跟踪到。

可以通过指定非默认的零测试来影响符号线性代数过程。例如:

myTest[ee_]:= (Print[zerotesting[ee]]; PossibleZeroQ[ee])

然后在 NullSpace 中使用 ZeroTest->myTest


@Daniel Lichtblau,能否知道是哪些调用了PossibleZeroQ函数? - Tyson Williams
1
@Tyson Williams 可以使用Assuming[a d == b c, NullSpace[m, ZeroTest -> (PossibleZeroQ[Simplify[#]] &)]]来强制假设得到所需的零。 - Daniel Lichtblau
@Daniel Lichtblau,您能解释一下为什么您的建议(在上一个评论中)有效而我的(在我的上一个评论中)无效吗? - Tyson Williams
1
@Tyson Williams,问题在于默认的零测试代码无法在存在假设的情况下进行必要的简化,以显示其为零。它在内部使用Refine而不是Simplify。使用Simplify的非默认零测试可以确定某些表达式消失。 - Daniel Lichtblau
1
@Tyson Williams 实际上,我是当场想出来的。已经有一段时间没有看过参考指南中的那一部分。本应该这样做并在那里省些时间。至于需要修改测试,回想一下内置零测试代码的主要需求之一是快速。尽管我们在某些情况下不完全符合要求,将 Simplify 抛入 PossibleZeroQ 的内部大多只会使我们在更多情况下偏离要求。 - Daniel Lichtblau
显示剩余2条评论

5

我找到了这个:

在这种情况下,如果您将矩阵扩展一列,则该假设会出现:

NullSpace[{{a, b, 1}, {c, d, 1}}]

{{-((-b+d)/(-b c+a d)),-((a-c)/(-b c+a d)),1}}

在某些情况下可能会有用


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接