В конце концов, проблема была в том, что PHP генерировал JSON. Я не заметил ранее, но он добавляет к URI некоторые параметры, которые не были обработаны правильно. Исправлено путем изменения PHP-скрипта, генерирующего JSON!
Решение символьных уравнений является сложной задачей, и для многих уравнений не существует закрытого решения. Написание собственной системы компьютерной алгебры не является тривиальной задачей, но вы можете написать программу для простого уравнения.
Вам нужно будет построить дерево выражений входной строки и определить правила преобразования для манипулирования дерево выражений. Чтобы найти переменную, вы можете выполнить поиск (руководствуясь хорошей эвристикой, чтобы поддерживать приемлемость времени выполнения) в пространстве дерева выражений, которое может быть получено из оригинального дерева с помощью нескольких аппликаций правила преобразования.
Это нетривиальная проблема, которую вы пытаетесь решить ... Не думаю, что вы повезло, пытаясь решить это самостоятельно. Лучше найти какое-нибудь стороннее приложение или библиотеку, которая это делает. Существует ряд программ, которые могут выполнять операции, о которых вы говорите, например Matlab и Maple. Кроме того, графический калькулятор TI-89 может сделать это. Вы можете получить нужные алгоритмы из Octave , который по сути является реализацией с открытым исходным кодом Matlab.
Ваш единственный выбор - применить грубую силу, применяя все известные приемы. В простых уравнениях алгебры, как у вас выше, этого может быть достаточно, но более сложные задачи требуют все более сложных решений. Короче говоря, это будет непросто.
Как только вы поймете, как разбирать текст на символы, может быть достаточно легко создать приложение, которое может определить, что
c^2 = a^2 + b^2
можно заменить на
c = (a^2 + b^2)^.5
, но что о
cos(c) = sin(a^2/b) - b^(a/sin(b))
Хуже того, у вас есть неразрешимые интеграции и абстрактная алгебра ... Вам нужно где-то нарисовать линию сложности, иначе вы просто в конечном итоге построите еще один клен .
Это то, что вы, вероятно, захотите изучить с помощью математической библиотеки. Для .NET Math.NET кажется наиболее полным вариантом (не уверен, насколько он стабилен, но он определенно очень полный). Библиотека для символьных манипуляций должна быть в состоянии справиться с конкретной проблемой, которую вы здесь поставили.
Если честно, написать это с нуля не должно быть слишком трудным, но если вы не очень хорошо знакомы с деревьями выражений и не знаете, как подойти к задаче, я все равно рекомендую используя существующую математическую библиотеку, Math.NET или любую другую достойную, которая занимается символьной алгеброй.
Работа с уравнениями в символическом и нечисловом виде - определенно непростая задача. Я думаю, что самым простым способом для вас было бы просто использовать Mathematica, Maple или аналогичные закулисные и позволить им выполнять тяжелую работу за вас.
В дополнение ко всему, что уже было сказано, Вы можете взглянуть на численные методы.
Существуют алгоритмы для определения решения уравнения (уравнений). Потому что большинство из них не так просто (или даже невозможно) точно решить.
Поскольку c ^ 2 = a ^ 2 + b ^ 2 не является выражением в C #, вы отключены на неправильный путь.
Забудьте о деревьях выражений .NET и создайте свои собственные. Вам необходимо описать алгоритмы, необходимые для выполнения этих преобразований, и данные, необходимые для описания уравнения. Вы обнаружите, что то, что вы получаете, сильно отличается от дерева выражений .NET.
В целом неприятная проблема. Для полиномиальных выражений низкого порядка это не слишком сложно. Для линейных задач вам просто нужен парсер и немного пост-обработки. Но даже простое в написании выражение может быть менее тривиальным. Например, что вы будете делать с
x^5 + y^5 - xy + 1 = 0
. Решение для x или y в терминах другого означает, что вы должны решить для корней многочлена непостоянного коэффициента порядка 5. В общем случае это невозможно сделать.
Что еще хуже, добавьте в микс функции триггеров или любые специальные функции, и это заставит вас переписать Mathematica до того, как вы закончите.