компьютерная алгебра мягкая, чтобы минимизировать количество операций в наборе полиномов - PullRequest
1 голос
/ 15 ноября 2009

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

Я хотел бы знать, существует ли система компьютерной алгебры, такая как Mathematica, Matlab или sympy, которая может оптимизировать несколько полиномов с общими терминами для минимизации количества операций. Было бы также хорошо, если бы такая система могла минимизировать количество промежуточных членов, чтобы уменьшить количество регистров.

Если такой системы не существует, я собираюсь сделать ее самостоятельно, используя символическую алгебру Python Sympy. Если вы работаете над таким пакетом или хотите его разработать или использовать, сообщите мне.

вот вымышленный пример

x0 = ((t - q*A)*x + B)*y
y0 = ((t - q*A)*y + B)*z
z0 = ((t - q*A)*z + B)*x

так что вы, очевидно, можете учесть (t - qA) член. Теперь, если вы сделаете количество терминов очень большим с различными комбинациями общих терминов, это будет трудно сделать вручную. Уравнения, которые у меня есть, содержат до 40 членов, а размер набора составляет около 20. Надеюсь, это поможет

Спасибо

Ответы [ 4 ]

1 голос
/ 28 декабря 2010

Mathomatic может быть легким решением, которое вы ищете. Посмотрите: http: www.mathomatic.org .

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

У него нет возможности программирования. Вы можете создать отдельное приложение или использовать API в форме библиотеки и заголовочных файлов, чтобы включить его в C, C ++ или Objective-C, или вы можете запустить приложение из своего приложения, где вы предоставляете командную строку и среду.

Посмотрите на NSTask, который также позволяет передавать stdin и stdout потокам данных в вашем собственном приложении.

Mathomatic также может сохранять полученные выражения в формате java, python или maxima для включения в программный код на этих системах.

1 голос
/ 25 февраля 2010

Рассматривали ли вы Максиму ?

Это впечатляющий пакет символьных вычислений, который является бесплатным, открытым исходным кодом и имеет сильное и активное сообщество, которое оказывает ценную помощь при работе с неочевидными формулировками. Он легко доступен для всех трех основных операционных систем и имеет предварительно скомпилированный двоичный файл Windows.

У вас есть множество команд алгебраической манипуляции, доступных для выражений и для систем уравнений (таких как ваша): расширение, разложение, упрощение, ratsimp, linsolve и т. Д.

Эта страница ( Maxima для символьных вычислений ) должна помочь вам начать - загрузить, установить, несколько примеров, а затем указать дополнительные ресурсы, которые помогут вам на вашем пути, включая краткий справочник команд / чит лист и некоторые рекомендации по написанию собственных сценариев.

1 голос
/ 15 ноября 2009

Является ли sympy тем, что вы ищете? Я действительно считаю, что в нем есть поддержка полиномов, хотя я не знаю, поддерживает ли он все функции, которые вы можете пожелать (тем не менее, настроить его, чтобы добавить то, что, по вашему мнению, может отсутствовать, должно быть проще, чем написать свой с нуля ;-) .

0 голосов
/ 25 февраля 2010

Ну, Mathematica, безусловно, может выполнять любые преобразования на множествах полиномиальных уравнений, таких как ваше, и некоторые из этих преобразований могут заключаться в сокращении числа членов. Является ли это правильным ответом для вас, остается под вопросом, поскольку у вас, кажется, нет доступной копии. Я ожидаю, что то же самое верно для Maple и для большинства других CAS там.

Но ваше упоминание о

уменьшить количество регистров

предполагает, что вы на самом деле пытаетесь выполнить некоторый анализ потока данных для компиляции. Вы можете посмотреть литературу по этой теме тоже. Некоторая часть этой литературы действительно относится к подобным компьютерной алгебре преобразованиям выражений.

...