Paket perangkat lunak simbolis untuk ekspresi Matrix?


36

Kita tahu bahwa simetris dan pasti-positif. Kita tahu bahwa B itu ortogonal:SEBUAHB

Pertanyaan: apakah simetris dan pasti-positif? Jawab: Ya.BSEBUAHB

Pertanyaan: Bisakah komputer memberi tahu kami tentang hal ini? Jawab: Mungkin.

Apakah ada sistem aljabar simbolis (seperti Mathematica) yang menangani dan menyebarkan fakta yang diketahui tentang matriks?

Sunting: Untuk lebih jelas saya menanyakan pertanyaan ini tentang matriks yang didefinisikan secara abstrak. Yaitu saya tidak memiliki entri eksplisit untuk dan B , saya hanya tahu bahwa mereka berdua matriks dan memiliki atribut khusus seperti simetris, pasti positif, dll ....SEBUAHB


5
Apa yang saya lewatkan adalah perangkat lunak yang memperlakukan matriks secara simbolis (yaitu, bukan sebagai array). Saya ingin dapat berbicara tentang beberapa matriks simetris tanpa harus khawatir tentang entri-entri itu. C
JM

6
Ada beberapa proyek yang sedang mengerjakan ini. Saya kebetulan mengenal implementasi di SymPy. Itu buggy tapi perlahan dibangun.
MRocklin

4
Ini kedengarannya seperti pembuktian teorema otomatis. Triknya adalah memasukkan seperangkat aksioma yang cukup dalam mesin Anda sehingga dapat dideduksi secara efisien dengan penalaran otomatis (pikirkan PROLOG). Jika saya mendesain hal seperti itu, properti yang Anda sebutkan di atas jelas merupakan sesuatu yang saya kodekan sebagai fakta / hubungan yang diketahui daripada mencoba. Di sisi lain, ada Prof Paolo Bientinesi di RWTH Aachen University. Dalam disertasinya ia berbicara tentang derivasi otomatis dari algoritma aljabar linier. Dia menggunakan Mathematica secara simbolis. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer

1
Saya tahu barang-barang Paolo dan perpustakaan FLAME. Saya tidak berpikir itu bisa melakukan ini.
Matt Knepley

2
Saya setuju bahwa sistem aljabar komputer untuk matriks akan bagus, tetapi tampaknya tidak ada. Saya telah memberikan hadiah untuk meningkatkan kesempatan mendapatkan jawaban.
Memming

Jawaban:


27

Sunting: Ini sekarang di 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

Jawaban yang lebih lama yang menunjukkan pekerjaan lain

Jadi setelah melihat ini sebentar, inilah yang saya temukan.

Jawaban saat ini untuk pertanyaan spesifik saya adalah "Tidak, tidak ada sistem saat ini yang dapat menjawab pertanyaan ini." Namun ada beberapa hal yang tampaknya mendekati.

Pertama, Matt Knepley dan Lagerbaer sama-sama menunjuk karya Diego Fabregat dan Paolo Bientinesi . Karya ini menunjukkan kepentingan potensial dan kelayakan masalah ini. Ini bacaan yang bagus. Sayangnya saya tidak yakin persis bagaimana sistemnya bekerja atau apa yang mampu dilakukannya (jika ada yang tahu materi publik lainnya tentang topik ini, beri tahu saya).

Kedua, ada perpustakaan aljabar tensor yang ditulis untuk Mathematica yang disebut xAct yang menangani simetri dan semacam itu secara simbolis. Itu melakukan beberapa hal dengan sangat baik tetapi tidak disesuaikan dengan kasus khusus aljabar linier.

Ketiga, aturan-aturan ini ditulis secara formal di beberapa perpustakaan untuk Coq , asisten pembuktian teorema otomatis (pencarian Google untuk aljabar linear / aljabar matriks untuk menemukan beberapa). Ini adalah sistem yang kuat yang sayangnya tampaknya membutuhkan interaksi manusia.

Setelah berbicara dengan beberapa teorema orang yang mereka sarankan melihat ke pemrograman logika (yaitu Prolog, yang Lagerbaer juga menyarankan) untuk hal semacam ini. Setahu saya ini belum dilakukan - saya bisa bermain dengannya di masa depan.

Pembaruan: Saya sudah menerapkan ini menggunakan sistem Maude . Kode saya dihosting di github


1
Ketika saya menemukan bahwa tidak ada sistem yang baik, insting pertama saya adalah menulis program prolog. :)
Memming

1
Saya menambahkan tautan di bagian bawah ke proyek sampingan saya yang membahas masalah ini.
MRocklin

Bisakah SymPymenyimpulkan penyederhanaan multiplikasi dan inversi matriks?
Royi

4

Beberapa perhitungan matriks simbolik (misalnya, penyelesaian matriks blok) dapat dilakukan dengan paket NCAlgebra http://www.math.ucsd.edu/~ncalg/ (yang berjalan di bawah mathematica).

Bergman http://servus.math.su.se/bergman/ adalah paket dalam Lisp dengan kemampuan serupa.

Beberapa makalah yang relevan:
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

Pertanyaannya kemudian, bagaimana dengan Nmatriks dimensi? Mungkin Anda dapat datang dengan skema induktif di mana untuk N-1 x N-1dianggap benar dan kemudian membangun matriks blok baru dengan ukuran keseluruhan N x Nuntuk membuktikan bahwa positif pasti dan simetris.

Jadi pertanyaan terakhir, perangkat lunak mana yang lebih cocok untuk tugas (jika ada), pengalaman saya telah dengan MATLAB/MuPaddan Derive(masih menggunakannya) dan tak satu pun dari mereka menangani vektor dan matriks dengan sangat baik. MATLABmemecah semuanya menjadi komponen, dan Derivedapat mendeklarasikan Non-scalarstetapi tidak menerapkan aturan penyederhanaan apa pun untuknya.

Sebuah×(b×c)=(Sebuahb)c-(Sebuahc)b


2

Sudah lama sejak saya terakhir menggunakan salah satu dari paket ini, tapi saya pikir Anda bisa melakukan ini dalam bahasa seperti Mathematica melalui penggunaan pernyataan. Sesuatu seperti Assert [A, Symmetric] memberi tahu Mathematica bahwa A adalah matriks simetris, dan sebagainya. Saya tidak memiliki akses ke keduanya saat ini, jadi ini adalah sesuatu yang harus diperiksa.


1
Saya pikir maksud Anda perintah Mathematica Assumingbukan Assert. Assumingakan menerapkan asumsi-asumsi ini ketika menyederhanakan atau mengintegrasikan ekspresi, tetapi dokumentasi tidak jelas tentang apakah properti matriks diperbanyak. Dugaan saya adalah bahwa properti seperti itu tidak dibawa melalui perhitungan simbolik.
Geoff Oxberry

Itu bisa benar. Seperti yang saya katakan, ini sudah ribuan tahun yang lalu (di masa pascasarjana saya). Tapi saya ingat bisa melakukan hal seperti ini sekali. (Mungkin dengan MuPad, seperti yang diterapkan di Scientific WorkPlace.) Tapi saya tidak lagi memiliki akses ke SWP untuk memeriksa itu (hanya Windows, dan saya tidak memiliki emulator di komputer saya).
aeismail

MuPAD adalah bagian dari Matlab sekarang. Menurut dokumentasi , penggunaan asumsi mirip dengan Mathematica.
Geoff Oxberry

MuPAD hanya dapat menangani matriks ukuran tetap, dan tidak mengambil asumsi sewenang-wenang seperti kepastian positif. Juga tidak dapat menjawab pertanyaan tentang kepastian positif dari BAB yang awalnya ditanyakan.
Memming

@Memming: Cukup adil. Seperti yang saya katakan, ingatan saya tentang MuPAD secara substansial sudah ketinggalan zaman, karena saya terakhir kali menggunakan program ini sekitar tahun 2006 (ketika saya beralih dari PC ke Mac).
aeismail

2

Maple 15 tidak dapat melakukannya. Ini tidak memiliki properti "Orthogonal" untuk matriks (meskipun memiliki Symmetric and PositiveDefinite).


1
Diperbarui ke Maple 16 -> tidak ada properti "Orthogonal" juga.
GertVdE

1

Dalam Mathematica Anda setidaknya dapat memeriksa properti ini untuk matriks tertentu. Misalnya, matriks Aseperti yang Anda gambarkan:

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}

Untuk matriks 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

Kemudian:

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

Matriks Mathematica dan Dokumentasi Aljabar Linier


7
Ini adalah pemahaman saya bahwa predikat di atas memverifikasi properti untuk matriks yang diberikan, daripada secara simbolis menyebarkan properti ini seperti yang diminta Matt di atas.
Matt Knepley

Ah iya. Maaf soal itu. Saya salah paham.
lynchs
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.