Common Lisp - символьный полиномиальный расчет

Я хотел бы выполнить некоторые символические вычисления на lisp. Я нашел полезную производную функцию и хотел бы знать, как написать простую рекурсивную функцию для добавления /substract/etc. многочлены.

Вход (например): (addpolynomial '(+ (^ (* 2 x) 5) 3) '(+ (^ (* 3 x) 5) (^ (* 3 x) 2)))

Выход: (+ (^ (* 5 x) 5) (^ (* 3 x) 2)) 3)

Ты знаешь как это сделать? Или, может быть, вы знаете другие примеры символических расчетов?

1 ответ

Решение

Когда в прошлом я имел дело с полиномами в Лиспе, я использовал массивы чисел (позволяя предположить переменную, что означает, что у меня не может быть тривиальных вещей типа "x*x + y", но так как я не это не нужно...).

Это позволяет вам представить "2x^5 + 3" как #(3 0 0 0 0 2), найдя множитель х ^ п (aref poly n) и другие удобные операции.

Это также позволяет определить сложение как (map 'vector #'+ ...) (умножение требует немного больше работы).

Другие вопросы по тегам