Дифференцирование

Этот пример показывает, как аналитически найти и оценить производные с помощью 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 = 

3x3+17x2+6x+12x3-x+3

Графический вывод этого выражения показывает, что выражение имеет горизонтальные и вертикальные асимптоты, локальный минимум между-1 и 0, и локальный максимум между 1 и 2:

fplot(f)
grid

Чтобы найти горизонтальную асимптоту, вычислите пределы f для x, приближающегося к положительным и отрицательным бесконечностям. Горизонтальной асимптотой является y = 3/2:

lim_left = limit(f, x, -inf)
lim_left = 

32

lim_right = limit(f, x, inf)
lim_right = 

32

Добавьте эту горизонтальную асимптоту в график:

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 = 

-1634-2414324321/3-34-2414324321/3

Аппроксимируйте точное решение численно при помощи функции double:

double(pole_pos)
ans = -1.2896

Теперь найдите локальный минимум и максимум f. Если точка является локальным экстремальным значением (или минимум или максимум), первая производная выражения в той точке равна нулю. Вычислите производную f с помощью diff:

g = diff(f, x)
g = 

9x2+34x+62x3-x+3-6x2-13x3+17x2+6x+12x3-x+32

Чтобы найти локальные экстремальные значения f, решите уравнение g == 0:

g0 = solve(g, x)
g0 = 

(σ26σ31/6-σ1-1568σ26σ31/6+σ1-1568)где  σ1=3374916331789396323559826+2198209982639304+2841σ31/3σ2578-9σ32/3σ2-361σ22896σ31/6σ21/4  σ2=2841σ31/31156+9σ32/3+361289  σ3=3178939632355176868+2198209530604

Аппроксимируйте точное решение численно при помощи функции double:

double(g0)
ans = 2×1

   -0.1892
    1.2860

Выражение f имеет локальный максимум в x = 1.286 и локальный минимум в x = -0.189. Получите значения функции в этих точках с помощью subs:

f0 = subs(f,x,g0)
f0 = 

(3σ2-17σ5-σ6+15682-σ4+σ1+1134σ6+2σ2-σ5-21968-σ4+17σ6+σ5-15682+3σ3+σ1-1134σ6-2σ3+σ5-21968)где  σ1=σ7σ91/6σ81/4  σ2=σ5-σ6+15683  σ3=σ6+σ5-15683  σ4=σ8σ91/6  σ5=σ76σ91/6σ81/4  σ6=σ86σ91/6  σ7=3374916331789396323559826+2198209982639304+2841σ91/3σ8578-9σ92/3σ8-361σ8289  σ8=2841σ91/31156+9σ92/3+361289  σ9=3178939632355176868+2198209530604

Аппроксимируйте точное решение численно при помощи функции double на переменной f0:

double(f0)
ans = 2×1

    0.1427
    7.2410

Добавьте маркеры точки в график в экстремальном значении:

plot(g0, f0, 'ok')

Вторые производные: нахождение точек перегиба

Вычисление второй производной позволяет вам найти точки перегиба выражения. Самый эффективный способ вычислить вторые или производные высшего порядка состоит в том, чтобы использовать параметр, который задает порядок производной:

h = diff(f, x, 2)
h = 

18x+34σ1-26x2-19x2+34x+6σ12-12xσ2σ12+26x2-12σ2σ13где  σ1=2x3-x+3  σ2=3x3+17x2+6x+1

Теперь Упростите тот результат:

h = simplify(h)
h = 

268x6+90x5+18x4-699x3-249x2+63x+1722x3-x+33

Чтобы найти точки перегиба f, решите уравнение h = 0. Здесь, используйте числовой решатель vpasolve, чтобы вычислить приближения с плавающей точкой решений:

h0 = vpasolve(h, x)
h0 = 

(0.578718426554417483196010858601961.8651543689917122385037075917613-1.4228127856020972275345064554049-1.8180342567480118987898749770461i-1.4228127856020972275345064554049+1.8180342567480118987898749770461i-0.46088831805332057449182335801198+0.47672261854520359440077796751805i-0.46088831805332057449182335801198-0.47672261854520359440077796751805i)

Выражение f имеет две точки перегиба: x = 1.865 и x = 0.579. Обратите внимание на то, что vpasolve также возвращает сложные решения. Отбросьте тех:

h0(imag(h0)~=0) = []
h0 = 

(0.578718426554417483196010858601961.8651543689917122385037075917613)

Добавьте маркеры в график, показывающий точки перегиба:

plot(h0, subs(f,x,h0), '*k')
hold off