怎么用MATLAB求多元函数极值

怎么用MATLAB求多元函数极值,第1张

f = @(x,y)x(1)^2-(x(2)-1)^2

>>[x,fvalue,flag,output]=fminsearch(f,[0,0])

Exiting: Maximum number of function evaluations has been exceeded

- increase MaxFunEvals option.

Current function value: -359212266339440800000000000000000000000000000000000000000000000000000000000000000000.000000

x =

1.0e+041 *

0.9523 -6.0686

fvalue =

-3.5921e+083

flag =

0

output =

iterations: 200

funcCount: 401

algorithm: 'Nelder-Mead simplex direct search'

message: [1x233 char]

当X=pi/3 y=pi/3 z有极大值 3/8*3^(1/2) %定义二元函数

clcclear

syms x y

z=sin(x)*sin(y)*sin(x+y)

ezsurf(x,y,z,[0,pi/2,0,pi/2])

%求解驻点

dzx=diff(z,x)

dzy=diff(z,y)

[xx,yy]=solve('cos(x)*sin(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0',...

'sin(x)*cos(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y)=0','x','y')

%对于定义域内的驻点求解二阶偏导函数

A=diff(z,x,2)

B=diff(diff(z,x),y)

C=diff(z,y,2)

D=A*C-B^2

%判别极大值点

D1=subs(subs(D,'x',xx(1)),'y',yy(1))

A1=subs(subs(A,'x',xx(1)),'y',yy(1))

D2=subs(subs(D,'x',xx(2)),'y',yy(2))

A2=subs(subs(A,'x',xx(2)),'y',yy(2))

%极大值点和极大值

[xx(2) yy(2)]

JDZ=subs(subs(z,'x',xx(2)),'y',yy(2)) 程序运行结果ans =

[ 1/3*pi, 1/3*pi]

JDZ =

3/8*3^(1/2)

1.F(x、y)分别对x,y求偏导,目的是联立偏导方程,找出驻点。

2.Fxx*Fyy和Fxy*Fyx的相对数值大小作为判断依据,目的就是,判断第一步中驻点是否为极值点。

二元(或都多元)极值的求法思想与一元完全类似,试回忆一元函数求极值:

1.f'(x)=0,找出驻点。

2.f''(x)判断,驻点是否为极值。  

设函数 z = f ( x , y ) 在点 ( x 0 , y 0 ) 的某邻域内连续且有一阶及二阶连续偏导数 , 又  

f x ( x 0 , y 0 ) = 0 ,  

f y ( x 0 , y 0 ) = 0 ,  

f xx ( x 0 , y 0 ) = A ,

f xy ( x 0 , y 0 ) = B ,

f yy ( x 0 , y 0 ) = C ,

则 f ( x , y ) 在 ( x 0 , y 0 ) 处是否取得极值的条件如下:

(1) AC - B^2 >0 时具有极值 , 且当 A <0 时有极大值 , 当 A >0 时有极小值

(2) AC - B^2 <0 时没有极值

(3) AC - B^2 = 0 时可能有极值 , 也可能没有极值 .

是否是极值需用其它方法,一般可结合图形判定

在函数 f ( x , y ) 的驻点处

如果 f xx × f yy - f xy ^2 >0 , 则函数具有极值 , 且

当 f xx <0 时有极大值 ,  

当 f xx >0 时有极小值。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11630727.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存