此演示展示了如何使用符号数学工具箱使用分析和数值技术来查找函数的极值。
一阶导数:求函数的局部极小值和极大值
第二衍生物:找到功能的通货膨胀点
限制:使用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 =微分(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,Extrema),<年代pan style="color:#A020F0">'*'年代pan>) 抓住<年代pan style="color:#A020F0">离开年代pan>
计算第二衍生物让您发现表达的拐点。
h(x)=简化(差异(f,x,2))
h (x) =
寻找拐点<年代pan class="inlineequation">
,解决方程h = 0
.对于这种等式,即使您使用该等式,符号求解器也会返回复杂的结果maxdegree
选项:
解(h == 0, x,<年代pan style="color:#A020F0">'maxdegree'年代pan>4)
ans =
要获得更简单的数值结果,请使用以下方式解决方程vpasolve.
;指定搜索范围,将返回结果限制为表达式的所有真实解:金宝搏官方网站
fornction = vpasolve(h == 0,x,[-inf,inf])
拐点=
表达方式f
有两个通货膨胀点:x = 0.579和x = 1.865。
fplot (f)<年代pan style="color:#A020F0">在年代pan>绘图(极端,船只(F,Extrema),<年代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-axes是
ylim.
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 =泰勒(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)
ysoln =<年代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
Max(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 +棕褐色(1)
ANS = 2.557407724654902