매트릭스 표현을위한 상징적 인 소프트웨어 패키지?


36

우리는 가 대칭적이고 양의 한정된 것을 알고 있습니다. 우리는 B 가 직교 한다는 것을 알고 있습니다 .AB

질문 : 대칭적이고 양의 한정입니까? 답 : 예.BAB

질문 : 컴퓨터가 우리에게 이것을 말해 줄 수 있습니까? 답 : 아마도.

행렬에 대해 알려진 사실을 처리하고 전파하는 상징적 대수 시스템 (예 : Mathematica)이 있습니까?

편집 : 분명히 추상적으로 정의 된 행렬에 대해이 질문을하고 있습니다. 즉 , B에 대한 명시적인 항목이 없으며 , 둘 다 행렬이며 symetric, positive definite 등과 같은 특정 속성이 있음을 알고 있습니다.AB


5
내가 누락 된 것은 행렬을 상징적으로 처리하는 소프트웨어입니다 (즉, 배열이 아닌). 항목에 대해 걱정하지 않고 대칭 행렬 에 대해 이야기하고 싶습니다 . C
JM

6
이에 대한 몇 가지 프로젝트가 있습니다. SymPy의 구현에 익숙합니다. 버그가 있지만 천천히 구축됩니다.
MRocklin

4
이것은 자동 정리 증명처럼 들립니다. 그런 다음 트릭은 자동 추론 (PROLOG)을 통해 효율적으로 추론 할 수 있도록 엔진에 충분한 공리 세트를 포함시키는 것입니다. 내가 그런 것을 디자인하려고한다면, 위에서 언급 한 속성은 내가 시도하는 것이 아니라 사실 / 알려진 관계로 암호화 한 것입니다. 반면, RWTH 아헨 대학교에는 Paolo Bientinesi 교수가 있습니다. 그의 논문에서 그는 선형 대수 알고리즘의 자동 파생에 대해 이야기합니다. 그는 상징적으로 Mathematica를 사용합니다. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer

1
Paolo의 자료와 FLAME 라이브러리를 알고 있습니다. 나는 이것이 할 수 있다고 생각하지 않습니다.
매트 Knepley

2
행렬의 컴퓨터 대수 시스템은 훌륭하지만 누락 된 것으로 보입니다. 답변을받을 가능성을 높이기 위해 현상금을 지급했습니다.
Memming

답변:


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 선형 / 행렬 대수를 검색하여 몇 가지를 찾습니다). 불행히도 인간의 상호 작용이 필요한 강력한 시스템입니다.

일부 정리 증명 자들 과 이야기를 나눈 후에 그들은 이런 종류의 일에 대해 논리 프로그래밍 (즉, Lagerbaer가 제안한 Prolog)을 살펴볼 것을 제안합니다. 내 지식으로는 아직 완료되지 않았습니다. 나는 앞으로 그것을 가지고 놀 수 있습니다.

업데이트 : Maude 시스템을 사용하여 이것을 구현했습니다 . 내 코드는 github에서 호스팅 됩니다


1
좋은 시스템이 없다는 것을 알았을 때 첫 번째 본능은 프롤로그 프로그램을 작성하는 것이 었습니다. :)
Memming

1
나는이 문제를 다루는 내 프로젝트의 하단에 링크를 추가했습니다.
MRocklin

4

NCAlgebra http://www.math.ucsd.edu/~ncalg/ 패키지 (수학에서 실행 됨)를 사용하여 일부 기호 행렬 계산 (예 : 블록 행렬 완성)을 수행 할 수 있습니다 .

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


3

CAS2x23x3B

그렇다면 문제는 N차원 행렬은 어떻습니까? for N-1 x N-1가 참이라고 가정 되는 유도 체계를 생각해 낸 다음 전체 크기 N x N를 가진 새로운 블록 행렬을 구성하여 양의 명확하고 대칭임을 증명할 수 있습니다.

소프트웨어가 더 나은 작업 (있는 경우)에 적합있는 마지막 질문, 그래서 내 경험에있다 MATLAB/MuPad하고 Derive(여전히 사용)도 그 중은 벡터와 행렬 아주 잘 처리합니다. MATLAB모든 것을 구성 요소로 분류하고 Derive선언 할 수는 Non-scalars있지만 단순화 규칙을 적용하지는 않습니다.

a×(b×c)=(ab)c(ac)b


2

마지막으로이 패키지 중 하나를 사용한 지 오래되었지만 어설 션을 사용하여 Mathematica와 같은 언어로이 작업을 수행 할 수 있다고 생각했습니다. Assert [A, Symmetric]과 같은 것은 Mathematica에게 A가 대칭 행렬 등임을 알려줍니다. 지금은 어느 쪽도 편리하게 액세스 할 수 없으므로 확인해야합니다.


1
나는 당신이 Assuming대신 Mathematica 명령을 의미한다고 생각합니다 Assert. Assuming는 식을 단순화하거나 통합 할 때 이러한 가정을 적용하지만 행렬 속성이 전파되는지 여부는 명확하지 않습니다. 내 생각 엔 그러한 속성들이 상징적 계산을 통해 전달되지는 않는다.
Geoff Oxberry

사실 일 수 있습니다. 내가 말했듯이, 이것은 얼마 전 (내 대학원 시절)이었습니다. 그러나 나는 이런 일을 한 번 할 수 있다는 것을 기억합니다. (아마도 Scientific WorkPlace에서 구현 된 MuPad와 관련이있을 수 있습니다.) 그러나 더 이상 SWP에 액세스하여이를 확인할 수 없습니다 (Windows 전용이며 상자에 에뮬레이터가 없습니다).
aeismail

MuPAD는 현재 Matlab의 일부입니다. 문서 에 따르면 , 가정의 사용법은 Mathematica의 사용법과 유사합니다.
제프 옥스 베리

MuPAD는 고정 크기 행렬 만 처리 할 수 ​​있으며 양의 한정과 같은 임의의 가정을 취하지 않습니다. 또한 BAB가 처음에 요청한 긍정적 인 결정성에 대한 질문에는 답할 수 없습니다.
Memming

@Memming : 충분히 공평합니다. 내가 말했듯이 MuPAD의 메모리는 2006 년경에 정기적으로 프로그램을 마지막으로 사용했기 때문에 실제로 오래되었습니다 (PC에서 Mac으로 전환했을 때).
aeismail

2

메이플 15는 할 수 없습니다. 행렬에 대해 "직교"속성이 없습니다 (심볼 및 PositiveDefinite가 있음).


1
Maple 16으로 업데이트-> "Orthogonal"속성 없음.
GertVdE

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이 요청 한대로 이러한 속성을 상징적으로 전파하기보다는 주어진 행렬에 대한 속성을 확인하고 있음을 이해합니다.
매트 Knepley

아. 넵. 미안합니다. 나는 오해했다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.