2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Алгоритмы упрощения сложных символьных выражений
Сообщение10.03.2022, 13:41 


11/08/18
363
Добрый день,

часто сталкиваюсь с проблемой - после какого-нибудь аналитического интегрирования или решения системы уравнений в качестве ответа Mathematica или Maple выдают крокодилов на пару сотен страниц, на котороых FullSimplify или падает, или дождаться не получается, хотя ждшь обычно пару суток.

Есть ли какие-то специальные команды в этих софтах, или системы по такому упрощению, или софтвер?

А может даже алгоритмы есть, чтобы можно было запрограммиорвать и попробовать самому поупрощать? У меня на столько назрела необходимость, что готов даже сам что-то запрограммировать или собрать из каких-то кубиков с таким низкоуровневым программиорванием.

Особенно важно, чтобы после упрощения суммарное число арифметических операций было бы минимально, то есть чтобы ответ можно было бы воткнуть в С/С++ код и радоваться тому, что оно быстро считается.

Спасибо!

 Профиль  
                  
 
 Re: Алгоритмы упрощения сложных символьных выражений
Сообщение10.03.2022, 14:26 
Заслуженный участник


18/09/21
1764
Любой такой софт имеет функции редукции выражений. (Например в Maxima есть ratsimp, radcan, trigrat и прочие.)
Конкретно, минимизация арифметических операций - вряд ли. Это обычно никому не нужно.
Обычно функций много - для разных типов редукции. Нужно самостоятельно выбирать - какие и в каком порядке применять. Завист от выражения и от целей.

 Профиль  
                  
 
 Re: Алгоритмы упрощения сложных символьных выражений
Сообщение10.03.2022, 14:59 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
В Mathematica порою для упрощения полезно использовать частные функции вместо Simplify/FullSimplify. См. функции, перечисленные в разделе See Also страницы документации по Simplify. Также нередки случаи, когда относительно упрощаемого выражения существуют некие предположения, которые человек считает очевидными, а СКА не догадывается (примеры: $a \in \mathbb{R}$, $a \in \mathbb{Z}$, $a > 0$). Для их указания в Mathematica есть функция Assuming и опция Assumptions.

-- 10.03.2022, 15:03 --

ilghiz в сообщении #1550134 писал(а):
чтобы ответ можно было бы воткнуть в С/С++ код и радоваться тому, что оно быстро считается
Mathematica и сама немножко умеет компилировать: почитайте здесь и здесь.

 Профиль  
                  
 
 Re: Алгоритмы упрощения сложных символьных выражений
Сообщение10.03.2022, 18:03 
Заслуженный участник


25/02/11
1797
Ну, выражение само по себе может не упрощаться. А если и вохможно упростить 10 страниц до 2 страниц, то не стоит ожидать от математики, что она такое найдет в общем случае найдет. Разве что там просто дроби без корней и пр.

Для минимизации числа операций в Compile математика использует функцию Experimental`OptimizeExpression. Например, для выражения $x^2+\sin x^2+\cos \sin x^2$

Experimental`OptimizeExpression[x^2 + Sin[x^2] + Cos[Sin[x^2]]]

выдает

Код:
Experimental`OptimizedExpression[
Block[{Compile`$1, Compile`$2}, Compile`$1 = x^2;
  Compile`$2 = Sin[Compile`$1];
  Compile`$1 + Cos[Compile`$2] + Compile`$2]]

Видно, что здесь $x^2$ и $\sin x^2$ вычисляются по одному разу.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group