Вопрос

Я чрезвычайно интересуюсь математикой и программированием и планирую начать символическая математика проект с нуля.

  1. Хорошая ли это идея проекта?

  2. С чего начать?

  3. Как следует подойти к этому проекту ?

  4. Есть какие-нибудь хорошие ресурсы?

Заранее благодарю.

Это было полезно?

Решение

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

  2. С чего начать: Взгляните на решения, которые уже существуют, и подумайте о том, что именно вы хотите изменить.Чем ваш проект будет отличаться от других?

  3. Ресурс: SymPy - это библиотека Python для символьной математики

Другие советы

1.Is это хорошая идея проекта?

ДА;Я бы ожидал, что это обеспечит бесконечный источник интересной работы, которая довольно быстро проверит и расширит ваши способности в программировании.

2. С чего начать?

Я поддерживаю другие предложения о том, что вам следует взглянуть на существующую работу.SAGE очень впечатляет, и если бы вы спросили моего совета, я бы посоветовал вам сначала написать базовую систему для выполнения арифметических операций с числами и символами;затем взгляните на SAGE и напишите модуль для расширения системы, другими словами, станьте участником чего-то большего, а не пытайтесь делать все это самостоятельно.Посмотрите также на Mathematica и Maple, Macsyma и Axiom.Последние 2 бесплатны (я думаю), но все они хорошо документированы в режиме онлайн и являются отличным источником идей и задач.

3. Как следует подходить к этому проекту?

Как можно было бы подойти к поеданию слона.По одному кусочку за раз.Если говорить более серьезно, я думаю, что есть некоторые ключевые проблемы, такие как представление выражений и некоторая базовая функциональность (арифметика на многочленах), на которых вы могли бы порезаться.

4. Есть какие-нибудь хорошие ресурсы?

Много-много.найдите в Google "компьютерная алгебра", "переписывание терминов".Взгляните на то, что доступно на Amazon.И, если у вас есть доступ, ознакомьтесь с цифровой библиотекой ACM

Удачи.

Символическая математика - забавный проект.Использует его кто-нибудь или нет, по-видимому, не имеет значения в вашем вопросе, так что погрузитесь в суть.

За эти годы я написал две из них.Самым крутым было предложение для SQL where - оно выполняло некоторые тривиальные символические манипуляции с SQL, чтобы ввести некоторые дополнительные условия AND.Не полный "решатель", или "оптимизатор", или что-то еще, просто несколько символических манипуляций с любым возможным предложением SQL where.Менее крутой вариант был для отладчика;он выполнил сложную математику, чтобы вычислить (символически) смещения стека для переменных.

Вы начинаете с определения классов для элементов математического выражения - операндов, операторов, функций и т.д.

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

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

Затем обработайте преобразование выражения в каноническую форму.Т.е. вы провели частичную оценку и имеете Add( Variable(x), Add( Variable(x), Lit(3) ) ).Вам нужно написать правила, чтобы преобразовать это в Add( Multiply( Lit(2), Variable(x) ), Lit(3) ).

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

Существует много-много других правил "преобразования выражений", которые мы все изучаем в школе для выполнения алгебраических манипуляций.Их много.

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

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

Основы - это весело.В зависимости от того, как далеко вы хотите зайти, это становится все сложнее.

@Ресурсы:Вы могли бы взглянуть на питоника - это была попытка реализовать программу типа Mathematica на Python (исходный код доступен для скачивания).

Это Блог pySym возможно, вам также будет интересно почерпнуть идеи и начать с того, что другие делают с python и символьной математикой.

Больше на пути к ресурсам: Симпатичный корень:

Целью проекта SympyCore является поиск новых высокопроизводительных решений для представления символьных выражений на языке программирования Python и управления ими, а также опробование новых символьных моделей для получения принципиально непротиворечивой и достаточно общей символьной модели, которую было бы легко распространить на систему компьютерной алгебры (CAS).

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

Есть много замечательных ресурсов.Я рекомендую книгу "Современная компьютерная алгебра" Цур Гатена и Герхарда, хотя на самом деле она больше посвящена арифметике в специальных формах (многочлены, целые числа, матрицы), чем общим символьным манипуляциям.Когда вы начинаете, вам действительно может быть лучше помочь просмотр какого-нибудь руководства по Lisp или Scheme, потому что символическая математика концептуально очень проста в использовании в Lisp, а для создания символьного движка на Python вам более или менее придется реализовать мини-Lisp в качестве основы.

Как указывали другие, вы могли бы обратиться к SymPy и sympycore за вдохновением или конкретными алгоритмами.Исходный код для любого проекта немного сложный (но, конечно, не слишком сложный для изучения).

(Если я могу немного заткнуться, я написал крошечный символьный движок некоторое время назад (как проект выходного дня - он очень крошечный, и с тех пор я над ним не работал).Он реализует общий символьный движок примерно в 200 строках кода, а затем есть 300 строк кода, реализующих символьную арифметику и символическую булеву алгебру, с некоторым очень элементарным упрощением.Возможно, копаться легче, чем сочувствовать.Но там есть все, что вы могли бы легко открыть для себя сами, и, возможно, это доставит вам больше удовольствия.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top