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 #'+ ...)
(умножение требует немного больше работы).