|
|
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Добрый день! Ситуация такая: есть формула вида Код: plaintext Необходимо каким-то образом получить ее от пользователя, распознать и далее работать с ней, вычислять результаты, подбирать решения и т.д. Я придумал такой вариант (на картинке): вводятся коэффициенты, выбирается или пропускается функция и нажимается кнопка "Add", которая запоминает данное слагаемое. Правая часть вводится отдельно. Но процесс распознавания и работы с функцией мне пока представляется смутно, единственный выход, который я вижу, цепочка case'ов вида Код: plaintext 1. 2. 3. 4. 5. 6. Есть подозрение, что я изобретаю велосипед или просто делаю что-то не верно. Буду благодарен за советы и подсказки по данной проблеме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 07:43:43 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Если требуется вычисление и/или поиск корней/экстремумов/etc численными методами, то можно взять книжку Б. Страустрапа, "ЯП C++" и расширить необходимыми функциями уже имеющуюся там готовую простую реализацию компилирующего парсера и быстрого вычислителя арифметических выражений произвольной сложности. Если алгоритмы сильно завязаны на аналитическое представление и специальную структуру функции -- вероятно, придется придумывать что-то свое... И лучше сразу вооружиться учебником матана. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 08:37:45 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
читаем про обратную польскую запись 4 8 15 16 23 42 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 09:35:25 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Взять Maple или MathCAD - в них все написать, а вход-выход на своем инстр. прогр-ия. Любые формулы записываются и вычисл. в них, а результат экспортир. в свою программу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:19:35 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
если необходимо основательное решение, то можно спросить у А. В. Ахо, Р. Сети, Д. Д. Ульман. "Компиляторы: принципы, технологии и инструменты" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:28:48 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Дональдак(слагаемые простые, например, 5sin3x, x^3 и т.д., т.е. слагаемых вида sin(cos(lg(x))) нет). Плохие новости: 5sin3x не особо-то проще, чем sin(cos(lg(x)))... дерево выражения у него даже посложнее (две двухместных функции и одна одноместная против трех одноместных). Если реализация обязательно на С++, то без относительно полноценного парсера не обойтись. boost::spirit может сильно помочь. ну и гугл, конечно, тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 11:45:04 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Дональдак, Недавно где то видел готовый парсер. Сейчас пытался найти - но чего -то не находится. Вы определенно изобретаете велосипед. Поищите готовое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 12:55:29 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
SQL_LamerДональдак, Недавно где то видел готовый парсер. Сейчас пытался найти - но чего -то не находится. Вы определенно изобретаете велосипед. Поищите готовое решение.Каждый программист в своей жизни должен написать математический парсер! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 12:58:14 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за советы! Сейчас их все обдумаю, попробую найти информацию. Эта часть работы не является основной, поэтому можно обойтись без по настоящему глобального решениея. Наиболее привлекательным пока мне видится работа с маткадом, но такого опыта у меня нет. А на сколько сложна работа с маткадом из своего приложения в таком ключе? Т.е. на вход функция, значения аргументов, на выходе - результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 13:01:56 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
SQL_Lamer, спасибо, я попробую, конечно его найти! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 13:02:58 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Яростный МечSQL_LamerДональдак, Недавно где то видел готовый парсер. Сейчас пытался найти - но чего -то не находится. Вы определенно изобретаете велосипед. Поищите готовое решение.Каждый программист в своей жизни должен написать математический парсер! Что то есть в этом конечно. Но такие высказывания порой пугают: "Каждый программист должен написать мат. парсер" "Каждый программист должен перекомпилировать ядро Линукс" "Каждый программист должен написать свой компилятор" и т. д. Так жизни не хватит на все ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 13:18:30 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Нашел решение на одном из сайтов, пример взят из Страуструпа, на первый взгяд. вполне удовлетворяет моим пожеланием. Он работает с функциями почти любого вида. На вход можно подать строку вида, например, Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 14:00:47 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Дональдак Наиболее привлекательным пока мне видится работа с маткадом, но такого опыта у меня нет. А на сколько сложна работа с маткадом из своего приложения в таком ключе? Т.е. на вход функция, значения аргументов, на выходе - результат. В каждом матпакете есть средства интегрирования с разными языками программирования. Взять и попробовать, оценивая насколько сложно. Объявлено в релизах MATLAB, что вообще можно транслировать программу на языке MATLAB в программу на C++. И более - компилятор MATLAB вообще интегрируется в среду Microsoft Visual Studio. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 15:38:46 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
А название темы прикольное ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2009, 18:27:40 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
ДональдакНашел решение на одном из сайтов, пример взят из Страуструпа, на первый взгяд. вполне удовлетворяет моим пожеланием. Он работает с функциями почти любого вида. На вход можно подать строку вида, например, Код: plaintext ну а в чем вопрос? см. мой вышеозвученный пост ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2009, 09:25:25 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Когда-то на Фортране пришлось делать для обработки больших массивов данных по матстатистике. Схема такая: 1. Создается лексический анализатор с конечным автоматом распознавания констант и с распознавателями определенного набора функций. 2. Придумывается некий псевдокод для функций, скобок, констант и прочего. 3. Создается подобие примитивного компилятора, который укладывает арифметическое выражение в обратную польскую запись. 4. Отдельно создается вычислитель псевдокода. Прога спрашивает пользователя, чего он хочет вычислить, затем обращается к пп.1-3. Получив результат в виде псевдокода, прога для обработки массива запускает в цикле (циклах) вторую часть - вычислитель выражения на основании аргументов массива с примитивным обработчиком всяких особых случаев. По данной схеме была достигнута высокая скорость обработки, оставив далеко позади кучу ранее сделанных попыток, работавших правильно, но ужасно медленно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 18:45:08 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Еще добавлю - для п.3 необходимо создать механизм магазинной памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2009, 18:49:02 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Яростный МечSQL_LamerДональдак, Недавно где то видел готовый парсер. Сейчас пытался найти - но чего -то не находится. Вы определенно изобретаете велосипед. Поищите готовое решение.Каждый программист в своей жизни должен написать математический парсер! Ага а еще каждый мужык должен в своей жизни ... ммм как там было Построить дом Посадить дерево Вырастить сына Ну кому то нравится вариант с тещами и печенью - но суть одна - будете писать парсер на вышеупомянутое времени не хватит :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2009, 09:26:01 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Aklin J, читаю сейчас в википедии об этом. Просто сначала хотел пойти простым путем, но к сожалению все они оказались слишком медленными. Моя программа в среднем делает десятки тысяч итераций, на каждой вычисляя значения одних и тех же функций, а те готовые реализации, которые я нашел в интернете или каждый раз заново распознают функцию, или просто работают слишком тихо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2009, 19:17:55 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
Тогда можно воспользоваться C#/VB# с их Reflection.Emit или даже cc/javac c банальной записью исходника в файл. :) Но огромного ускорения ожидать не стоит: вычислитель Страустрапа из ненужных накладных расходов имеет только вызовы функций. Их устранение даст гораздо меньший эффект, чем матан с чисметом, если, конечно, в этих дисциплинах вообще известны методы решения ваших задач с большим порядком скорости... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2009, 21:22:19 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
рекурсивный парсер от силы 300-400 строчек кода и день другой работы, что за паника у здешней публики, не понимаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2009, 22:13:56 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
PC_2рекурсивный парсер от силы 300-400 строчек кода и день другой работы лол. открой для себя уже алгоритм Дейкстры наконец, он не такой уж и новый чтобы о нем не слышать, и прекрати изобретать кривые гигантские нестабильные велосипеды, вымогая деньги за целых один-два рабочих дня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2009, 22:21:08 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
паникерPC_2рекурсивный парсер от силы 300-400 строчек кода и день другой работы лол. открой для себя уже алгоритм Дейкстры наконец, он не такой уж и новый чтобы о нем не слышать, и прекрати изобретать кривые гигантские нестабильные велосипеды, вымогая деньги за целых один-два рабочих дня. я так не считаю. Здесь человеку наверно для курсового или еще для чего ( ну не задали же ему писать коммерческий компилятор ! ) нужно обычный парсер написать. Так вы на него накинулись в соревнованиях кто моднее слова знает. Ну возьмите предложите ему еще несколько томов Кнута прочитать, с Дейкстером разобраться, скурить книгу Страуструпа. Лекари, с таким лечением у человека начисто отбиваете желание чтото написать, развиваете панику, а зачот или что там еще должен быть сдан в срок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2009, 22:32:23 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
никто не слышал про bison и lex? десять минут набора для поставленной задачи правда разбираться с ними придется месяц но это один раз и и оправдается в многократном размере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 17:14:37 |
|
||
|
Работа с простыми мат. выражениями
|
|||
|---|---|---|---|
|
#18+
PC_2я так не считаю. Здесь человеку наверно для курсового или еще для чего ( ну не задали же ему писать коммерческий компилятор ! ) нужно обычный парсер написать. Так вы на него накинулись в соревнованиях кто моднее слова знает. Ну возьмите предложите ему еще несколько томов Кнута прочитать, с Дейкстером разобраться, скурить книгу Страуструпа. Лекари, с таким лечением у человека начисто отбиваете желание чтото написать, развиваете панику, а зачот или что там еще должен быть сдан в срок. Какие к черту несколько томов, о том и речь, что алгоритм Дейкстры - это простейшая штуковина на 1 (один!) экран псевдокода, позволяющая делать разборы выражений любой сложности с учетом приоритета операторов, содержащие многоаргументные функции и так далее. И стек он использует в простом явном виде. Так что со своей рекурсией и 300-400 строками кода (кривым разваливающимся огромным велосипедом) отбиваете желание что-либо делать именно вы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 17:38:45 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35884375&tid=1344520]: |
0ms |
get settings: |
4ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
164ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 192ms |
| total: | 418ms |

| 0 / 0 |
