Произведение полиномов в LISP
Формулировка задачи:
Всем привет, у меня проблема пишу задачу по умножению полиномов с учетом подбора подобных. Однако на последней стадии вышла проблема. У меня что-то не так работает. Отдельно создал функцию test и продвинулся чуть дальше, но недалеко.Вот как выглядят списки, используемые в test: DegTemp = [0 1 1 2], TempL3 = [16 12 32 24], DegL3 = [0 1 2]. В теории, то, что находится в функции test должно сравнивать степени полиномов (Все списки с приставкой Deg), однако вместо желаемого вывода: 16 44 24. Мне выводит 16 54 0. Голову ломаю второй день, буду благодарен за помощь.
Решение задачи: «Произведение полиномов в LISP»
textual
Листинг программы
(defun poly-prod (p1 p2) (let ((n1 (- (length p1) 1)) (n2 (- (length p2) 1)) (s 0) (k 0) (res nil)) (dotimes (i (+ n1 n2 1) (reverse res)) (setq s 0) (dotimes (j (+ i 1) t) (setq k (- i j)) (setq s (+ s (if (and (<= j n1) (<= k n2)) (* (nth j p1) (nth k p2)) 0)))) (push s res)))) (poly-prod '(1 1) '(1 1)) ;; (1+x)*(1+x) ==> (1 2 1) ;; 1+2x+x^2 (poly-prod '(1 1) '(1 -1)) ;; (1+x)*(1-x) ==> (1 0 -1) ;; 1-x^2 (poly-prod '(1 1) '(1 2 1)) ;; (1+x)*(1+2x+x^2) ==> (1 3 3 1) ;; (1+3x+3*x^2+x^3) (poly-prod '(1 1) '(1 3 3 1)) ;; (1+x)*(1+3x+3x^2+x^3) ==> (1 4 6 4 1) ;; 1+4x+6x^2+4x^3+x^4
Объяснение кода листинга программы
В представленном коде реализована функция poly-prod
, которая принимает два полинома в качестве аргументов и возвращает их произведение.
Полином представлен в виде списка, где каждый элемент - это коэффициент при соответствующей степени переменной x
. Например, полином (1 1)
представляет собой x + 1
.
Список переменных и значений, описанных в коде:
p1
иp2
- переменные, которые содержат полиномы, передаваемые в функциюpoly-prod
.n1
иn2
- переменные, которые содержат длину полинома (количество элементов в списке) и вычисляются с помощью функцииlength
.s
- переменная, которая используется для хранения промежуточных результатов.k
- переменная, которая используется для индексации элементов полинома.res
- переменная, которая используется для хранения результата произведения полиномов.i
иj
- переменные, которые используются для индексации элементов полинома в цикле.t
- переменная, которая используется в циклеdotimes
и передает значениеtrue
, обеспечивая бесконечное выполнение цикла.x
- переменная, которая используется для представления переменной в формулах. Код выполняет следующие действия:- Создает функцию
poly-prod
, которая принимает два полинома в качестве аргументов. - Инициализирует переменные
n1
,n2
,s
,k
иres
с начальными значениями. - Использует цикл
dotimes
, чтобы произвести умножение элементов полиномов, начиная с нулевого элемента и до тех пор, пока индекс не станет большеn1
илиn2
. - Внутри цикла
dotimes
используется еще один циклdotimes
, чтобы вычислить индексы элементов полинома, которые будут умножены. - Если индексы находятся в пределах допустимого диапазона, то выполняется умножение соответствующих элементов и результат добавляется в переменную
res
. - Результат произведения полиномов возвращается из функции
poly-prod
. Например, при вызове функцииpoly-prod '(1 1) '(1 2 1)
происходит умножение полиномовx + 1
иx + 2x + x^2
, что дает1 + 2x + x^2
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д