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

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

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

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

  • Пределы: функции с супремой

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

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

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

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

fplot(f)

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

assume(x, 'real')

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

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

(3232)

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

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

корень(z3-z2+32,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

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

vpa(ans,6)
ans = -1.28962

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

g = diff(f, x)
g = 

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

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

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

(-0.1892451.28598)

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

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

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

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

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

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

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

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

(корень(σ1,z,1)корень(σ1,z,4))где  σ1=z6+45z534+9z434-699z368-249z268+63z68+4317

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

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

(0.578718426554417483196010858601961.8651543689917122385037075917613)

Выражение f имеет две точки инфляции: x = 0.579 и x = 1.865.

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

Супрема

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

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 = 

π2

F = sym(f)
F = загар(sin(x))-sin(загар(x))
subs(F,x,sym(pi/2))
ans = NaN

Ряд Тейлора

Мы можем также попытаться посмотреть на значение с Рядом Тейлора.

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

29x9756+x730

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

Исчисление

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

diff(F)
ans = потому что(x)загар(sin(x))2+1-потому что(загар(x))загар(x)2+1
fplot(diff(F), [-pi , pi])

Выборка

Мы можем выбрать функцию 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(загар(x))1 и tan(sin(x))загар(1) что означает, следовательно,

f(x)1+tan(1)

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

f(x)<1+загар(1)

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

format long 
1 + tan(1) 
ans = 
   2.557407724654902