2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Программное раскрытие скобок в уравнение
Сообщение16.05.2013, 17:15 
Добрый вечер, Уважаемые форумчане!
Прошу поделиться опытом по программированию. У меня стоит задача создать программу которая будет раскрывать скобки в уравнении. И приводить его к виду ax+b=0.
Пример уравнения:

(1+a)*((5+a)-2*4/(1+a))*(((9+a)-3*7/(1+a))-(6-3*4/(1+a))*(8-2*7/(1+a))/((5+a)-2*4/(1+a)))=0

Мб кто-то делал подобное на С.

Заранее благодарен!

 
 
 
 Re: Программное раскрытие скобок в уравнение
Сообщение16.05.2013, 18:27 
Представьте, что вы — это та программа. Как бы вы раскрывали?

Потом посмотрите, какие общие правила можно извлечь из ваших действий и какие вообще бывают. Например, $a(b + c) = ab + ac$. Проверьте, в каком порядке их лучше выполнять, чтобы получить что-то определённое.

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

И пишите по ходу дела всё сюда. :-)

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

P. S. Если у вас деление и умножение могут встречаться как попало, может получиться и уравнение не первой степени. Например, $x+\frac1x=1$ преобразуется в квадратное.

P. P. S. А можно не применять преобразования к уравнению, а «вычислять» символьно его левую часть (если справа 0), при этом сразу приводя к нужной форме. Подумайте, возможно ли таким способом получить многочлен или рациональную функцию (дробь из двух многочленов) от переменной.

 
 
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 05:41 
Добрый день, arseniiv
Спасибо за помощь! Я попробовал представить уравнение в виде дерева получается слишком громоздкое и сложное решение. В моем случае прекрасно подходит обратная польская запись. Алгоритм, который осуществляет предвычисление констант в выражении приведен в статье "обратная польская запись" в википедии. Получается просто и понятно.

 
 
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 06:41 
Аватара пользователя
А зачем на С, когда есть Perl, Python, и несколько свободных систем компьютерной алгебры?

 
 
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 11:23 
smithlv в сообщении #751211 писал(а):
Я попробовал представить уравнение в виде дерева получается слишком громоздкое и сложное решение. В моем случае прекрасно подходит обратная польская запись.

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

 
 
 
 Re: Программное раскрытие скобок в уравнение
Сообщение08.08.2013, 10:59 
Sphinx Pinastri в сообщении #751216 писал(а):
А зачем на С, когда есть Perl, Python, и несколько свободных систем компьютерной алгебры?



Потому что изначально проект на С, а раскрытие скобок это его часть. И не такая сложная, как казалось.

-- 08.08.2013, 12:20 --

Joker_vD в сообщении #751252 писал(а):
smithlv в сообщении #751211 писал(а):
Я попробовал представить уравнение в виде дерева получается слишком громоздкое и сложное решение. В моем случае прекрасно подходит обратная польская запись.

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

Понял. Осознал. Согласен!

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group