Как преобразовать уравнение в формулы для отдельных переменных?

В конце концов, проблема была в том, что PHP генерировал JSON. Я не заметил ранее, но он добавляет к URI некоторые параметры, которые не были обработаны правильно. Исправлено путем изменения PHP-скрипта, генерирующего JSON!

5
задан Eddie 17 April 2009 в 14:27
поделиться

8 ответов

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

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

6
ответ дан 18 December 2019 в 13:19
поделиться

Это нетривиальная проблема, которую вы пытаетесь решить ... Не думаю, что вы повезло, пытаясь решить это самостоятельно. Лучше найти какое-нибудь стороннее приложение или библиотеку, которая это делает. Существует ряд программ, которые могут выполнять операции, о которых вы говорите, например Matlab и Maple. Кроме того, графический калькулятор TI-89 может сделать это. Вы можете получить нужные алгоритмы из Octave , который по сути является реализацией с открытым исходным кодом Matlab.

4
ответ дан 18 December 2019 в 13:19
поделиться

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

Как только вы поймете, как разбирать текст на символы, может быть достаточно легко создать приложение, которое может определить, что

c^2 = a^2 + b^2

можно заменить на

c = (a^2 + b^2)^.5

, но что о

cos(c) = sin(a^2/b) - b^(a/sin(b))

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

2
ответ дан 18 December 2019 в 13:19
поделиться

Это то, что вы, вероятно, захотите изучить с помощью математической библиотеки. Для .NET Math.NET кажется наиболее полным вариантом (не уверен, насколько он стабилен, но он определенно очень полный). Библиотека для символьных манипуляций должна быть в состоянии справиться с конкретной проблемой, которую вы здесь поставили.

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

1
ответ дан 18 December 2019 в 13:19
поделиться

Работа с уравнениями в символическом и нечисловом виде - определенно непростая задача. Я думаю, что самым простым способом для вас было бы просто использовать Mathematica, Maple или аналогичные закулисные и позволить им выполнять тяжелую работу за вас.

1
ответ дан 18 December 2019 в 13:19
поделиться

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

Существуют алгоритмы для определения решения уравнения (уравнений). Потому что большинство из них не так просто (или даже невозможно) точно решить.

0
ответ дан 18 December 2019 в 13:19
поделиться

Поскольку c ^ 2 = a ^ 2 + b ^ 2 не является выражением в C #, вы отключены на неправильный путь.

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

0
ответ дан 18 December 2019 в 13:19
поделиться

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

x^5 + y^5 - xy + 1 = 0

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

Что еще хуже, добавьте в микс функции триггеров или любые специальные функции, и это заставит вас переписать Mathematica до того, как вы закончите.

0
ответ дан 18 December 2019 в 13:19
поделиться