用于Matrix表达式的符号软件包?


36

我们知道是对称且正定的。我们知道是正交的:AB

问题:对称且正定的吗?答:可以。BAB

问题:电脑可以告诉我们吗?答:可能吧。

是否存在处理和传播有关矩阵的已知事实的符号代数系统(例如Mathematica)?

编辑:明确地说,我问这个问题关于抽象定义的矩阵。即我没有和显式条目,我只知道它们都是矩阵,并且具有特殊的属性,例如对称,正定等。AB


5
我所缺少的是象征性地处理矩阵的软件(即,不作为数组)。我希望能够谈论一些对称矩阵而不必担心其条目。C
JM

6
有一些项目正在为此工作。我碰巧熟悉SymPy中的实现。这是越野车,但慢慢地被堆积起来。
MRocklin

4
这听起来像自动定理证明。然后,诀窍是在引擎中包含足够多的公理,以便可以通过自动推理(想想PROLOG)有效地推导公理。如果我要设计这样的东西,那么上面引用的属性绝对是我将其编码为事实/已知关系而不是尝试的属性。另一方面,亚琛工业大学有Paolo Bientinesi教授。在他的论文中,他讨论了线性代数算法的自动推导。他以象征性的方式使用Mathematica。aices.rwth-aachen.de:8080/~pauldj
Lagerbaer 2011年

1
我知道Paolo的东西和FLAME库。我认为它无法做到这一点。
Matt Knepley 2011年

2
我同意矩阵的计算机代数系统会很棒,但是似乎不见了。我已悬赏以增加获得答案的机会。
纪念2012年

Answers:


27

编辑:这现在在SymPy中

$ isympy
In [1]: A = MatrixSymbol('A', n, n)
In [2]: B = MatrixSymbol('B', n, n)
In [3]: context = Q.symmetric(A) & Q.positive_definite(A) & Q.orthogonal(B)
In [4]: ask(Q.symmetric(B*A*B.T) & Q.positive_definite(B*A*B.T), context)
Out[4]: True

显示其他工作的较早答案

因此,在研究了一段时间之后,这就是我所发现的。

我对特定问题的当前答案是“不,目前没有系统可以回答此问题。” 但是,有些事情似乎即将结束。

首先,马特·克奈普利(Matt Knepley)和拉格巴(Lagerbaer)都指出了迭戈·法布雷加特(Diego Fabregat)和保罗·本蒂内西(Paolo Bientinesi)的工作。这项工作表明了该问题的潜在重要性和可行性。这是一本好书。不幸的是,我不确定他的系统是如何工作的,或者它的功能是什么(如果有人知道关于该主题的其他公开材料,请告诉我)。

其次,有一个为Mathematica编写的张量代数库,称为xAct,它可以对称地处理对称性。它在某些方面做得很好,但不适用于线性代数的特殊情况。

第三,将这些规则正式记录在Coq(一个自动定理证明助手)的几个库中(Google搜索coq线性/矩阵代数以找到一些)。这是一个功能强大的系统,不幸的是,这似乎需要人工干预。

与一些定理证明者交谈之后他们建议针对这种事情研究逻辑编程(即Prolog,Lagerbaer也提出了建议)。据我所知,这还没有完成-我将来可能会玩。

更新:我已经使用Maude系统实现了这一点。我的代码托管在github上


1
当我发现没有好的系统时,我的第一个直觉是编写一个序言程序。:)
纪念2012年

1
我在底部添加了一个链接来处理这个问题。
MRocklin


3

我想大多数CAS系统可以显示本作2x23x3矩阵给出一个象征性的正交结构,比如旋转矩阵。最后,您将必须分解结果以弄清楚它是否为正定。对称性更容易显示。B

问题就变成了,N尺寸矩阵又如何呢?也许您可以提出一个归纳方案,N-1 x N-1假设for 为真,然后构造一个具有整体大小的新块矩阵,N x N以证明它是正定的和对称的。

因此,最后一个问题是,哪种软件最适合该任务(如果有),我的经验是使用MATLAB/MuPadDerive(仍在使用它),而且它们都不能很好地处理矢量和矩阵。MATLAB将所有内容分解为组件,Derive可以声明,Non-scalars但不对它们应用任何简化规则。

我希望这篇文章能为这种“漏洞”及其填充方法提供更多的见识。对我来说,我想要一些软件来帮助我简化向量的多个点和叉积,以及旋转矩阵使用众所周知的身份,例如:a×(b×c)=(ab)c(ac)b


2

自从我上次使用这两个软件包以来已经有一段时间了,但是我认为您可以通过使用断言以Mathematica之类的语言来实现。诸如Assert [A,Symmetric]之类的内容告诉Mathematica A是对称矩阵,依此类推。我目前无法使用任何一个,因此必须对此进行检查。


1
我认为您的意思是Mathematica命令Assuming而不是AssertAssuming在简化或集成表达式时将应用这些假设,但是文档尚不清楚矩阵属性是否被传播。我的猜测是,此类属性不会通过符号计算来实现。
Geoff Oxberry 2012年

那可能是真的。就像我说的那样,那是千古以前(早在我读研究生时)。但是我确实记得能够做一次这样的事情。(也许是在MuPad中使用的,这是在Scientific WorkPlace中实现的。)但我再也无法访问SWP进行检查(仅Windows,并且我的包装箱中没有仿真器)。
aeismail 2012年

MuPAD现在是Matlab的一部分。根据文档,假设的用法与Mathematica相似。
Geoff Oxberry 2012年

MuPAD只能处理固定大小的矩阵,而不能采用正定性之类的任意假设。同样,它也不能回答BAB'最初提出的正定性问题。
2012年

@Memming:足够公平。正如我所说,我对MuPAD的记忆已过时,因为我上次在2006年左右定期使用该程序(当时我从PC切换到Mac)。
aeismail 2012年

2

枫15无法做到这一点。对于矩阵,它没有属性“正交”(尽管它具有Symmetric和PositiveDefinite)。


1
更新为Maple 16->无“正交”属性。
GertVdE 2012年

1

在Mathematica中,您至少可以检查特定矩阵的这些属性。例如,A您描述的矩阵:

In[1]:= A = {{2.0,-1.0,0.0},{-1.0,2.0,-1.0},{0.0,-1.0,2.0}};
        {SymmetricMatrixQ[A],PositiveDefiniteMatrixQ[A]}
Out[2]= {True,True}

对于矩阵B

In[3]:= B = {{0, -0.80, -0.60}, {0.80, -0.36, 0.48}, {0.60, 0.48, -0.64}};
        Transpose[B] == Inverse[B]
Out[4]= True

然后:

In[5]:= c = B.A.Transpose[B];
        {SymmetricMatrixQ[c],PositiveDefiniteMatrixQ[c]}
Out[6]= {True,True}

Mathematica矩阵和线性代数文档


7
据我了解,以上谓词是针对给定矩阵验证该属性,而不是像Matt所要求的那样象征性地传播这些属性。
Matt Knepley 2011年

是的。对于那个很抱歉。我误解了。
lynchs 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.