Максимумы, минимумы и точки перегиба

Эта демонстрация показывает, как найти экстрему функций с помощью аналитических и численных методов с помощью Symbolic Math Toolbox.

  • Первые производные: нахождение локального минимума и максимума функции

  • Вторые производные: нахождение точек инфляции функции

  • Пределы: Функции с Suprema

Первые производные: нахождение локальных минимумов и максимумов

Вычисление первой производной выражения помогает вам найти локальные минимумы и максимумы этого выражения. Для примера создайте рациональное выражение, где числитель и знаменатель являются полиномиальными выражениями:

syms x
f = (3 * x^3 + 17 * x^2 + 6 * x + 1)/(2 * x^3 + x * -1 + 3)
f = 

3x3+17x2+6x+12x3-x+3(3 * x ^ 3 + 17 * x ^ 2 + 6 * x + 1 )/( 2 * x ^ 3 - x + 3)

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

fplot(f)

Figure contains an axes. The axes contains an object of type functionline.

По умолчанию, когда вы работаете с этим выражением, результаты могут включать как вещественные, так и мнимые числа. Если вас интересуют только вещественные числа, можно задать постоянное предположение, что x принадлежит множеству вещественных чисел. Это позволяет избегать сложных чисел в решениях и также может улучшить эффективность:

assume(x, 'real')

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

[limit(f, x, sym(inf)), limit(f, x, -sym(inf))]
ans = 

(3232)[sym (3/2), sym (3/2)]

Чтобы найти вертикальную асимптоту f, найти корни полиномиального выражения, которое представляет знаменатель f:

solve(2 * x^3 + x * -1 + 3 == sym(0), x)
ans = 

root(z3-z2+32,z,3)корень (z ^ 3 - z/2 + sym (3/2), z, 3)

Чтобы получить явное решение для таких уравнений, попробуйте вызвать решатель с опцией MaxDegree. Опция задает максимальную степень полиномов, для которых решатель пытается вернуть явные решения. По умолчанию MaxDegree = 2. Увеличивая это значение, можно получить явные решения для полиномов более высокого порядка. Для примера укажите MaxDegree = 3 приводит к явному решению:

solve(2 * x^3 + x * -1 + 3 == 0, x, 'MaxDegree', 3)
ans = 

-1634-2414324321/3-34-2414324321/3- 1/( 6 * (sym (3/4) - (sqrt (sym (241)) * sqrt (sym (432)) )/432) ^ sym (1/3)) - (sym (3/4) - (sqrt (sym (241) * sqrt (sym (432)) )/432) ^ sym (1/3)

Вы можете аппроксимировать точное решение численно с помощью vpa функция.

vpa(ans,6)
ans = -1.28962-vpa ('1.28962')

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

g = diff(f, x)
g = 

9x2+34x+62x3-x+3-6x2-13x3+17x2+6x+12x3-x+32(9 * x ^ 2 + 34 * x + 6 )/( 2 * x ^ 3 - x + 3) - ((6 * x ^ 2 - 1) * (3 * x ^ 3 + 17 * x ^ 2 + 6 * x + 1) )/( 2 * x ^ 3 - x + 3) ^ 2

Чтобы найти локальную экстрему f, решить уравнение g = 0. Если вы используете MaxDegree опция, решатель возвращает длинное явное решение, которое может быть аппроксимировано при помощи float функция:

solve(g == 0, x, 'MaxDegree', 4);
extrema = vpa(ans, 6)
extrema = 

(-0.1892451.28598)[-vpa ('0.189245'); vpa ('1.28598')]

График выражения f показывает, что x = -0.189 является локальным минимумом выражения, а x = 1.286 является его локальным максимумом.

fplot(f)
hold on
plot(extrema, subs(f,extrema), '*')
hold off

Figure contains an axes. The axes contains 2 objects of type functionline, line.

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

Вычисление второй производной позволяет вам найти точки перегиба выражения.

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

268x6+90x5+18x4-699x3-249x2+63x+1722x3-x+33(2 * (68 * x ^ 6 + 90 * x ^ 5 + 18 * x ^ 4 - 699 * x ^ 3 - 249 * x ^ 2 + 63 * x + 172) )/( 2 * x ^ 3 - x + 3) ^ 3

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

solve(h == 0, x, 'MaxDegree', 4)
ans = 

(root(σ1,z,1)root(σ1,z,4))where  σ1=z6+45z534+9z434-699z368-249z268+63z68+4317[корень (z ^ 6 + (45 * z ^ 5 )/34 + (9 * z ^ 4 )/34 - (699 * z ^ 3 )/68 - (249 * z ^ 2 )/68 + (63 * z )/68 + sym (43/17), z, 1); корень (z ^ 6 + (45 * z ^ 5 )/34 + (9 * z ^ 4 )/34 - (699 * z ^ 3 )/68 - (249 * z ^ 2 )/68 + (63 * z )/68 + sym (43/17), z, 4)]

Чтобы получить более простой численный результат, решите уравнение численно при помощи vpasolve; задайте область значений поиска, чтобы ограничить возвращенные результаты всеми реальными решениями выражения:

inflection = vpasolve(h == 0, x, [-inf, inf])
inflection = 

(0.578718426554417483196010858601961.8651543689917122385037075917613)[vpa ('0,57871842655441748319601085860196'); vpa ('1.8651543689917122385037075917613')]

Выражение f имеет две точки инфляции: x = 0,579 и x = 1,865.

fplot(f)
hold on
plot(extrema, subs(f,extrema), '*')
plot(inflection, subs(f,inflection), '*')
hold off

Figure contains an axes. The axes contains 3 objects of type functionline, line.

Супрема

Не все функции могут быть обработаны аналитически; функция

f(x)=tan(sin(x))-sin(tan(x))

очень плоский в источник, и он колеблется бесконечно часто около -π2, становится линейным, когда он приближается к нулю и снова колеблется около π.

f = @(x) tan(sin(x))-sin(tan(x))
f = function_handle with value:
    @(x)tan(sin(x))-sin(tan(x))

fplot(f, [-pi , pi])

Наиболее важным для наших целей здесь, fplot выбрал предел на оси Y, чтобы быть

ylim
ans = 1×2

   -2.5488    2.5572

Что происходит в π2?

MATLAB использует арифметику двойной точности, поэтому π2 вычисляет одно из колебаний.

pi/2
ans = 1.5708
f(pi/2)
ans = 2.5161

Symbolic Math Toolbox использует точную арифметику, которая показывает, что функция не определена.

syms x
sym(pi/2)
ans = 

π2sym (pi )/2

F = sym(f)
F = tan(sin(x))-sin(tan(x))tan(sin(x)) - sin(tan(x))
subs(F,x,sym(pi/2))
ans = NaNsym(NaN)

Серия Тейлора

Мы также можем попытаться взглянуть на значение с помощью серии Тейлора.

T = taylor(F,x,'Order',10,'ExpansionPoint',0)
T = 

29x9756+x730(29 * x ^ 9 )/756 + x ^ 7/30

vpa(subs(T,x,pi/2))
ans = 3.0198759869735883213825972535797vpa ('3.0198759869735883213825972535797')
hold on 
fplot(T)
ylim ([-3 3])
hold off

Figure contains an axes. The axes contains 2 objects of type functionline.

Исчисление

Вычислением мы узнаем, что максимум происходит в нуле производной. Но эта функция не дифференцируема в окрестностях π2. Мы можем аналитически дифференцировать f(x) использование Symbolic Math Toolbox.

diff(F)
ans = cos(x)tan(sin(x))2+1-cos(tan(x))tan(x)2+1cos (x) * (tan (sin (x)) ^ 2 + 1) - cos (tan (x)) * (tan (x) ^ 2 + 1)
fplot(diff(F), [-pi , pi])

Figure contains an axes. The axes contains an object of type functionline.

Выборка

Мы можем попробовать функцию N раз рядом π2 чтобы получить численное приближение к значению максимума. Это достаточно хорошо?

N = 100;
xValues = 3*pi/8 + pi/4*rand(1,N) 
xValues = 1×100

    1.8180    1.8895    1.2778    1.8955    1.6748    1.2547    1.3968    1.6076    1.9301    1.9359    1.3019    1.9404    1.9299    1.5593    1.8066    1.2895    1.5093    1.8973    1.8003    1.9317    1.6931    1.2061    1.8450    1.9117    1.7112    1.7732    1.7618    1.4862    1.6929    1.3125    1.7326    1.2031    1.3956    1.2144    1.2544    1.8248    1.7238    1.4271    1.9244    1.2052    1.5227    1.4778    1.7793    1.8026    1.3249    1.5628    1.5281    1.6857    1.7352    1.7708

ySoln = f(xValues)
ySoln = 1×100

    0.7260    1.5080    1.5932    1.5614    1.3796    1.3158    2.0658    2.4586    1.8194    1.8541    1.9088    1.8793    1.8178    2.3439    0.6145    1.7447    2.0697    1.5775    0.5629    1.8290    2.4930    0.8543    1.0347    1.6931    2.2371    0.5024    0.6011    2.2489    2.4891    2.0499    1.3564    0.8308    2.0986    0.9208    1.3122    0.8011    1.7177    0.9333    1.7830    0.8466    0.6138    2.5047    0.4857    0.5809    2.2051    2.5133    2.5387    2.2247    1.2583    0.5153

max(ySoln)
ans = 2.5387

Доказательство

Определите максимум из математического доказательства.

sin(x)1

так sin(tan(x))1 и tan(sin(x))tan(1) что означает, следовательно,

f(x)1+tan(1)

Как xπ2, tan(x) колеблется и взрывается; такf(x) на самом деле не определено вообще в этой точке, как было показано выше

f(x)<1+tan(1)

Теперь мы можем взглянуть на числовое значение.

format long 
1 + tan(1) 
ans = 
   2.557407724654902