Mathematica'中的假设;符号矩阵的s NullSpace命令

Mathematica'中的假设;符号矩阵的s NullSpace命令,math,matrix,wolfram-mathematica,linear-algebra,Math,Matrix,Wolfram Mathematica,Linear Algebra,在符号矩阵上执行Mathematica的NullSpace命令时,Mathematica对变量进行了一些假设,我想知道它们是什么 比如说, In[1]:= NullSpace[{{a, b}, {c, d}}] Out[1]= {} 但未说明的假设是 a d != b c. 如何确定NullSpace命令使用的假设?可以说,基本假设是通过内部使用PossibleZeroQ强制执行的。如果该函数不能将表达式视为零,则该表达式将被视为非零,因此有资格用作行缩减中的轴心(这通常用于符号NullS

在符号矩阵上执行Mathematica的NullSpace命令时,Mathematica对变量进行了一些假设,我想知道它们是什么

比如说,

In[1]:= NullSpace[{{a, b}, {c, d}}]

Out[1]= {}
但未说明的假设是

a d != b c.

如何确定NullSpace命令使用的假设?

可以说,基本假设是通过内部使用
PossibleZeroQ
强制执行的。如果该函数不能将表达式视为零,则该表达式将被视为非零,因此有资格用作行缩减中的轴心(这通常用于符号NullSpace)

---编辑---

有人提出了一个问题,即在符号线性代数的零测试中可以看到什么。默认情况下,对
PossibleZeroQ
的调用通过内部路由进行
PossibleZeroQ
后来在这些基础上构建

Mathematica内核代码开发中始终存在一个问题,即什么应该通过主计算器循环,什么应该短路(例如,为了提高速度)。只有前者容易找到

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

myTest[ee_]:= (Print[zerotesting[ee]]; PossibleZeroQ[ee])
然后在
NullSpace
中使用
ZeroTest->myTest

---结束编辑---

找到以下内容:

在这种情况下,如果将矩阵展开一列,则假设显示:

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

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

在某些情况下可能有用

@Daniel Lichtblau可以知道什么调用了什么调用了哪里调用了PossibleZeroQ?@Daniel Lichtblau有没有更自然的方法告诉NullSpace命令哪些多项式为零?我在[4]中尝试了
:=m={{a,b},{c,d}
In[5]:=假设[ad==bc,NullSpace[m]
Out[5]={}
但它不起作用。@Tyson Williams可以做假设[ad==bc,NullSpace[m,ZeroTest->(可能是简化[#]&]强制假设获得所需的零。@Tyson Williams问题在于,默认的零测试代码无法在存在假设的情况下进行所需的简化,以显示它为零。它在内部使用“细化”,而不是“简化”。使用Simplify的非默认零测试可以确定某些表达式消失。@Tyson Williams实际上是我当场补齐的。我已经有一段时间没有看过ref指南的那个部分了。我应该这样做,在那里省下一点时间。至于需要修改的测试,回想一下,内置零测试代码的主要需求之一是速度。虽然我们在某些情况下做不到,但将Simplify加入到PossibleZeroQ的内部将主要帮助我们在更多的情况下做不到。