资源描述:
《《用matlab求极值》word版》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。例3.6.1求的极值解首先建立函数关系:symss↙y=(3*x^2+4*x+4)/(x^2+x+1);↙然后求函数的驻点:dy=diff(y);↙xz=solve(dy)↙xz=[0][-2]知道函数有两个驻点x=0和x=-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2);↙z1=limit(d2y,x,0)↙z1=-2z2=limit(d2y,x,-2)↙z2=2/9于是知在x=0处二阶导数的值为z=-2,小于0,函数有极大值;在x=-2处二阶导数的值为
2、z=2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值:y=limit(y,x,0)↙y=4y=limit(y,x,-2)↙y=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。例3.6.2画出上例中函数的图形解symsx↙y=(3*x^2+4*x+4)/(x^2+x+1);↙得到如下图形ezplot(y)↙如何用MATLAB求函数的极值点和最大值比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?求极值:symsxy>>y=x^3+x^2
3、+1>>diff(y)%求导ans=3*x^2+2*x>>solve(ans)%求导函数为零的点ans=-2/30极值有两点。求最大值,既求-y的最小值:>>f=@(x)(-x^3-x^2-1)f=@(x)(-x^3-x^2-1)>>x=fminunc(f,-3,3)%在-3;-3范围内找Warning:Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethodinstead.>Infminuncat354Optimizationterminated:relativeinfinity
4、-normofgradientlessthanoptions.TolFun.x=-0.6667>>f(x)ans=-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。求全局最值要用遗传算法。如何用matlab求多元函数的极值求在05、x=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'可以
6、不用?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,'
7、x',xx(2)),'y',yy(2))程序运行结果ans=[1/3*pi,1/3*pi]JDZ=3/8*3^(1/2)补充matlab中的绘图函数很多,三维的有好几个呢,下面我给出两种绘制方法1.使用ezmesh或者ezsurf这两个函数是简易绘图函数,可以直接使用字符串绘图ezmesh('x*y-(1/3)*(x^3)+1/4*((x^2)*(sqrt(2*(x^2-y*2))))-1/2*(y*(sqrt(2*(x^2-y*2))))')2.先计算坐标点数据,再绘图,可以使用mesh和surf函数[x,y]=meshgrid(0:0.1:10);z=
8、x.*y-(1/3)*(x.^3)+1/4*((x.^2).*(s