Может ли программа использоваться для упрощения алгебраических выражений?
Мы знаем 1+2+...+n
равно n(n+1)/2
,
Но можем ли мы получить тот же результат программно, если мы не знаем его заранее?
О том, почему у меня такой вопрос.
Подумайте о более сложной ситуации:
X1 + X2 +... + Xk = n, где Xi является целым числом и>= 0.
Чего ожидать от X1^2+...Xk^2
?
Результат не очевиден на первый взгляд, и мы хотим передать его программе, чтобы уменьшить алгебру, как только мы разработали (подробное) математическое представление Ожидания X1^2+...Xk^2
3 ответа
Возможно, вы думаете о системе компьютерной алгебры (CAS)? WolframAlpha - это бесплатная онлайн-версия, которая использует Mathematica (очень мощную систему CAS) на своем сервере. Здесь вы можете увидеть, как он вычисляет / упрощает ваше выражение: WolframAlpha.
Ваш пример - это просто сумма квадратов, которая имеет довольно простую явную формулу: n(n+1)(2n+1)/6
, В целом, вы можете использовать формулу Фолхабера для расчета Sum of n^p
,
Хорошо, сначала несколько предложений о математической части вопроса, а затем о разработке программного обеспечения.
Существует электронная книга "A=B" Марко Петкова, сек. Герберта С. Уилфа и Дорон Цайлбергера, в которой речь идет о решении (или доказательстве отсутствия решения) проблем суммирования, даже более сложных, чем просто полиномы. Рецензия на книгу Яна Вэнлесса заслуживает быстрого прочтения. Электронную книгу можно загрузить бесплатно, но связанные копии можно приобрести, например, в Amazon.
Транс 2004 из бумаги AMS Грин и Уилф также могут подавать закрытые формы суммирования C- конечных последовательностей.
В общем, вам потребуется некоторое базовое программное обеспечение CAS для реализации этих алгоритмов, и похоже, что цель состоит в том, чтобы разработать такое программное обеспечение самостоятельно. Я бы порекомендовал изучить некоторые пакеты с открытым исходным кодом CAS (программное обеспечение компьютерной алгебры), такие как Maxima или Axiom, чтобы получить представление о том, что с этим связано. Конечно, вполне вероятно, что узконаправленное приложение может делать лишь часть того, что реализуют эти достаточно зрелые и высокопроизводительные пакеты, но я не чувствую, что могу указать вам более направленный путь, учитывая текущую формулировку вопроса,
Если "Ожидание" выражений включено в объем вашего проекта, существует ряд сложностей, сложенных поверх простой алгебраической манипуляции. Безусловно, необходимо уметь определять функции плотности вероятности для поддержки ожидаемых значений и, возможно, некоторого программного обеспечения для интеграции (хотя потенциальное ограничение выбора параметризованных распределений может привести к упрощенной проблеме поиска моментов этих распределений). Я действительно думаю, что это особенно хорошее приложение, к которому можно перейти, поскольку, казалось бы, простые выражения (суммы, макс / мин) случайных величин могут привести к кошмарному рассмотрению дел, хорошо подходящих для терпения компьютера.
РЕДАКТИРОВАТЬ, из-за вашего недавнего разъяснения поста.
Вам не сойдет с рук решение, сделанное вручную, если у вас нет целой команды докторов наук и нескольких лет. Лучший совет, который я могу вам дать, это купить лицензию Mathematica (или другую) и связать ее с вашей программой.
Если вы программист на Лисп, использование Maxima - еще одно потенциальное (бесплатное) решение.
Если вы хотите узнать об уровне техники в алгоритмах суммирования, эта статья - хорошее начало.
X1 + X2 +... + Xk = n, где Xi является целым числом и>= 0.
Чего ожидать от X1^2+...Xk^2?
Проблемы такого рода занимают много людей, чтобы понять, как это сделать на бумаге.
Возьмем k = 2. Тогда X_1 + X_2 = n дает X_2 = n - X_1.
Таким образом, ожидание будет вычислено E = X_1^2 + (n - X_1)^2 = 2 X_1^2 -2n X_1 + n^2
,
Это читает
E = sum(p_k * (2 * k^2 - 2 * n * k + n^2), k = 0..infinity)
где p_k = Prob(X_1 = k)
, Этот вид сумм, в зависимости от p_k
, как правило, очень трудно вычислить. Я бы сказал, что проблема еще сложнее, чем вычисление интегралов в замкнутой форме (для которых ни одно программное обеспечение полностью не реализует доступный - но неразрешимый - алгоритм Риша).
Чтобы убедить себя, возьмите, например. p_k = 1 / (log(k) * k^4)
,
Найти формулу (или генератор формул) для нее, по крайней мере, очень сложная исследовательская задача.