Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > [C]Символьный решатель интегралов


Автор: Пингвина 15.11.2006, 16:25
вот задали курсовую написать... хорошо бы, если бы помогли. нигде ничего в инете найти не могу! помогите, что ли...

Автор: Partizan 15.11.2006, 16:28
ну а что... алгоритм прост....
1. нужен анализатор(парсер) математического выражения....можно использовать обратную польскую нотацию см www.algolist.ru

2. используешь численные методы нахождения интегралов....

Автор: Sartorius 15.11.2006, 17:57
Partizan,  как я понял ("символьный решатель интегралов") человеку нужно не определенный интеграл численно посчитать,  а найти вид первообразной ф-ии (для простых случаев) .

Пингвина,  так??? smile 

Автор: Partizan 15.11.2006, 18:53
Sartorius,  =) ну если так , то задача сводится к вбиванию "базы" простых первообразных =)

Автор: IvanoffAndrey 15.11.2006, 21:02
Вспомнил - данный пример разобран в Книге Архангельского "Приемы программирования в Delphi 5-7" - прямо есть то что нужно. Если книгу в нете не найдешь отпишись помагу.

Автор: Пингвина 17.11.2006, 20:03
Partizan,  да, именно это препод и хочет увидеть

Добавлено @ 20:04 
Partizan,  если бы еще показали как это будет выглядеть! и еще вывод результата как написать????????

Автор: Partizan 17.11.2006, 22:19
и всё -таки что конкретно от вас хотят?

Цитата


1. нужен анализатор(парсер) математического выражения....можно использовать обратную польскую нотацию см www.algolist.ru

2. используешь численные методы нахождения интегралов....

или
Цитата

ну если так , то задача сводится к вбиванию "базы" простых первообразных =)

Автор: albertn 18.11.2006, 15:25
Цитата(Partizan @  15.11.2006,  18:53 Найти цитируемый пост)
Sartorius,  =) ну если так , то задача сводится к вбиванию "базы" простых первообразных =)
А смысл?
Не все так просто. Можно конечно записать несколько частных случаев интегралов и потом их разбирать, но это глупо, и не правильно.
Можешь попробывать приконнектиться к мепловской либе, и будет счастье
А вообще лучше писать сразу на мэпле, и не мучаться smile

Автор: Partizan 19.11.2006, 18:53
Цитата(albertn @ 18.11.2006,  15:25)
Цитата(Partizan @  15.11.2006,  18:53 Найти цитируемый пост)
Sartorius,  =) ну если так , то задача сводится к вбиванию "базы" простых первообразных =)
А смысл?
Не все так просто. Можно конечно записать несколько частных случаев интегралов и потом их разбирать, но это глупо, и не правильно.
Можешь попробывать приконнектиться к мепловской либе, и будет счастье
А вообще лучше писать сразу на мэпле, и не мучаться smile

albertn
Цитата

Partizan,  как я понял ("символьный решатель интегралов") человеку нужно не определенный интеграл численно посчитать,  а найти вид первообразной ф-ии (для простых случаев) .

Автор: Пингвина 23.11.2006, 17:02
могу пример привести:
на ввод: 3*(x**2)+(x**3-x)*(x-1)
должно вывести: 6*x+(3*x-1)*(x-1)+(x**3-x)*1  ну или что-то вроде этого smile

Добавлено @ 17:03 
не правильно я вывод написала!))))) это я производную написала....

Добавлено @ 17:04 
короче, в выводе должна быть первообразная

Автор: albertn 23.11.2006, 17:12
А какие то возможны функции (sin, cos, ln, tg, exp, ...), или только числа, x, арифметические операции, скобки и возведение в степень?

Добавлено @ 17:19 
Если так, то все оказывается несложным. Вот необходимая структура алгоритма:
  • Считывание с клавиатуры или с других источников данных исходного выражения
  • Раскрытие скобок
  • Разбиение по суммам (разностям)
  • Анализ каждого элемента. Он должен иметь структуру a*x**n
  • Нахождение первообразной a*x**n. (элементарно)
  • Запись полученных первообразных в инфиксной форме записи
  • Соединение полученных первообразных при помощи соответствующих знаков (сумма-разность)
  • Вывод полученного выражения на экран (или куда надо)

Автор: Пингвина 24.11.2006, 19:32
там должны участвовать и синусы, и косинусы, и логарифмы...
и еще хотелось бы в программном виде увидеть ввод, вывод на экран и хотябы пару примеров с син и со степенью! smile 

Автор: JackYF 24.11.2006, 19:41
Ага, а мне интересно, как программно вы будете брать интегралы типа x*log(x), x*x*sin(x) и т.д.
Не думаю, что это можно быстро запрограммить.
Те интегралы, что я назвал, берутся по частям( иногда даже не один раз ).
Не представляю себе, как нормально это программно реализовать - можно теоретически, но уж очень геморно...

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

Добавлено @ 19:43 
А если потребуется замена переменной, то там вообще ... !

Автор: Пингвина 27.11.2006, 09:05
спасибо, прямо обнадежили! можете, хотябы, для простых полиномов и синусов, косинусов написать?? smile 

Автор: Silver 27.11.2006, 10:18
Первые программы символьного интегрирования были написаны еще в начале 60 - ых.
Для интеграла там строилось последовательное дерево решений...на каждом узле дерева  применялись различные методов интегрирования ...
Данная задача скорее всего решаеться с использованием продукционной системы правда когда неизвестен конечный результат. (продукционные экспертные системы)  это один из методов ИИ. Используються те же методики что и вмашинном доказательстве теорем. Основная трудность избежать зацикливания.

Автор: JackYF 27.11.2006, 14:35
Цитата(Пингвина @  27.11.2006,  09:05 Найти цитируемый пост)
спасибо, прямо обнадежили! можете, хотябы, для простых полиномов и синусов, косинусов написать?? smile  


Вначале весь интеграл представляешь как сумму разных интегралов, где каждый меньшее подинтегральное выражение может быть либо полиномом, либо a*sin(nx), либо a*cos(nx).

a*sin(nx) -> -(a/n)cos(nx)
a*cos(nx) -> (a/n)sin(nx)
Для полинома интеграл тебе уже написали раньше.

Дальше вычисленные интегралы опять превращаешь в сумму и получаешь одно больше выражение - интеграл.

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

Автор: Пингвина 27.11.2006, 16:16
если не трудно, на СИ можете мне написать ввод интеграла, преобразование его в то, с чем мне уже надо работать и вывод результата! мне почему-то это в голову не приходит smile 

Автор: _hunter 27.11.2006, 16:28
ты разделом ошибся. код пишут в разделах работа/цент помощи

Автор: Пингвина 28.11.2006, 09:38
плохо, что здесь так помогают... еще и посылают((

Добавлено @ 09:39 
видимо действительно ошиблась

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)