Символьные программные пакеты для выражений Matrix?


36

Мы знаем, что симметрична и положительно определена. Мы знаем, что B ортогонально:AB

Вопрос: является ли симметричным и положительно определенным? Ответ: да.BAB

Вопрос: Мог ли компьютер сказать нам это? Ответ: возможно.

Существуют ли системы символической алгебры (например, Mathematica), которые обрабатывают и распространяют известные факты о матрицах?

Изменить: Чтобы было ясно, я задаю этот вопрос о абстрактно определенных матриц. Т.е. у меня нет явных записей для и B , я просто знаю, что они обе являются матрицами и имеют определенные атрибуты, такие как симметричный, положительно определенный и т. Д ....AB


5
Чего мне не хватает, так это программного обеспечения, которое обрабатывает матрицы символически (т.е. не как массивы). Я хотел бы иметь возможность говорить о некоторой симметричной матрице не беспокоясь о ее записях. C
JM

6
Есть несколько проектов, работающих над этим. Я знаком с реализацией в SymPy. Это глючит, но медленно строится.
MRocklin

4
Это звучит как автоматическое доказательство теорем. Хитрость заключается в том, чтобы включить достаточный набор аксиом в ваш двигатель, чтобы затем его можно было эффективно вывести с помощью автоматических рассуждений (например, PROLOG). Если бы я спроектировал такую ​​вещь, то свойство, которое вы цитируете выше, определенно было бы то, что я закодировал бы как факт / известное отношение, а не пытался. С другой стороны, профессор Паоло Биентинези из RWTH Aachen University. В своей диссертации он говорит об автоматическом выводе алгоритмов линейной алгебры. Он использует Mathematica в символической форме. aices.rwth-aachen.de:8080/~pauldj
Лагербаер

1
Я знаю вещи Паоло и библиотеку FLAME. Я не думаю, что это может сделать это.
Мэтт Кнеплей

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

Старый ответ, который показывает другую работу

Поэтому, посмотрев на это некоторое время, я нашел это.

Текущий ответ на мой конкретный вопрос: «Нет, в настоящее время нет системы, которая могла бы ответить на этот вопрос». Есть, однако, несколько вещей, которые кажутся близкими.

Во-первых, Мэтт Кнепли и Лагербер указали на работы Диего Фабрегата и Паоло Биентинези . Эта работа показывает как потенциальную важность, так и выполнимость этой проблемы. Это хорошее чтение. К сожалению, я не уверен точно, как работает его система или на что она способна (если кто-нибудь знает другие публичные материалы по этой теме, дайте мне знать).

Во-вторых, есть библиотека тензорной алгебры, написанная для Mathematica под названием xAct, которая обрабатывает симметрии и тому подобное символически. Он делает некоторые вещи очень хорошо, но не приспособлен к частному случаю линейной алгебры.

В-третьих, эти правила формально записаны в паре библиотек для Coq , автоматизированного помощника по доказательству теорем (Google находит для coq линейную / матричную алгебру, чтобы найти несколько). Это мощная система, которая, к сожалению, требует взаимодействия с человеком.

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

Обновление: я реализовал это с помощью системы Мод . Мой код размещен на github


1
Когда я обнаружил, что хорошей системы не существует, мой первый инстинкт был написать прологическую программу. :)
Memming

1
Я добавил ссылку внизу на мой сторонний проект, который занимается этой проблемой.
MRocklin

Можно ли SymPyсделать вывод об упрощении умножения и инверсии матриц?
Ройи

4

Некоторые вычисления символической матрицы (например, завершение блочной матрицы) могут быть выполнены с помощью пакета NCAlgebra http://www.math.ucsd.edu/~ncalg/ (который работает под управлением mathematica).

Bergman 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предполагается, что for истинно, а затем построить новую блочную матрицу с общим размером, 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
Я думаю, что вы имеете в виду команду Mathematica Assumingвместо Assert. Assumingбудет применять эти предположения при упрощении или интеграции выражения, но в документации не ясно, распространяются ли свойства матрицы. Я предполагаю, что такие свойства не переносятся с помощью символических вычислений.
Джефф Оксберри

Это может быть правдой. Как я уже говорил, это было много лет назад (еще в школьные годы). Но я помню, что однажды смог сделать что-то подобное. (Возможно, это было с MuPad, как это реализовано в Scientific WorkPlace.) Но у меня больше нет доступа к SWP, чтобы проверить это (только для Windows, и у меня нет эмулятора на моем компьютере).
aeismail

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

MuPAD может работать только с матрицей фиксированного размера и не принимает произвольных допущений, таких как положительная определенность. Также он не может ответить на вопрос о положительной определенности BAB 'первоначально заданный.
Memming

@Memming: достаточно справедливо. Как я уже сказал, моя память о MuPAD существенно устарела, так как я последний раз регулярно использовал программу около 2006 года (когда я переключался с ПК на Mac).
Aeismail

2

Клен 15 не может этого сделать. У него нет свойства «Ортогональный» для матриц (хотя у него есть Symmetric и 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
Насколько я понимаю, вышеупомянутые предикаты проверяют это свойство для данной матрицы, а не символически распространяют эти свойства, как просит Мэтт выше.
Мэтт Кнеплей

О да. Прости за это. Я неправильно понял.
Линч
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.