我们知道是对称且正定的。我们知道是正交的:乙
问题:对称且正定的吗?答:可以。
问题:电脑可以告诉我们吗?答:可能吧。
是否存在处理和传播有关矩阵的已知事实的符号代数系统(例如Mathematica)?
编辑:明确地说,我问这个问题关于抽象定义的矩阵。即我没有和显式条目,我只知道它们都是矩阵,并且具有特殊的属性,例如对称,正定等。乙
我们知道是对称且正定的。我们知道是正交的:乙
问题:对称且正定的吗?答:可以。
问题:电脑可以告诉我们吗?答:可能吧。
是否存在处理和传播有关矩阵的已知事实的符号代数系统(例如Mathematica)?
编辑:明确地说,我问这个问题关于抽象定义的矩阵。即我没有和显式条目,我只知道它们都是矩阵,并且具有特殊的属性,例如对称,正定等。乙
Answers:
$ 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也提出了建议)。据我所知,这还没有完成-我将来可能会玩。
一些符号矩阵计算(例如,块矩阵完成)可以使用NCAlgebra程序包http://www.math.ucsd.edu/~ncalg/(在mathematica下运行)完成。
Bergman http://servus.math.su.se/bergman/是Lisp中具有类似功能的软件包。
一些相关的论文:http:
//math.ucsd.edu/~helton/osiris/COMPALG2000/ohRevisIJC.pdf
http://math.ucsd.edu/~thesis/thesis/dkronewitter/dkronewitter.pdf
http:// www。 tandfonline.com/doi/abs/10.1080/00207170600882346
我想大多数CAS
系统可以显示本作2x2
和3x3
矩阵给出一个象征性的正交结构,比如旋转矩阵。最后,您将必须分解结果以弄清楚它是否为正定。对称性更容易显示。
问题就变成了,N
尺寸矩阵又如何呢?也许您可以提出一个归纳方案,N-1 x N-1
假设for 为真,然后构造一个具有整体大小的新块矩阵,N x N
以证明它是正定的和对称的。
因此,最后一个问题是,哪种软件最适合该任务(如果有),我的经验是使用MATLAB/MuPad
和Derive
(仍在使用它),而且它们都不能很好地处理矢量和矩阵。MATLAB
将所有内容分解为组件,Derive
可以声明,Non-scalars
但不对它们应用任何简化规则。
我希望这篇文章能为这种“漏洞”及其填充方法提供更多的见识。对我来说,我想要一些软件来帮助我简化向量的多个点和叉积,以及旋转矩阵使用众所周知的身份,例如:
自从我上次使用这两个软件包以来已经有一段时间了,但是我认为您可以通过使用断言以Mathematica之类的语言来实现。诸如Assert [A,Symmetric]之类的内容告诉Mathematica A是对称矩阵,依此类推。我目前无法使用任何一个,因此必须对此进行检查。
Assuming
而不是Assert
。Assuming
在简化或集成表达式时将应用这些假设,但是文档尚不清楚矩阵属性是否被传播。我的猜测是,此类属性不会通过符号计算来实现。
在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}