Вычисление производной произвольного порядка произведения двух функций - Lisp

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Я недавно начал изучать Lisp, пробую писать простые программы в Corman Common Lisp. Сейчас мне задали такое задание: 1. Используя формулу дифференцирования произведения двух функций или их свойства записать выражение для производной произвольного порядка произведения двух функций согласно варианту. 2. Используя стандартные правила обозначения начертить блок – схему алгоритма символьного дифференцирования основанную на полученной формуле. 3. На основе полученного алгоритма записать текст программы на языке LISP. 4. Отладить полученную программу и представить ее работу при защите РГЗ. 5. Сделать выводы. Функции следующие Скажите, пожалуйста как можно написать такую программу на Lisp? Не могли бы Вы посоветовать мне учебники, в которых есть примеры написания подобных программ? С уважением,

Решение задачи: «Вычисление производной произвольного порядка произведения двух функций»

textual
Листинг программы
(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).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы