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

Эта демонстрация показывает, как найти экстремальное значение функций с помощью аналитических и числовых методов с помощью 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(3*x^3 + 17*x^2 + 6*x + 1) / (2*x^3 - 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)[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

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

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

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

Супрема

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

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 (пи)/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

Исчисление

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

diff(F)
ans = cos(x)tan(sin(x))2+1-cos(tan(x))tan(x)2+1because(x) * (tan (sin (x)) ^2 + 1) - because(tan (x)) * (tan (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(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