Для того, чтобы найти производную функции
нужно написать в строке: f[x], x. Если Вам требуется
найти производную n-го порядка, то следует написать: f[x], {x, n}. В
том случае, если Вам требуется найти частную производную функции напишите в окне гаджета: f[x, y, z,…,t], j, где
— интересующая Вас переменная.
Select rating12345
Рейтинг: 3 (Голосов 1550)
Сообщить об ошибке
Смотрите также
Аналитическое вычисление производной функции на языке Scala / Хабр
Введение
Данный алгоритм реализован на языке Scala, характерной особенностью которого является использование case-классов, так удачно подходящих для написания алгоритма дифференцирования. В этой статье планируется описать лишь часть программы, содержащей алгоритм нахождения производной, поскольку разработка парсера для математических выражений это другая большая тема,
заслуживающая отдельной статьи
Подготовка
Сначала опишем структуру данных, в которой будет храниться исходная математическая функция. Опишем трейт
sealed trait MathAST
И его наследников:
sealed trait SingleToken extends MathAST{ val a: MathAST } sealed trait DoubleToken extends MathAST{ val a: MathAST val b: MathAST } sealed trait LeafToken extends MathAST
SingleToken будет реализовывать case-классы унарных операторов, таких как sin(a), -a, ln(a) и т. b и т.д.
LeafToken — «листья» дерева, т.е. константы, переменные и зарезервированные имена констант (число Пи и экспонента).
Опишем классы/объекты операторов и токенов:
case object Pi extends LeafToken case object Exponenta extends LeafToken case class Sin(override val a: MathAST) extends SingleToken case class Cos(override val a: MathAST) extends SingleToken … case class Mul(override val a: MathAST, override val b: MathAST) extends DoubleToken case class Add(override val a: MathAST, override val b: MathAST) extends DoubleToken … case class Differentiate(f: MathAST, dx: Variable) extends MathAST case class Variable(name: String) extends LeafToken case class Constant(value: BigDecimal) extends LeafToken
Обратите внимание на класс Differentiate, он имеет особую сигнатуру: f – исходная функция, dx – переменная, по которой происходит дифференцирование.
Теперь есть все, чтобы представить математическую функцию в виде дерева вычислений, для примера возьмем функцию: , которая примет вид:
Mul(Constant(BigDecimal(2)), Pow(x, Constant(BigDecimal(2)))
Конечно, чтобы получить дерево-выражение из обычной строки, введенной пользователем, нужно написать парсер, но, как было упомянуто выше, это уже другая тема.
Алгоритм нахождения производной
В основе которого лежат правила дифференцирования и таблица производных.
Опишем рекурсивную функцию, которая и будет преобразовывать исходную математическую функцию в результирующую функцию-производную:
def differentiate(f: MathAST)(implicit dx: String): MathAST
Аргумент dx, содержащий имя переменной (по которой происходит дифференцирование) помечен как неявный (implicit), это позволит не передавать ее в рекурсивные вызовы, пусть этим занимается компилятор.
На вход рекурсивной функции подается выражение — исходная функция
Примечание 1: Выражение может быть бинарным, унарным или токеном.
Примечание 2: Оператором может быть один из: «+», «-», «^», «*», «/», «abs», «sin», «cos», «tg», «ctg», «ln», «arcsin», «arccos», «arctg», «arcctg», «(», «)».
Примечание 3: Входные и выходные данные представлены в формате MathAST — дерево-выражение.
Общий алгоритм
В общем виде алгоритм слишком абстрактный, поэтому дальше разберем его подробнее.
- Рекурсивная функция получает на вход данные и используя сопоставление с образцом (pattern-matching) выполняет необходимые действия, в зависимости от типа данных.
- Функция высчитывает производную для входного выражения и возвращает выражение-результат. Может получиться, что аргументы a и/или b оказались не константой и не переменной, а сложной функцией u(x),
тогда понадобится рекурсивно посчитать еще и производную u’(x), т.е. вернуть [ differentiate(u(x)) ] — перейти к шагу 1 с новыми данными — u(x). - Если данные не корректны вернуть сообщение об ошибке.
Детали принципа работы и связь с математическими абстракциями
Функция приняла на вход данные — выражение-функцию, которую следует обработать в соответствии с правилами дифференцирования
Если бинарное выражение
Бинарные выражения помечены трейтом DoubleToken. »):
case Add(a, b) => Add(differentiate(a), differentiate(b)) case Sub(a, b) => Sub(differentiate(a), differentiate(b)) …
- Если оператор «+»: вернуть [ differentiate(a) + differentiate(b) ].
- Если оператор «-»: вернуть [ differentiate(a) — differentiate(b) ].
- Если оператор «*»: Умножение представляет из себя более сложный случай, операнды a и b могут быть константами или переменными (всего 4 комбинации: u(x)*c, u(x)*v(x), c*c, c*u(x)).
Функция анализирует какой из 4 вариантов попался и возвращает выражение используя правило дифференцирования № 1, № 3, и №5,
если один из операндов – сложная функция. Например: если a = u(x), а b = v(x), то вернуть [ differentiate(a) * b + a * differentiate(b)) ].
Приватный метод isDependsOnVar проверяет, зависит ли подвыражение от переменной, по которой производится дифференцирование.c, c=const Constant(BigDecimal(0)) }else Add(Mul(differentiate(a), b), Mul(a, differentiate(b))) }
Если унарное выражение
Классы SingleToken обрабатываются следующим образом:
case e: SingleToken => val d = e match { case Sin(x) => Cos(x) case Cos(x) => Usub(Sin(x)) case Tg(x) => Div(Constant(BigDecimal(1)), Pow(Cos(x), Constant(BigDecimal(2)))) … } if (isLeaf(e.a)) d else Mul(d, differentiate(e.a))
Оператор проверяется на соответствие одному из доступных операторов («sin», «-», «cos», …)
Для примера, оператор «sin»: вернуть [ cos(a) ], если a = x, если же a — сложная функция u(x), то вернуть [ cos(a) * differentiate(a) ].С остальными операторами происходят аналогичные действия, используя правило дифференцирования сложной функции и табличные правила взятия производной.
Отдельно следует рассмотреть оператор abs — модуль, поскольку его нет в таблице.
Приватный метод isLeaf выясняет сложная функция или нет, в первом случае нужно вернуть текущий результат умноженный на производную вложенной функции, а во втором просто вернуть текущий результат.
Если один токен
Речь идет о переменной или константе
case Variable(a) => if (a == dx) Constant(BigDecimal(1)) else Constant(BigDecimal(0)) case Constant(a) => Constant(BigDecimal(0)) case Pi | Exponenta => Constant(BigDecimal(0)) case _ => throw new AbstractEvaluateException("Differentiate: Wrong input data")
- Введены некорректные данные, вывести сообщение об ошибке и завершить работу.
- Если переменная (по которой осуществляется дифференцирование, например x), вернуть [ 1 ].
- Если константа, вернуть [ 0 ].
Напоследок добавим строку:
case Differentiate(_f, _dx) => differentiate(_f)(_dx.name)
Это на случай, если внутри функции есть вложенная производная, т.
c, c=const Constant(BigDecimal(0)) }else Add(Mul(differentiate(a), b), Mul(a, differentiate(b))) } case e: SingleToken => val d = e match { case Sin(x) => Cos(x) case Cos(x) => Usub(Sin(x)) case Tg(x) => Div(Constant(BigDecimal(1)), Pow(Cos(x), Constant(BigDecimal(2)))) case Ctg(x) => Usub(Div(Constant(BigDecimal(1)), Pow(Sin(x), Constant(BigDecimal(2))))) case Abs(x) => Div(x, Abs(x)) case Ln(x) => Div(Constant(BigDecimal(1)), x) case Sqrt(x) => Div(Constant(BigDecimal(1)), Mul(Constant(BigDecimal(2)), Sqrt(x))) case Usub(x) => Usub(differentiate(x)) case Arcsin(x) => Div(Constant(BigDecimal(1)), Sqrt(Sub(Constant(BigDecimal(1)), Pow(x, Constant(BigDecimal(2)))))) case Arccos(x) => Usub(Div(Constant(BigDecimal(1)), Sqrt(Sub(Constant(BigDecimal(1)), Pow(x, Constant(BigDecimal(2))))))) case Arctg(x) => Div(Constant(BigDecimal(1)), Sub(Constant(BigDecimal(1)), Pow(x, Constant(BigDecimal(2))))) case Arcctg(x) => Usub(Div(Constant(BigDecimal(1)), Sub(Constant(BigDecimal(1)), Pow(x, Constant(BigDecimal(2)))))) case _ => throw new AbstractEvaluateException(“Differentiate: Unknown unary operator”) } if (isLeaf(e.
a)) d else Mul(d, differentiate(e.a)) case Variable(a) => if (a == dx) Constant(BigDecimal(1)) else Constant(BigDecimal(0)) case Constant(a) => Constant(BigDecimal(0)) case Pi | Exponenta => Constant(BigDecimal(0)) case _ => throw new AbstractEvaluateException(“Differentiate: Wrong input data”) } private def isLeaf(e: MathAST): Boolean = e match { case Variable(_) | Constant(_) => true case Pi | Exponenta => true case _ => false } private def isDependsOnVar(tree: MathAST)(implicit dx: String): Boolean = tree match{ case e: DoubleToken => (e.a match { case Variable(name) => if(name == dx) true else false case _ => isDependsOnVar(e.a) })||(e.b match { case Variable(name) => if(name == dx) true else false case _ => isDependsOnVar(e.b) }) case e: SingleToken => isDependsOnVar(e.a) case Variable(name) => if(name == dx) true else false case _ => false } }
Заключение
Весь код исходников можно скачать на github’е, протестировать программу онлайн можно на сайте Калькулятор производных онлайн, приложение выполнено в виде REST сервиса и дополнено модулями упрощения выражений.
Список литературы
- Математический портал «mathprofi.ru» mathprofi.ru/slozhnye_proizvodnye_logarifmicheskaja_proizvodnaja.html
- Odersky M. «Programming in Scala (second edition)»
- Хостманн К. «Scala для нетерпеливых»
Онлайн-калькулятор производных
Калькулятор частных производных
Калькулятор производных вычисляет производную или частную производную функции f. Дополнительно калькулятор вычисляет градиент в 3D.
Поле ввода для вычисляемой функции. С помощью ‘ok’ введенная функция принимается. С помощью ∂/∂… можно получить соответствующие производные. Многократное применение приводит в каждом случае к производной функции-предшественника.
f(…) = 92)/cos(y)
cl
ok
Pos1
End
d n / dx n
∂ n / ∂x n
∂ n / ∂y n
∂ n / ∂z n
grad(f) ∇f
7
8
9
/
Δ
x
y
Z
4
5
6
*
ω
A
B
C
1
2
9 3–
3
9000-2
3
9000-2
3
9000-3
9000-(
)
.
A /5 x
A /5 x
A /5 x
A /5 x
A0005
σ
ASIN
ACOS
ATAN
x 2
A x
A / x+B
| x / x+B
|
Δ
SINH
COSH
A порядка+C / B порядка+C
A+X / B+Z
Z 2 –A
Z 2 –A
Z 2 –A
Z 2 –A
Z -A
Z / B+Z
Z / B+Z
/ z 2 +a 2
a / x+b
1+√y / 1-√y
E x SIN (Y) COS (Z)
√x+A
√E Aes
ex
ae-bx2+c
eax
aebx+c
eax2
1eax
xex
подробнее…Функция Описание 6sin(x) Синус x 1 90×2421 90×2421 90×24210250 Cosine of x tan(x) Tangent of x asin(x) arcsine acos(x) arccosine of x atan(x) арктангенс x atan2(y, x) Возвращает арктангенс частного своих аргументов. ch(x) Гиперболический косинус x sh(x) Гиперболический синус x pow(a, b) Power a b sqrt(x) Square root of x exp(x) e-function log( x), LN (x) Natural Logarithm Log (X, B) Logarithm to Base B Log2 (x), LB (x) (x), LB (x) 50250250250250250250250250250250250250250250250250250250250250250250250250250250250241(x), LB (x) 1 (x). log10(x), ld(x) Логарифм по основанию 10 Краткие правила вывода
Факторное правило: Постоянный множитель сохраняется при дифференцировании
(a⋅f)′=a⋅f′
Правило сумм: При выводе суммы слагаемые могут быть получены индивидуально
(f1+f2)′=f1′+f2′
Правило произведения: Правило получения произведений
(u⋅v)′=u′⋅v+u⋅v′
Правило частных: Правило вывода частных
(uv)′=u′⋅v-u⋅v′v2
Цепное правило: Вложенные функции превращаются в произведение внутренних и внешних производных при дифференцировании
(f(g(x))′=f′(g)⋅g′(x)
Основные производные:
ddxConst.
=0
ддхх=1
ddxxn=n⋅xn-1
Производная n-го корня:
ddxxn=ddxx1n=1n⋅x1n-1=1n⋅x1-nn=1n⋅x1-nn=1n⋅xn-1n
Вывод квадратного корня:
ддхх=12⋅х
Получение кубического корня:
ddxx3=ddxx13=13⋅x13-1=13⋅x23
Вывод тригонометрических функций:
ddxsin(x)=cos(x)
ddxcos(x)=-sin(x)
ddxsin(kx)=kcos(kx)
ddxcos(kx)=-ksin(kx)
ddxtan(x)=ddxsin(x)cos(x)=1cos2(x)
Выводы e-функции:
ddxex=(ex)′=ex
ddxeax=(eax)′=aeax
ddxeax2=(eax2)′=2axeax2
ddx1ex=(1ex)′=(e-x)′=-e-x=-1ex
ddxeln(x)=(eln(x))′=(x)′=1
ddxexn=(exn)′=nxn-1exn
ddx(ex)n=((ex)n)′=(enx)′=nenx
Вывод логарифмических функций:
ddxln(x)=1x
ddxloga(x)=1xloga(e)
Частные производные
Для функций с более чем одной переменной производная одной из переменных называется частной производной.
Для функции с переменной x и несколькими другими переменными частная производная по x записывается следующим образом.
∂∂xf(x,y,…)
При частичном выводе остальные переменные рассматриваются как константы.
Nth Калькулятор производной + онлайн-решатель с бесплатными шагами
Рисунок 1
Калькулятор $nth$ производной используется для вычисления $nth$ производной любой заданной функции. Калькуляторы этого типа позволяют довольно легко выполнять сложные дифференциальные вычисления, вычисляя ответ производной за считанные секунды. 9{n}} \]
Что такое калькулятор производных $Nth$?
Калькулятор $n-й$ производной — это калькулятор, который используется для вычисления $n-ной$ производной функции и для вычисления производной более высокого порядка .
Этот калькулятор избавляет от необходимости вручную вычислять производную любой заданной функции $n$ раз.
Часто мы сталкиваемся с некоторыми функциями, для которых вычисления производной становятся довольно длинными и сложными, даже для первой производной.
Калькулятор производной $nth$ — это идеальное решение для вычисления производных для таких функций, где $n$ может быть $3$, $4$ и так далее.
Взятие итерационных производных функции помогает предсказать поведение функции во времени, что имеет большое значение, особенно в физике. Калькулятор производных $nth$ может оказаться очень удобным в таких ситуациях, когда необходимо определить изменяющееся поведение функции.
Как пользоваться калькулятором производных $Nth$
Калькулятор производных $nth$ очень прост в использовании. Помимо быстрых вычислений, лучшей особенностью калькулятора производных $nth$ является удобный интерфейс .
Рисунок 2 Формула n-й производной
Этот калькулятор состоит из двух полей: одно для ввода числа раз, которое необходимо вычислить производную, т. е. $n$, а другое для добавления функции. Прямо под этими полями находится кнопка « Отправить » , которая дает ответ при нажатии.
Ниже приведено пошаговое руководство по использованию калькулятора производной $n$:
Шаг 1:
Проанализируйте свою функцию и определите значение $n$, для которого необходимо вычислить производную.
Шаг 2:
Вставьте значение $n$ в первое поле. Значение $n$ должно лежать в области действительных чисел. Это значение соответствует количеству разностных итераций, которые необходимо выполнить для функции.
Шаг 3:
В следующем поле введите вашу функцию $f(x)$. Нет ограничений на тип функции, которую необходимо вычислить.
Шаг 4:
После того, как вы ввели значение $n$ и свою функцию, просто нажмите кнопку с надписью «Отправить ». Через 2-3 секунды ваш решенный ответ появится в окне под полями.
Решенные примеры
Пример 1:
Вычислить первую, вторую и третью производную функции, приведенной ниже: 9{2} -3x) \]
Подставив значение $n$ и $f(x)$ в калькулятор производной $nth$, мы получим следующий ответ:
\[ f”'(x) = 72x \]
Пример 2:
Найдите производную 7-го порядка следующей функции:
\[ f(x) = x.