2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Программное раскрытие скобок в уравнение
Сообщение16.05.2013, 17:15 


16/05/13
3
Добрый вечер, Уважаемые форумчане!
Прошу поделиться опытом по программированию. У меня стоит задача создать программу которая будет раскрывать скобки в уравнении. И приводить его к виду 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 
Заслуженный участник


27/04/09
28128
Представьте, что вы — это та программа. Как бы вы раскрывали?

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

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

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

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

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

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

 Профиль  
                  
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 05:41 


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

 Профиль  
                  
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 06:41 
Аватара пользователя


20/10/12
308
А зачем на С, когда есть Perl, Python, и несколько свободных систем компьютерной алгебры?

 Профиль  
                  
 
 Re: Программное раскрытие скобок в уравнение
Сообщение02.08.2013, 11:23 
Заслуженный участник


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

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

 Профиль  
                  
 
 Re: Программное раскрытие скобок в уравнение
Сообщение08.08.2013, 10:59 


16/05/13
3
Sphinx Pinastri в сообщении #751216 писал(а):
А зачем на С, когда есть Perl, Python, и несколько свободных систем компьютерной алгебры?



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

-- 08.08.2013, 12:20 --

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

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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group