Вычисление производной произвольного порядка произведения двух функций - Lisp
Формулировка задачи:
Решение задачи: «Вычисление производной произвольного порядка произведения двух функций»
(defun deriv (f x) (cond ((numberp f) 0) ((eq f x) 1) ((eq (car f) '+) `(+ ,(deriv (cadr f) x) ,(deriv (caddr f) x))) ((eq (car f) '-) `(- ,(deriv (cadr f) x) ,(deriv (caddr f) x))) ((eq (car f) '*) `(+ (* ,(caddr f) ,(deriv (cadr f) x)) (* ,(cadr f) ,(deriv (caddr f) x)))) ((eq (car f) 'sin) `(* (cos ,(cadr f)) ,(deriv (cadr f) x))) ((eq (car f) 'cos) `(* (- (cos ,(cadr f)) ,(deriv (cadr f) x)))) ((eq (car f) 'exp) `(* (exp ,(cadr f)) (deriv (cadr f) x))) ((eq (car f) '^) `(* (* ,(caddr f) (^ ,(cadr f) (- ,(caddr f) 1))) ,(deriv (cadr f) x))))) ==> deriv (deriv '(^ (* 3 x) 5) 'x) ==> (* (* 5 (^ (* 3 x) (- 5 1))) (+ (* x 0) (* 3 1))) ;; d(3x^5)/dx=5*(3x^4)*3=15(3x)^4 (deriv '(sin (^ x 2)) 'x) ==> (* (COS (^ x 2)) (* (* 2 (^ x (- 2 1))) 1)) ;; d(sin(x^2))/dx= cos(x^2)*2x
Объяснение кода листинга программы
В данном коде представлена реализация вычисления производной произвольного порядка произведения двух функций в форме функции с именем deriv.
Функция принимает на вход три аргумента: f — функция, для которой вычисляется производная, x — точка, в которой вычисляется производная, и n — порядок производной.
Если f является числом, то возвращается 0, так как для числового значения не имеет смысла вычислять производную.
Если f равно x, то возвращается 1, так как производная единицы равна единице.
Если f является сложением (+) или вычитанием (-), то в соответствии с правилами дифференцирования вычисляются производные каждого из слагаемых и возвращается результат их сложения (или вычитания).
Если f является умножением (*), то в соответствии с правилами дифференцирования вычисляются производные каждого из множителей и возвращается результат их умножения.
Если f является возведением в степень (^), то в соответствии с правилами дифференцирования вычисляются производные каждого из множителей и возвращается результат их умножения, в который в качестве множителя включено выражение ^ с аргументами f, x, n, (- n 1).
Если f является синусом (sin) или косинусом (cos), то в соответствии с правилами дифференцирования вычисляется производная f(f(x)), где f — функция sin или cos соответственно.
Если f является экспонентой (exp), то в соответствии с правилами дифференцирования вычисляется производная f(f(x)), где f — функция exp соответственно.
В конце кода представлены тестовые вызовы функции deriv с целью вычисления производной функции (^ (* 3 x) 5) и функции sin(^ x 2).