Символічні програмні пакети для матричних виразів?


36

Ми знаємо, що симетричний і позитивно-визначений. Ми знаємо, що є ортогональним:БAB

Питання: чи симетричний і позитивно-визначений? Відповідь: Так.BAB

Питання: Чи міг комп'ютер нам це сказати? Відповідь: Напевно.

Чи є якісь символічні системи алгебри (на зразок Mathematica), які обробляють і поширюють відомі факти про матриці?

Редагувати: Щоб зрозуміти, я задаю це питання про абстрактно визначені матриці. Тобто я не маю явних записів для і , я просто знаю, що вони обидві матриці і мають особливі атрибути, такі як симетричні, позитивні визначені тощо.БAB


5
Чого мені не вистачає, це програмне забезпечення, яке матриці трактує символічно (тобто не як масиви). Я хотів би мати можливість поговорити про якусь симетричну матрицю не заважаючи про її записи. C
JM

6
Над цим працює декілька проектів. Я, мабуть, знайомий із впровадженням у SymPy. Це баггі, але повільно будується.
MRocklin

4
Це звучить як автоматизоване доведення теореми. Трюк в тому полягає в тому, щоб включити у свій двигун достатній набір аксіом, щоб потім його можна було ефективно вивести за допомогою автоматизованих міркувань (подумайте ПРОЛОГ). Якби я створив таку річ, властивість, яку ви цитуєте вище, - це, безумовно, те, що я кодував би як факт / відоме відношення, а не намагаючись. З іншого боку, є професор Паоло Бієтінезі в університеті RWTH Aachen. У дисертації він говорить про автоматичне виведення алгоритмів лінійної алгебри. Він використовує Mathematica символічно. aices.rwth-aachen.de:8080/~pauldj
Lagerbaer

1
Я знаю речі Паоло та бібліотеку FLAME. Я не думаю, що це може зробити.
Метт Кнеплі

2
Я погоджуюсь, що комп'ютерні алгебрині системи для матриць були б чудовими, але, здається, відсутні. Я поставив щедрості, щоб збільшити шанс отримати відповідь.
Спогад

Відповіді:


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

Старіша відповідь, що показує іншу роботу

Отож, вивчивши це деякий час, це те, що я знайшов.

Поточна відповідь на моє конкретне запитання - «Ні, немає діючої системи, яка могла б відповісти на це питання». Однак є кілька речей, які, здається, наближаються.

По-перше, Метт Кнеплі та Лагербаер вказали на роботу Дієго Фабрегата та Паоло Бієтінезі . Ця робота показує як потенційну важливість, так і доцільність цієї проблеми. Це добре читати. На жаль, я не впевнений, як саме працює його система чи на що вона здатна (якщо хтось знає про інші публічні матеріали на цю тему, то дайте мені знати).

По-друге, існує бібліотека алгебри тензорів, написана для Mathematica під назвою xAct, яка обробляє симетрії і таке символічно. Деякі речі це дуже добре, але не пристосовані до особливого випадку лінійної алгебри.

По-третє, ці правила формально записуються в пару бібліотек для Coq , автоматизованого помічника, що підтверджує теорему (пошук Google для лінійної / матричної алгебри coq, щоб знайти їх декілька). Це потужна система, яка, на жаль, вимагає взаємодії людини.

Після розмови з деякими людьми, які підтверджують теорему, вони пропонують вивчити логічне програмування (тобто Пролог, який також запропонував Лагербаєр) для подібних речей. Наскільки мені відомо, це ще не зроблено - я можу зіграти з цим у майбутньому.

Оновлення: я реалізував це за допомогою системи Maude . Мій код розміщений на github


1
Коли я виявив, що немає хорошої системи, моїм першим інстинктом було написати програму prolog. :)
Спогад

1
Я додав посилання внизу до побічного проекту шахти, який займається цією проблемою.
MRocklin

4

Деякі обчислення символічної матриці (наприклад, завершення блокової матриці) можна виконати за допомогою пакету NCAlgebra http://www.math.ucsd.edu/~ncalg/ (який працює під математикою).

Бергман http://servus.math.su.se/bergman/ - це пакет в Ліспі з подібними можливостями.

Деякі відповідні документи:
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розмірної матриці? Можливо, ви можете придумати індуктивну схему, де для N-1 x N-1цього передбачається, що відповідає дійсності, а потім побудувати нову блок-матрицю із загальним розміром, N x Nщоб довести, що вона є позитивно визначеною та симетричною.

Отже, остаточне запитання, яке програмне забезпечення краще підходить для виконання завдання (якщо воно є), мій досвід був із ( MATLAB/MuPadі Deriveдосі його використовую), і жоден з них не обробляє вектори та матриці дуже добре. MATLABрозбиває все на компоненти і Deriveможе оголосити, Non-scalarsале він не застосовує до них жодних правил спрощення.

а×(б×c)=(аб)c-(аc)б


2

Минуло чимало часу, коли я востаннє використовував будь-який із цих пакунків, але я подумав, що ви можете це зробити на таких мовах, як Mathematica, використовуючи твердження. Щось на зразок Assert [A, Symmetric] повідомляє Mathematica, що A - симетрична матриця тощо. На даний момент я не маю доступу до будь-якого зручного, тому це потрібно перевірити.


1
Я думаю, ви маєте на увазі команду Mathematica Assumingзамість Assert. Assumingбуде застосовувати ці припущення при спрощенні чи інтеграції виразу, але в документації не ясно про те, чи розповсюджуються властивості матриці. Я здогадуюсь, що такі властивості не переносяться через символічні обчислення.
Джефф Оксберрі

Це може бути правдою. Як я вже говорив, це було епохи тому (ще в мої аспірантурні дні). Але я пам’ятаю, колись міг зробити щось подібне. (Можливо, це було з MuPad, як це було впроваджено в Scientific WorkPlace.) Але я більше не маю доступу до SWP, щоб перевірити це (лише для Windows, і у мене немає емулятора в коробці).
aeismail

MuPAD зараз є частиною Matlab. Згідно з документацією , використання припущень аналогічно використанню Mathematica.
Джефф Оксберрі

MuPAD може мати справу лише з матрицею фіксованого розміру, і не приймає довільних припущень, таких як позитивна визначеність. Крім того, він не може відповісти на запитання про позитивну визначеність BAB, спочатку заданий.
Спогад

@Memming: Досить справедливо. Як я вже говорив, моя пам’ять про MuPAD істотно застаріла, тому що я востаннє регулярно користувався програмою близько 2006 року (коли я перейшов з ПК на Маки).
aeismail

2

Клен 15 не може цього зробити. Він не має властивості "Orthogonal" для матриць (хоча він має симетричний та позитивнийDefinite).


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
Я розумію, що предикати, наведені вище, перевіряють властивість даної матриці, а не символічно поширюють ці властивості, як Метт просить вище.
Метт Кнеплі

Ага так. Вибач за це. Я неправильно зрозумів.
лінчі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.