Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

Интегральный синус

16.05.2014, 19:50. Показов 1695. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый.
Собственно, элементарная программа рассчета интегрального синуса, но что-то у меня руки-крюки
Хотел использовать рекуррентную формулу
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{0} = x
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = -{a}_{n} * {x}^{2}* \frac{2n+1}{{2(2n+3)}^{2}(n+1)}
Но программа не работает. Подскажите, где косяк? Заранее спасибо.

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
predicates  
    si(real, real, integer, real,real).
    si(real, integer, real).
clauses
    si(X, N, R) :- si(X, X, N, 0, R).
    si(_, _, 0, R, R) :- !.
    si(X, A, N, Temp, R) :-     X2 = X*X,
                        A1 = 2*N+1,                     
                        A2 = 2*N+3,
                        N1 = N + 1,
                        NM1 = N - 1,
                        A3 = 2*A2*A2*N1,
                        
                        AL = -A*X2*A1/A3,
                        R = Temp + AL,
                        si(X,AL,NM1,R,R).
Добавлено через 13 минут
Хотя я тут посмотрю, вообще косяков миллион, например считаем старшие N для младших степеней...

Есть какой-то более адекватный способ, чем лепить предикат с миллионом аргументов?..

Добавлено через 18 часов 53 минуты
Исправленная программа в первом приближении работает ожидаемо, но вот при N > 2 почему-то отказывается выдавать результат. Как дебажить пролог-программы понятия не имею. Есть варианты?..
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
predicates  
    si(real, real, integer, integer, real, real).
    si(real, integer, real).
clauses
    si(X, N, R) :- si(X, X, 1, N, X, R).
    si(_, _, N, N, R, R) :- !.
    si(X, A, CurN, N, PrevR, R) :-  X2 = X*X,
                        A1 = 2*CurN+1,                      
                        A2 = 2*CurN+3,
                        N1 = CurN + 1,
                        A3 = 2*A2*A2*N1,
                        
                        AL = -A*X2*A1/A3,
                        R = PrevR + AL,
                        si(X,AL,N1,N,R,R).
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.05.2014, 19:50
Ответы с готовыми решениями:

Интегральный синус
Ребята пожалуйста объясните, только как можно подробнее почему интеграл от 0 до бесконечности sin(x)/x dx равен pi/2???

Вычислить интегральный синус
Помогите решить. \int_0^x\,\frac{\sin t}{t}\,\operatorname{d}t=\sum_{n=0}^\infty \frac{(-1)^nx^{2n+1}}{(2n+1)(2n+1)!} ...

Интегральный синус и косинус
помогите решить определенный интеграл (cos(x)/(4x+3)^2)dx c пределами интегрирования от 0.1 до 2.1

6
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38193 / 21126 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
16.05.2014, 20:05
Цитата Сообщение от Psilon Посмотреть сообщение
Как дебажить
- в ТП можно попробовать вставить отладочную печать. Или включить трассировку.
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2014, 20:47  [ТС]
Catstail, мда, после нормальных IDE, мысль об отладочной печати даже в голову не пришла

спасибо, действительно, надо попробовать.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2014, 22:09  [ТС]
Кто может подсказать, пишу
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
predicates  
    si(real, real, integer, integer, real, real).
    si(real, integer, real).
clauses
    si(X, N, R) :- si(X, X, 0, N, X, R).
    si(_, _, N, N, R, R) :- !.
    si(X, A, CurN, N, PrevR, R) :-      
                        X2 = X*X, write("X2= ") ,write(X2),write(" "),              
                        A1 = 2*CurN+1, write("A1= ")    ,write(A1),write(" ")   ,               
                        A2 = 2*CurN+3,write("A2= ") ,write(A2),write(" ")   ,   
                        N1 = CurN + 1,write("N1= ") ,write(N1),write(" ")   ,   
                        A3 = 2*A2*A2*N1,write("A3= ")   ,write(A3),write(" "),      
                        
                        AL = -A*X2*A1/A3,write("AL= ")  ,write(AL),write(" ")   ,   
                        R = PrevR + AL,write("R= ") ,   write(R), nl,
                        si(X,AL,N1,N,R,R).
вывод такой:

почему он дальше не считает и говорит NO SOLUTION?..
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.05.2014, 22:18  [ТС]
То есть теоретически он должен сложить верхний R и нижний AL, получаем нижний R.

Добавлено через 3 минуты
Даже такой код:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
predicates  
    si(real, real, integer, integer, real, real).
    si(real, integer, real).
clauses
    si(X, N, R) :- si(X, X, 0, N, X, R).
    si(_, _, N, N, R, R) :- !.
    si(X, A, CurN, N, PrevR, R) :-      
                        X2 = X*X,           
                        A1 = 2*CurN+1,          
                        A2 = 2*CurN+3,  
                        N1 = CurN + 1,
                        A3 = 2*A2*A2*N1,
                        
                        AL = -A*X2*A1/A3,
                        write("PrevR= ")    ,write(PrevR),write(" || ") ,   
                        Temp = PrevR + AL, write("Temp= ")  ,write(Temp),
                        write(" |---| ")    ,
                        R = Temp, write("R= ")  ,   write(R), nl,
                        si(X,AL,N1,N,R,R).
он корректно считает Temp, но не может сделать R = temp...
0
Фрилансер
 Аватар для Black Fregat
3709 / 2083 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
17.05.2014, 00:40
Лучший ответ Сообщение было отмечено Psilon как решение

Решение

Вы перепутали "итоговый" R, который должен получиться в результате, который сопоставляется один раз в первом правиле по достижении конца цикла, и "новый" R, который вычисляется заново на каждом шаге. Они обозначены одной и той же буквой R, а это неправильно. Нужно разнести примерно так:
Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
predicates  
    si(real, real, integer, integer, real, real).
    si(real, integer, real).
clauses    si(X, N, R) :- si(X, X, 0, N, X, R).
    si(_, _, N, N, R, R) :- !.
    si(X, A, CurN, N, PrevR, R) :-      
                        X2 = X*X, write("X2= ") ,write(X2),write(" "),              
                        A1 = 2*CurN+1, write("A1= ")    ,write(A1),write(" ")   ,               
                        A2 = 2*CurN+3,write("A2= ") ,write(A2),write(" ")   ,   
                        N1 = CurN + 1,write("N1= ") ,write(N1),write(" ")   ,   
                        A3 = 2*A2*A2*N1,write("A3= ")   ,write(A3),write(" "),      
                        
                        AL = -A*X2*A1/A3,write("AL= ")  ,write(AL),write(" ")   ,   
                        NewR = PrevR + AL,write("NewR= ") ,   write(NewR), nl,
                        si(X,AL,N1,N,NewR,R).
3
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.05.2014, 11:22  [ТС]
Black Fregat, огромное спасибо, буду знать! )

Добавлено через 1 минуту
посмотрел код, понял ошибку. Еще раз спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2014, 11:22
Помогаю со студенческими работами здесь

Вычислить интегральный синус. Значение x вводить в память
Si(x)=\int_{0}^{x}\frac{sin(t)}{t}dt Значение x вводить в память

Интегральный признак Коши(радикальный,интегральный)
Кому несложно помогите пожалуста решить,ибо в матиматике полный 0

Синус, который не похож на синус
f = 120e+6; t=-10e-6:1/f:10e-6; y = 2048*sin(2*pi*f*t); plot(t,y) Получаем нечто, как на картинке. Как я понимаю, чтобы от...

Интегральный множитель
(\frac{2y}{{x}^{3}}+ycos(xy))dx+(\frac{1}{x^2}+xcos(xy))dy=0

Интегральный логарифм
Здравствуйте! Возникла тут у меня необходимость посчитать интегральный логарифм, Li(x)=\int_{0}^{x}\frac{dt}{ln(t)} и даже в хелпе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru