预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

用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= -2 z2=limit(d2y,x,-2)↙ z2= 2/9 于是知在x=0处二阶导数的值为z=-2,小于0,函数有极大值;在x=-2处二阶导数的值为z=2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值: y=limit(y,x,0)↙ y= 4 y=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+1 >>diff(y)%求导 ans= 3*x^2+2*x >>solve(ans)%求导函数为零的点 ans= -2/3 0 极值有两点。 求最大值,既求-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. >Infminuncat354 Optimizationterminated:relativeinfinity-normofgradientlessthanoptions.TolFun. x= -0.6667 >>f(x) ans= -1.1481 在规定范围内的最大值是1.1481 由于函数的局限性,求出的极值可能是局部最小(大)值。 求全局最值要用遗传算法。 如何用matlab求多元函数的极值 求在0<x<pi/2,0<y<pi/2内的极大值 当X=pi/3y=pi/3z有极大值3/8*3^(1/2) %定义二元函数clc;clear;symsxy;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) 补充 matlab中的绘图函数很多,三维的有好几个呢,下面我给出两种绘制方法 1.使用ezmesh或者ezsurf这两个函数是简易绘图函数,可以直接使用字符串绘图 ezmesh('x*y-(1/3)*(x^3)+1/4*((x^2)*(sqrt(2*(x^2-y*2))))-1/2*(y*(sq