本演示演示如何使用符号数学工具箱使用分析和数值技术查找函数的极值。
一阶导数:求函数的局部极小值和极大值
二阶导数:寻找函数的膨胀点
限制:使用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 =
要得到此类方程的显式解,请尝试使用该选项调用求解器最大度
.该选项指定求解器试图返回显式解的多项式的最大阶数。金宝搏官方网站默认情况下,最大度
= 2
。增加此值,可以获得高阶多项式的显式解。例如,指定金宝搏官方网站最大度
= 3
得到显式解:
求解(2*x^3+x*-1+3==0,x,<年代pan style="color:#A020F0">“最大度”年代pan>3)
ans =
您可以使用vpa
函数。
vpa (ans, 6)
ans =<年代pan class="inlineequation">
现在找出表达式的局部最小值和最大值f
。如果该点是局部极值(最小值或最大值),则该点处表达式的一阶导数等于零。若要计算表达式的导数,请使用diff
功能:
G =微分(f, x)
g =
求函数的局部极值f
,解方程g = 0
.如果你使用最大度
选项时,求解器返回长显式解,可通过使用浮动
功能:
解(g == 0, x,<年代pan style="color:#A020F0">“最大度”年代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)=简化(差(f,x,2))
h (x) =
寻找经济的拐点<年代pan class="inlineequation">
,解方程h = 0
。对于此方程式,即使使用最大度
选项:
解(h == 0, x,<年代pan style="color:#A020F0">“最大度”年代pan>4)
ans =
为了得到更简单的数值结果,使用vpasolve
;指定搜索范围,将返回结果限制为表达式的所有真实解:金宝搏官方网站
拐点=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>)情节(变形、潜艇(f,音调变化),<年代pan style="color:#A020F0">'*'年代pan>)持有<年代pan style="color:#A020F0">关年代pan>
并不是所有的函数都可以解析处理;这个函数
在原点处非常平坦,并且在附近无限频繁地振荡<年代pan class="inlineequation"> ,在接近零时变为线性,并在附近再次振荡<年代pan class="inlineequation"> .
F = @(x) tan(x) -sin(x)
f =<年代pan class="emphasis">function_handle与价值:@ (x)谭(sin (x)) sin (tan (x))
Fplot (f, [-pi, pi])
对于我们这里的目的来说,最重要的是,fplot选择了<年代pan class="emphasis">y-轴心
叶利姆
ans =<年代pan class="emphasis">1×2-2.5488 - 2.5572
发生了什么年代trong> ?年代trong>
MATLAB使用双精度算法,因此<年代pan class="inlineequation"> 等于其中一个振荡。
pi/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=taylor(F,x,<年代pan style="color:#A020F0">“订单”年代pan>10<年代pan style="color:#A020F0">“扩展点”年代pan>,0)
T=
vpa(潜艇(T、x、pi/2))
ans =<年代pan class="inlineequation">
持有<年代pan style="color:#A020F0">在…上年代pan>fplot(T) ylim([-3 3])保持<年代pan style="color:#A020F0">关年代pan>
微积分年代trong>
在微积分中,我们知道导数在零点处出现极大值。但是这个函数在附近是不可微的<年代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*pi/8 + pi/4*rand(1,N)
xValues =<年代pan class="emphasis">1×1001.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.20144 1.2144 1.844 1.8248 1.7238 1.4271 1.9244 1.2052 1.5227 1.4778 1.7793 1.8026 1.3249 1.5628 1.7708
ySoln = f (xValues)
伊索尔=<年代pan class="emphasis">1×1000.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
马克斯(伊索尔)
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 +棕褐色(1)
ans=2.557407724654902