Этот пример показывает, как аналитически найти и оценить производные с помощью Symbolic Math Toolbox™. В примере вы будете находить 1-ю и 2-ю производную f (x) и использовать эти производные, чтобы найти локальные максимумы, минимумы и точки перегиба.
Вычисление первой производной выражения помогает вам найти локальные минимумы и максимумы того выражения. Прежде, чем создать символьное выражение, объявите символьные переменные:
syms x
По умолчанию решения, которые включают мнимые компоненты, включены в результаты. Здесь, рассмотрите только действительные значения x
путем установки предположения, что x
действителен:
assume(x, 'real')
Как пример, создайте рациональное выражение (т.е. часть, где числитель и знаменатель являются многочленными выражениями).
f = (3*x^3 + 17*x^2 + 6*x + 1)/(2*x^3 - x + 3)
f =
Графический вывод этого выражения показывает, что выражение имеет горизонтальные и вертикальные асимптоты, локальный минимум между-1 и 0, и локальный максимум между 1 и 2:
fplot(f) grid
Чтобы найти горизонтальную асимптоту, вычислите пределы f
для x
, приближающегося к положительным и отрицательным бесконечностям. Горизонтальной асимптотой является y = 3/2
:
lim_left = limit(f, x, -inf)
lim_left =
lim_right = limit(f, x, inf)
lim_right =
Добавьте эту горизонтальную асимптоту в график:
hold on plot(xlim, [lim_right lim_right], 'LineStyle', '-.', 'Color', [0.25 0.25 0.25])
Чтобы найти вертикальную асимптоту f
, найдите полюса f
:
pole_pos = poles(f, x)
pole_pos =
Аппроксимируйте точное решение численно при помощи функции double
:
double(pole_pos)
ans = -1.2896
Теперь найдите локальный минимум и максимум f
. Если точка является локальным экстремальным значением (или минимум или максимум), первая производная выражения в той точке равна нулю. Вычислите производную f
с помощью diff
:
g = diff(f, x)
g =
Чтобы найти локальные экстремальные значения f
, решите уравнение g == 0
:
g0 = solve(g, x)
g0 =
Аппроксимируйте точное решение численно при помощи функции double
:
double(g0)
ans = 2×1
-0.1892
1.2860
Выражение f
имеет локальный максимум в x = 1.286
и локальный минимум в x = -0.189
. Получите значения функции в этих точках с помощью subs
:
f0 = subs(f,x,g0)
f0 =
Аппроксимируйте точное решение численно при помощи функции double
на переменной f0
:
double(f0)
ans = 2×1
0.1427
7.2410
Добавьте маркеры точки в график в экстремальном значении:
plot(g0, f0, 'ok')
Вычисление второй производной позволяет вам найти точки перегиба выражения. Самый эффективный способ вычислить вторые или производные высшего порядка состоит в том, чтобы использовать параметр, который задает порядок производной:
h = diff(f, x, 2)
h =
Теперь Упростите тот результат:
h = simplify(h)
h =
Чтобы найти точки перегиба f
, решите уравнение h = 0
. Здесь, используйте числовой решатель vpasolve
, чтобы вычислить приближения с плавающей точкой решений:
h0 = vpasolve(h, x)
h0 =
Выражение f
имеет две точки перегиба: x = 1.865
и x = 0.579
. Обратите внимание на то, что vpasolve
также возвращает сложные решения. Отбросьте тех:
h0(imag(h0)~=0) = []
h0 =
Добавьте маркеры в график, показывающий точки перегиба:
plot(h0, subs(f,x,h0), '*k') hold off