Форум программистов, компьютерный форум, киберфорум
Prolog
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
1

[SWI-Prolog] Умножение двух многочленов от одной переменной

15.04.2015, 14:02. Показов 2943. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравстуйте, подскажите пожалуйста по задачке: надо создать программу умножающая два многочлена от одной переменной. В сущности, получается можно использовать умножение двух списков.

Prolog
1
2
3
4
5
str([],L,L).
sum_str([],_,_):-write("Error"),nl,fail.
sum_str(_,[],_):-write("Error"),nl,fail.
sum_str([X],[Y],[R]) :- R = X*Y,!.
sum_str([X|L],[Y|L1],[H|T]) :- H = X*Y,sum_str(L,L1,T).
Возможно использовать такую функцию для умножения многочленов? Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2015, 14:02
Ответы с готовыми решениями:

Символьное умножение двух многочленов от одной переменной
Здравствуйте, помогите пожалуйста реализовать данный код на языке Haskell. (defun poly-add...

Программа символьного умножения двух многочленов от одной переменной
Программа символьного умножения двух многочленов от одной переменной. Желательно с описанием...

Умножение двух многочленов
Здравствуйте! Помогите умножить два многочлена вида: (a0 + a1x + a2x2 + ... + anxn) * (b0 + b1x +...

SWI-Prolog. Ошибка при обработке неконкретизированной переменной
Задание: расставить в ряд разноцветные многогранники. Условие: 1.Каждая фигра окрашена в один...

20
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
15.04.2015, 16:10 2
Цитата Сообщение от Ligeros Посмотреть сообщение
В сущности, получается можно использовать умножение двух списков.
- нет, это неправильный подход. Попробую реализовать...
0
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
15.04.2015, 17:21  [ТС] 3
Catstail, А если брать за основу символьное дифференцирование от одной переменной?
Prolog
1
2
3
4
5
6
7
8
d(X,X,1):-!.
d(C,X,0):-atomic(C).
d(~U,X,~A):-d(U,X,A).
d(U+V,X,A+B):-d(U,X,A),d(V,X,B).
d(U-V,X,A-B):-d(U,X,A),d(V,X,B).
d(C*U,X,C*A):-atomic(C),C\=X,d(U,X,A),!.
d(U*V,X,B*U+A*V):-d(U,X,A), d(V,X,B).
d(U/V,X,A):-d(U*V^(-1),X,A).
0
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
20.04.2015, 19:38  [ТС] 4
В общем, как я понял, что за пример надо брать тот, который я привел выше. Но вот понять не могу, как его заставить складывать многочлены.
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
20.04.2015, 21:10 5
Вот нормальное умножение полиномов (не очень уклюжее, но, вроде бы, работающее):

Prolog
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
domains
int=integer
intl=int*
 
predicates
len(intl,int)
elt(intl,int,int)
pcoeff(intl,intl,int,int,int)
coeff(intl,intl,int,int,int)
poly_mult(intl,intl,int,intl)
polymult(intl,intl,intl)
 
clauses
len([],0).
len([_|T],N) :- len(T,N1), N=N1+1.
 
elt([],_,0)    :- !.  
elt([X|_],0,X) :- !.
elt([_|T],N,X) :- N1=N-1, elt(T,N1,X).
 
pcoeff(PX,PY,I,J,Q) :- elt(PX,I,XX), elt(PY,J,YY), Q=XX*YY.
 
coeff(_,_,N,I,0)  :- I>N, !.
coeff(PX,PY,N,I,S)  :- J=N-I, pcoeff(PX,PY,I,J,Q), I1=I+1, coeff(PX,PY,N,I1,S1), S=S1+Q.
 
poly_mult(PX,PY,I,[])    :- len(PX,N1), len(PY,N2), N=N1+N2-2, I>N, !.
poly_mult(PX,PY,I,[Q|T]) :- coeff(PX,PY,I,0,Q), I1=I+1, poly_mult(PX,PY,I1,T). 
 
polymult(PX,PY,R) :- poly_mult(PX,PY,0,R).
polymult([1,1],[1,-1],Z) -> Z=[1,0,-1], что означает: https://www.cyberforum.ru/cgi-bin/latex.cgi?(1+x)(1-x)=1-{x}^{2}
polymult([1,1],[1,1],Z) -> Z=[1,2,1], что означает: https://www.cyberforum.ru/cgi-bin/latex.cgi?(1+x)(1+x)=1+2x+{x}^{2}

и т.д.
1
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
20.04.2015, 22:13  [ТС] 6
Catstail
Спасибо огромное. Я правильно понимаю, что в коде если 0 заменить на x например, то переменная будет x?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
21.04.2015, 10:47 7
Цитата Сообщение от Ligeros Посмотреть сообщение
Я правильно понимаю, что в коде если 0 заменить на x например, то переменная будет x?
- нет. Просто вычисляется список коэффициентов произведения. Переменная как таковая не нужна.
0
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
11.05.2015, 19:15  [ТС] 8
Catstail, А реально переписать эту программу под Лисп?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
11.05.2015, 22:53 9
Ligeros, задай вопрос в разделе Лисп, но по-человечески: один вопрос - одна тема (это правила форума).
1
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
12.05.2015, 20:42  [ТС] 10
Catstail, Спасибо, извиняюсь, что нарушаю

Добавлено через 11 часов 15 минут
Catstail, А если про теоретическую часть, то здесь упор на арифметические действия и операциями над списками?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
12.05.2015, 21:17 11
Ligeros, не столько арифметика, сколько алгебра полиномов.
1
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
13.05.2015, 11:31  [ТС] 12
Catstail, Спасибо большое

Добавлено через 14 часов 11 минут
Catstail, У меня возник вопрос: Что именно делает функция elt и реально заставить в ответе сложить все это?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
13.05.2015, 12:10 13
Предикат elt(Список,Позиция,Элемент) дает элемент списка, стоящий в данной позиции.

Цитата Сообщение от Ligeros Посмотреть сообщение
реально заставить в ответе сложить все это
- вопрос УБИЙСТВЕННЫЙ. Что ВСЕ ЭТО???
0
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
13.05.2015, 12:18  [ТС] 14
Цитата Сообщение от Catstail Посмотреть сообщение
- вопрос УБИЙСТВЕННЫЙ. Что ВСЕ ЭТО???
Цитата Сообщение от Catstail Посмотреть сообщение
polymult([1,1],[1,-1],Z) -> Z=[1,0,-1], что означает:
polymult([1,1],[1,1],Z) -> Z=[1,2,1], что означает:
Я задаю запрос, как Вы и показали, но в ответ идет не Z =[1,0,-1] или Z =[1,2,1], а Z=[0+1*1, 0+1*1+1*-1, 0+0*1*-1+1*0] и хотелось бы узнать, можно ли заставить выдавать ответ уже посчитанным, а не в таком виде?
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
13.05.2015, 12:22 15
Теперь понятно. Дело в том, что мой код работает в Турбо-Прологе. Тут нужно посоветоваться с тем, кто знаком со SWI-Прологом
0
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
13.05.2015, 12:23  [ТС] 16
Catstail, Получается если запустить на Турбо-Прологе, то результат выдаст нормальный
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36606 / 20334 / 4221
Регистрация: 12.02.2012
Сообщений: 33,653
Записей в блоге: 13
13.05.2015, 12:24 17
Ligeros, да, у меня работает.
1
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
13.05.2015, 12:25  [ТС] 18
Catstail, Спасибо, с этим вопросом стало понятно
0
Фрилансер
3705 / 2077 / 567
Регистрация: 31.05.2009
Сообщений: 6,683
13.05.2015, 23:28 19
Цитата Сообщение от Catstail Посмотреть сообщение
посоветоваться с тем, кто знаком со SWI-Прологом
Замените конструкции вида
Prolog
1
X = Y + Z,
на
Prolog
1
X is Y + Z,
2
1 / 1 / 0
Регистрация: 06.11.2013
Сообщений: 87
14.05.2015, 19:51  [ТС] 20
Black Fregat, Catstail, спасибо огромное

Добавлено через 9 часов 12 минут
Catstail,
Цитата Сообщение от Catstail Посмотреть сообщение
len(intl,int)
pcoeff(intl,intl,int,int,int)
coeff(intl,intl,int,int,int)
poly_mult(intl,intl,int,intl)
polymult(intl,intl,intl)
Можете пожалуйста объяснить какую функцию выполняют эти предикаты?
0
14.05.2015, 19:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2015, 19:51
Помогаю со студенческими работами здесь

Задача на создание списка из двух списков на SWI-prolog.
HELP!! Помогите решить задачу на SWI-prolog. Есть 2 списка, длина каждого кратна 2. Составить...

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

Описание класса многочленов от одной переменной
Здравствуйте! Помогите пожалуйста, нужно составить в lazarus приложение описание класса...

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

Составить описание класса многочленов от одной переменной
Составить описание класса многочленов от одной переменной, задаваемые степенью многочлена и...

Является ли векторным пространством множество многочленов от одной переменной
Задание во вложении. Если является, определить размерность и базис Прошу помощи, +100 к карме за...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru