求多元函数的极值及其逼近
这个例子展示了如何找到一个多元函数的极值,以及它在极值点附近的逼近。本例使用符号矩阵变量表示多元函数及其导数。符号矩阵变量从R2021a开始可用。
考虑多元函数 ,在那里 2 × 1向量和 是一个2 × 2矩阵。求这个函数的局部极值,求的导数的根 .也就是说,求导数的解 .
创建函数并求其导数
创建矢量 这个矩阵 作为符号矩阵变量。定义函数 .
信谊x(2 - 1)矩阵信谊一个(2 - 2)矩阵f = sin(x.'*A*x)
f =
计算导数D
函数的
对这个向量
.导数D
是用紧凑矩阵表示的
而且
.
D = diff(f,x)
D =
转换symmatrix
对象信谊
对象
符号矩阵变量x
,一个
,f
,D
是symmatrix
对象。这些对象用紧凑矩阵表示法表示矩阵、向量和标量。若要显示这些变量的分量,请转换symmatrix
对象信谊
对象的使用symmatrix2sym
.
sym = symmatrix2sym(x)
xsym =
symmatrix2sym(A)
Asym =
Fsym = symmatrix2sym(f)
fsym =
Dsym = symmatrix2sym(D)
Dsym =
替换数值并找到最小值
假设你对的值感兴趣
是[2 1;0 3]
.将这个值代入函数fsym
.
fsym = subs(fsym,Asym,[2 -1;0 3])
fsym =
代入
代入导数Dsym
Dsym = subs(Dsym,Asym,[2 -1;0 3])
Dsym =
然后,应用符号函数解决
求导数的根。
[xmin,ymin] = solve(Dsym,xsym,“PrincipalValue”,真正的);X0 = [xmin;ymin]
x0 =
绘制函数图
和极值解一起
.将绘图间隔设置为
而且
的第二个论点fsurf
.使用fplot3
画出极值解的坐标。
Fsurf (fsym,[-1 1 -1 1])等待在ymin fplot3 (xmin,潜艇(fsym xsym, x0),“罗”view([-68 13])
接近最小值的近似函数
你可以在一点附近近似多元函数 用泰勒展开得到多项式。
这里,这个项 梯度向量,和 是多元函数的黑森矩阵 计算在 .
找到黑森矩阵,并将结果作为一个符号矩阵变量返回。
H = diff(f,x,x.')
H =
转换黑森矩阵
到信谊
数据类型,它以组件形式表示矩阵。使用潜艇
来计算黑森矩阵
= [2 -1;0 3]
在最小值处
.
Hsym = symmatrix2sym(H);Hsym = subs(Hsym,Asym,[2 -1;0 3]);H0 = subs(Hsym,xsym,x0)
H0 =
计算梯度向量 在 .
D0 = subs(Dsym,xsym,x0)
D0 =
计算函数在其最小值附近的泰勒近似。
fapprox =潜艇(fsym xsym x0) + D0 * (xsym-x0) + 1/2 * (xsym-x0)。* H0 * (xsym-x0)
fapprox =
在同一张图上画出函数近似值 而且 .
持有在Fsurf (fapprox,[-1 1 1 1 1]) zlim([-1 3])