exponenta event banner

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

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

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

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

  • Пределы: Функции с 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)root(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[root(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); root(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

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

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) можно с помощью инструментария символьной математики.

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

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

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

грех (x) ≤1

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

f (x) ≤1+tan (1)

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

f (x) < 1 + tan (1)

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

format long 
1 + tan(1) 
ans = 
   2.557407724654902