最大值,最小值和拐点
本演示演示了如何使用符号数学工具箱™使用分析和数值技术找到函数的极值。
一阶导数:求函数的局部极小值和极大值
二阶导数:寻找函数的膨胀点
极限:使用Suprema的函数
一阶导数:求局部极小值和极大值
计算表达式的一阶导数可以帮助您找到该表达式的局部极小值和极大值。例如,创建一个有理表达式,其中分子和分母是多项式表达式:
信谊<年代pan style="color:#A020F0">x年代pan>f = (3 * x ^ 3 + 17 * x ^ 2 + 6 * x + 1) / (2 * x ^ 3 + x * (1 + 3)
f =
绘制该表达式可以看出它具有水平和垂直渐近线,局部最小值介于-1和0之间,局部最大值介于1和2之间:
fplot (f)
默认情况下,在对该表达式进行操作时,结果可以包括实数和虚数。如果你只对实数感兴趣,你可以设定一个永久的假设,即x属于实数集合。这可以让你在解中避免复数,也可以提高性能:
假设(x,<年代pan style="color:#A020F0">“真实”的年代pan>)
求水平渐近线,计算的极限<年代pan class="inlineequation"> 当x趋于正无穷和负无穷时。水平渐近线是<年代pan class="inlineequation"> :
[limit(f, x, sym(inf)), limit(f, x, -sym(inf))]
ans =
的垂直渐近线<年代pan class="inlineequation"> ,求出表示分母的多项式表达式的根<年代pan class="inlineequation"> :
求解(2 * x^3 + x * -1 + 3 == sym(0), x)
ans =
要获得此类方程的显式解,请尝试使用该选项调用求解器MaxDegree
.该选项指定解算器试图返回显式解的多项式的最大程度。默认情况下,MaxDegree
= 2
.增加这个值,你可以得到高阶多项式的显式解。例如,指定MaxDegree
= 3
显式解的结果:
解(2 * x^3 + x * -1 + 3 == 0, x,<年代pan style="color:#A020F0">“MaxDegree”年代pan>3)
ans =
可以用数值逼近准确的解vpa
函数。
vpa (ans, 6)
ans =<年代pan class="inlineequation">
现在求表达式的局部最小值和最大值f
.如果该点是局部极值(最小值或最大值),则表达式在该点处的一阶导数为零。方法可计算表达式的导数diff
功能:
G = diff(f, x)
g =
的局部极值f
,解方程G = 0
.如果您使用MaxDegree
选项,求解器将返回较长的显式解,可以使用浮动
功能:
解(g == 0, x,<年代pan style="color:#A020F0">“MaxDegree”年代pan>4);极值= vpa(ans, 6)
极值=
情节的表达f
说明x = -0.189是表达式的局部最小值,x = 1.286是表达式的局部最大值。
fplot (f)<年代pan style="color:#A020F0">在年代pan>情节(极值,潜艇(f,极值),<年代pan style="color:#A020F0">‘*’年代pan>)举行<年代pan style="color:#A020F0">从年代pan>
二阶导数:寻找拐点
计算二阶导数可以让你找到表达式的拐点。
H (x) = simplify(diff(f, x, 2))
h (x) =
的拐点<年代pan class="inlineequation">
,解方程H = 0
.对于这个方程,符号求解器返回一个复杂的结果,即使您使用MaxDegree
选择:
求解(h == 0, x,<年代pan style="color:#A020F0">“MaxDegree”年代pan>4)
ans =
为了得到更简单的数值结果,用vpasolve
;指定搜索范围,将返回结果限制为表达式的所有实解:
Inflection = vpasolve(h == 0, x, [-inf, inf])
拐点=
表达式f
有两个膨胀点:x = 0.579和x = 1.865。
fplot (f)<年代pan style="color:#A020F0">在年代pan>情节(极值,潜艇(f,极值),<年代pan style="color:#A020F0">‘*’年代pan>图(inflection, subs(f,inflection),<年代pan style="color:#A020F0">‘*’年代pan>)举行<年代pan style="color:#A020F0">从年代pan>
Suprema
不是所有的函数都可以用解析法处理;这个函数
在原点处非常平坦,在附近无限振荡<年代pan class="inlineequation"> ,在接近零时变为线性,并在附近再次振荡<年代pan class="inlineequation"> .
F = @(x) tan(sin(x))-sin(tan(x))
f =<年代pan class="emphasis">带值的Function_handle:@ (x)谭(sin (x)) sin (tan (x))
Fplot (f, [-pi, pi])
对于我们的目的来说最重要的是,fplot选择了<年代pan class="emphasis">y-坐标轴
ylim
ans =<年代pan class="emphasis">1×2-2.5488 - 2.5572
发生了什么年代trong> ?年代trong>
MATLAB®采用双精度算法,因此<年代pan class="inlineequation"> 求值为其中一个振荡。
π/ 2
Ans = 1.5708
f(π/ 2)
Ans = 2.5161
符号数学工具箱使用精确算术,这表明函数未定义。
信谊<年代pan style="color:#A020F0">x年代pan>信谊(π/ 2)
ans =
F = sym(F)
F =<年代pan class="inlineequation">
潜艇(F, x,信谊(π/ 2))
ans =<年代pan class="inlineequation">
泰勒级数
我们也可以用泰勒级数来计算它的值。
T =泰勒(F,x,<年代pan style="color:#A020F0">“秩序”年代pan>10<年代pan style="color:#A020F0">“ExpansionPoint”年代pan>, 0)
T =
vpa(潜艇(T, x,π/ 2))
ans =<年代pan class="inlineequation">
持有<年代pan style="color:#A020F0">在年代pan>fplot(T) ylim([-3 3])保持<年代pan style="color:#A020F0">从年代pan>
微积分年代trong>
我们在微积分中学到极大值出现在导数的0处。但是这个函数在附近是不可微的<年代pan class="inlineequation"> .我们可以解析微分<年代pan class="inlineequation"> 使用符号数学工具箱。
差异(F)
ans =<年代pan class="inlineequation">
fplot(diff(F), [-pi, pi])
抽样年代trong>
我们可以对函数采样N次<年代pan class="inlineequation"> 得到最大值的数值近似值。这样够好吗?
N = 100;xValues = 3* /8 + /4*rand(1,N)
xValues =<年代pan class="emphasis">1×1001.8180 1.8895 1.2778 1.8955 1.3968 1.6076 1.9301 1.9359 1.3019 1.9404 1.9299 1.5593 1.8095 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.5728 1.5281 1.6857 1.7352 1.7708
ySoln = f(xValues)
ySoln =<年代pan class="emphasis">1×1000.7260 1.5080 1.5932 1.5614 1.3796 1.3158 2.0658 2.4586 1.85194 1.8541 1.9088 1.8793 1.8178 2.3439 1.7447 2.0697 1.5775 0.5629 1.8290 2.5629 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 1.2247 1.2583 0.5153
马克斯(ySoln)
Ans = 2.5387
证明年代trong>
从数学证明中确定最大值。
所以<年代pan class="inlineequation"> 而且<年代pan class="inlineequation"> 这就意味着
作为<年代pan class="inlineequation"> ,<年代pan class="inlineequation"> 振荡和爆炸;所以<年代pan class="inlineequation"> 在这一点上实际上完全没有定义,如上所示
现在我们来看看它的数值。
格式<年代pan style="color:#A020F0">长年代pan>1 + tan(1)
Ans = 2.557407724654902