Matrix ifadeleri için sembolik yazılım paketleri?


36

simetrik ve pozitif-kesin olduğunu biliyoruz . B'nin dikgen olduğunu biliyoruz :AB

Soru: simetrik ve pozitif kesin midir? Cevap: evet.BAB

Soru: Bir bilgisayar bize bunu söyleyebilir mi? Cevap: Muhtemelen.

Matrisler hakkında bilinen gerçekleri işleyen ve yayan herhangi bir sembolik cebir sistemi (Mathematica gibi) var mı?

Düzenleme: Açık olmak gerekirse bu soruyu soyut olarak tanımlanmış matrisler hakkında soruyorum. Yani, ve B için açık girdilerim yok , sadece her ikisinin de matris olduğunu ve simetrik, pozitif kesin, vb. Gibi belirli özelliklere sahip olduğunu biliyorum.AB


5
Kaçırdığım, matrisleri sembolik olarak işleyen yazılımdır (yani diziler gibi değil). Girdileri hakkında endişelenmeden bazı simetrik matris hakkında konuşabilmek isterdim . C
JM

6
Bu konuda çalışan birkaç proje var. SymPy'deki uygulamaya aşina oldum. Bu adamcağız ama yavaş yavaş inşa ediliyor.
MRocklin

4
Bu otomatik teorem kanıtı gibi geliyor. O zaman püf noktası, motorunuza yeterli bir aksiyom seti dahil etmektir, böylece daha sonra otomatik bir muhakeme ile verimli bir şekilde düşülebilir (Think PROLOG). Eğer böyle bir şeyi tasarlayacak olsaydım, yukarıda bahsettiğin mülk kesinlikle denemek yerine bir gerçek / bilinen ilişki olarak kodladığım bir şeydi. Öte yandan, RWTH Aachen Üniversitesi'nde Prof Paolo Bientinesi var. Tezinde, doğrusal cebir algoritmalarının otomatik olarak türetilmesi hakkında konuşur. Mathematica'yı sembolik bir şekilde kullanıyor. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer

1
Paolo'nun eşyalarını ve FLAME kütüphanesini biliyorum. Bunu yapabileceğini sanmıyorum.
Matt Knepley

2
Matrisler için bilgisayar cebir sistemlerinin mükemmel olacağı konusunda hemfikir, ancak eksik görünüyor. Cevap alma şansını arttırmak için bir ödül aldım.
12'de

Yanıtlar:


27

Düzenleme: Bu şimdi SymPy'de

$ 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

Diğer işleri gösteren eski cevap

Yani bir süre bu konuya baktıktan sonra bulduğum şey bu.

Özel soruma şu anki cevabı "Hayır, bu soruyu cevaplayabilecek mevcut bir sistem yok." Ancak yakın gibi görünen birkaç şey var.

İlk olarak, Matt Knepley ve Lagerbaer , Diego Fabregat ve Paolo Bientinesi'nin çalışmalarına dikkat çekti . Bu çalışma, bu sorunun hem potansiyel önemini hem de uygulanabilirliğini göstermektedir. Güzel bir okuma. Ne yazık ki, sisteminin tam olarak nasıl çalıştığından veya neler yapabileceğinden tam olarak emin değilim (eğer bu konudaki diğer kamu materyallerini bilen varsa bana bildiriniz).

İkincisi, Mathematica için yazılmış ve simetrileri idare eden xAct adında bir tensör cebir kütüphanesi var . Bazı şeyleri çok iyi yapıyor ama özel doğrusal cebir vakasına göre tasarlanmadı.

Üçüncüsü, bu kurallar resmen bir otomatik teorem kanıtlama yardımcısı olan Coq için (birkaç tanesini bulmak için coq linear / matrix cebirini aramak ) olan birkaç kitaplıkta yazılmıştır . Bu ne yazık ki insan etkileşimi gerektiriyor gibi görünen güçlü bir sistem.

Bazı teoremlerle konuştuktan sonra , insanları bu tür şeyler için mantık programlamasına (örneğin, Proger, Lagerbaer'ın önerdiği gibi) bakmayı öneriyorlar. Bildiğim kadarıyla bu henüz yapılmadı - gelecekte onunla oynayabilirim.

Güncelleme: Maude sistemini kullanarak bunu uyguladım . Kodum github'da barındırılıyor


1
İyi bir sistem olmadığını tespit ettiğimde ilk içgüdüm bir prolog programı yazmaktı. :)
21:12

1
Bu sorunla ilgilenen bir yan projeme dibe link ekledim.
MRocklin

4

Bazı sembolik matris hesaplamaları (örneğin, blok matrisin tamamlanması), NCAlgebra http://www.math.ucsd.edu/~ncalg/ (matematiğin altında çalışan) paketi ile yapılabilir .

Bergman http://servus.math.su.se/bergman/ Lisp'te benzer yeteneklere sahip bir pakettir.

Bazı ilgili makaleler:
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

O zaman soru, Nboyutsal bir matris ne olur ? Belki de N-1 x N-1bunun doğru olduğu kabul edilen endüktif bir şema geliştirebilir ve daha sonra N x Nbunun kesin ve simetrik olduğunu kanıtlamak için toplam büyüklükte yeni bir blok matris oluşturabilirsiniz .

Yazılım daha iyi görev (varsa) için müsait olan son soruya, Yani, benim deneyim ile olmuştur MATLAB/MuPadve Derive(yine de kullanabilirsiniz) ve ikisi vektörleri ve matrisleri çok iyi idare. MATLABher şeyi bileşenlere Deriveayırır ve beyan edebilir Non-scalarsancak bunlara basitleştirme kuralları uygulamaz.

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


2

Bu paketlerden birini en son kullandığımdan bu yana bir süre geçti, ancak iddiaları kullanarak bunu Mathematica gibi dillerde yapabileceğinizi düşündüm. Assert [A, Simetrik] gibi bir şey, Mathematica'ya A'nın simetrik bir matris olduğunu söyler. Şu anda her ikisine de erişemiyorum, bu yüzden kontrol edilmesi gereken bir şey bu.


1
Bence Assumingyerine Mathematica komutunu kastediyorsun Assert. AssumingBir ifadeyi basitleştirirken veya bütünleştirirken bu varsayımları uygulayacak, ancak belgeler matris özelliklerinin yayılıp yayılmadığı konusunda net değil. Benim tahminim, bu özelliklerin sembolik hesaplamalar yoluyla taşınmamasıdır.
Geoff Oxberry

Bu doğru olabilir. Dediğim gibi, bu çok zaman önceydi (lisansüstü okul günlerime döndüm). Ama bir zamanlar böyle bir şey yapabileceğimi hatırlıyorum. (Muhtemelen Scientific WorkPlace’de uygulandığı gibi MuPad’deydi.) Ancak bunu kontrol etmek için artık SWP’ye erişimim yok (yalnızca Windows’ta ve kutumda bir öykünücüm yok).
aeismail,

MuPAD şimdi Matlab'ın bir parçası. Belgelere göre , varsayımların kullanımı Mathematica'nınkine benzer.
Geoff Oxberry

MuPAD sadece sabit boyutlu matrislerle başa çıkabilir ve pozitif kesinlik gibi rastgele varsayımlar almaz. Ayrıca BAB'ın 'Olumlu kesinliği' sorusuna cevap veremiyor 'dedi.
Mar’ı

@Memming: Yeterince adil. Dediğim gibi, MuPAD hafızam büyük ölçüde eskidi, programı en son 2006 civarında düzenli kullandım (PC'lerden Mac'lere geçtiğimde).
aeismail,

2

Maple 15 yapamaz. Matrisler için "Ortogonal" özelliği yoktur (Simetrik ve PositiveDefinite olmasına rağmen).


1
Maple 16'ya güncellendi -> mülk yok "Ortogonal" de.
GertVdE

1

Mathematica'da bu özellikleri en azından belirli matrisler için kontrol edebilirsiniz. Örneğin, Atanımladığınız matris :

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}

Matris için 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

Sonra:

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

Mathematica Matrisler ve Lineer Cebir Dokümantasyonu


7
Anladığım kadarıyla yukarıdaki öngörüler, Matt'in istediği gibi, bu özellikleri sembolik olarak yaymak yerine, belirli bir matris için bu özelliği doğrulamak olduğunu anlıyor.
Matt Knepley

Ah evet. Bunun için üzgünüm. Yanlış anlamışım.
15
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.