用MATLAB求极值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用MATLAB求极值
灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。
例3.6.1 求
2
2
344
1
x x
y
x x
++
=
++
的极值
解首先建立函数关系:
s yms s
y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:
dy=diff(y); ↙
xz=solve(dy) ↙
xz=
[0] [-2]
知道函数有两个驻点x
1=0和x
2
=-2,考察函数在驻点处二阶导数的正负情况:
d2y=diff(y,2); ↙
z1=limit(d2y,x,0) ↙z1=
-2
z2=limit(d2y,x,-2) ↙z2=
2/9
于是知在x
1=0处二阶导数的值为z
1
=-2,小于0,函数有极大值;在x
2
=-2处二阶导数的值
为z
2
=2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值:
y
1
=limit(y,x,0) ↙
y
1
=
4
y
2
=limit(y,x,-2) ↙
y
2
=
8/3
事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MA TLAB的作图功能,我们很容易做到这一点。
例3.6.2画出上例中函数的图形
解syms x ↙
y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形
ezplot(y) ↙
如何用MATLAB求函数的极值点和最大值
比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?
求极值:
syms x y
>> y=x^3+x^2+1
>> diff(y) %求导
ans =
3*x^2 + 2*x
>> solve(ans)%求导函数为零的点
ans =
-2/3
极值有两点。
求最大值,既求-y的最小值:
>> f=@(x)(-x^3-x^2-1)
f = @(x)(-x^3-x^2-1)
>> x=fminunc(f,-3,3)% 在-3;-3范围内找
Warning: Gradient must be provided for trust-region method;
using line-search method instead.
> In fminunc at 354
Optimization terminated: relative infinity-norm of gradient less than options.TolFun.
x =
-0.6667
>> f(x)
ans =
-1.1481
在规定范围内的最大值是1.1481
由于函数的局限性,求出的极值可能是局部最小(大)值。
求全局最值要用遗传算法。
如何用matlab求多元函数的极值
求在0 当X=pi/3 y=pi/3 z有极大值 3/8*3^(1/2) %定义二元函数 clc;clear; 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) dzx = cos(x)*sin(y)*sin(x+y)+sin(x)*sin(y)*cos(x+y) >> dzy=diff(z,y) dzy = sin(x)*cos(y)*sin(x+y)+sin(x)*sin(y)*cos(x+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') %%%'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))%% subs含义见补充部分 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)