用MATLAB求极值_第1页
用MATLAB求极值_第2页
用MATLAB求极值_第3页
用MATLAB求极值_第4页
用MATLAB求极值_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用MATLA求极值灵活的运用MATLA的计算功能,可以很容易地求得函数的极值。3x + 4x + 4例3.6.1 求y二34的极值解首先建立函数关系:s yms sy=(3*x2+4*x+4)/( xA2+x+1);/然后求函数的驻点:dy=diff(y);/xz=solve(dy)/xz=0 -2知道函数有两个驻点x1=0和X 2 =-2,考察函数在驻点处二阶导数的正负情况:d2y=diff(y,2);/z1=limit(d2y,x,0)/z1 =-2z2=limit(d2y,x,-2)/z2=2/9于是知在x1=0处二阶导数的值为z1=-2,小于0,函数有极大值;在x2=-2处二阶导数的值

2、 为z 2 =2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0)/y1 =4y2 =limit(y,x,-2)/y2 =8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLA啲作图功能,我们很容易做到这一点。例3.6.2画出上例中函数的图形解 syms x /y=(3*xA2+4*x+4)/( xA2+x+1);/得到如下图形ezplot(y) /页脚(3x2+4x+4)/(k2+x+1)如何用MATLAB求函数的极值点和最大值比如说y=xA3+xA2+1 ,怎样用matlab来算它的极值和最大值?求极

3、值:syms x y求导%求导函数为零的点>> y=xA3+xA2+1>> diff(y) %ans =3*xA2 + 2*x >> solve(a ns) ans =-2/30极值有两点。求最大值,既求-y的最小值:>> f=(x)(-xA3-xA2-1)f = (x)(-xA3-xA2-1)>> x=fminunc(f,-3,3)% 在-3 ; -3 范围内找Warning: Gradie nt must be provided for trust-regi on method; using lin e-search method

4、 in stead.> In fminunc at 354Optimizati ontermi nated:relative infin ity-normopti on s.Tol Fun.x =of gradie ntlesstha n-0.6667>> f(x)ans =-1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。 求全局最值要用遗传算法。如何用matlab求多元函数的极值:函数 z. = sin(c) sin(+ y)泊求在 0<x<pi/2,0<y< pi/2大值内的极当 X=pi/3 y

5、=pi/3 z有极大值3/8*3A(1/2)%定义二元函数clc;clear;syms x y;z=si n(x)*si n( y)*si n(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(

6、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-BA2;%判别极大值点D1=subs(subs(D,'x',xx(1),'y',yy(1)%

7、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*piJDZ =3/8*3A(1/2)补充matlab中的绘图函数很多,三维的有好几个

8、呢,下面我给出两种绘制方法1. 使用ezmesh或者ezsurf这两个函数是简易绘图函数,可以直接使用字符串绘图ezmesh('x*y-(1/3)*(xA3)+1/4*(xA2)*(sqrt(2*(xA2-y*2)-1/2*(y*(sqrt(2*(xA2-y*2)')2. 先计算坐标点数据,再绘图,可以使用mesh和surf函数x,y=meshgrid(0:0.1:10);z=x.*y-(1/3)*(x.A3)+1/4*(x.A2).*(sqrt(2*(x.A2-y*2)-1/2*(y.*(sqrt(2*(x.A2-y*2);z(imag(z)=0)=nan;mesh(x,y,

9、z)subs是赋值函数,用数值替代符号变量替换函数例如:输入subs(a+b,a,4)意思就是把a用4替换掉,返回4+b也可以替换多个变量,例如:subs(cos (a)+si n( b),a,b,sym('alpha'),2)分别用字符 alpha替换a和2替换b,返回cos(alpha)+sin(2)用法很灵活,仔细看帮助,会得到你想要的形式的matlab subs 女M可用囂悬赏分:0 -解决时间:2008-12-3 17:36在解一个模型,其中:Qd=(-2*x-2*wd+2*a-a*k+y*k+wf*k+td*k)/(4*b-2*b*kA2)现在求出来x = 1/2*

10、(48*a+32*k+16*wd-16*cdu-4*wf*k-4*td*k-12*a*k-10*a*kA2+td*kA3-8*kA3+4*kA2*cdu-4*k*cfu+cfu*kA3+3*a*kA3-6*wd*kA2+wf*kA3)/(5*kA2-16)y = (-8*a+a*kA2-2*wd*k+10*a*k+8*wf-3*wf*kA2-3*td*kA2+2*cfu*kA2+4*kA2+8*td-8*cf u-2*k*cdu)/(5*kA2-16)要把x和y代回Qd,请教达人,用matlab的subs怎么写啊?万分感谢!问题补充:Qd=(-2*x1-2*wd+2*a-a*k+y1*k+wf

11、*k+td*k)/(4*b-2*b*kA2)x1=1/2*(48*a+32*k+16*wd-16*cdu-4*wf*k-4*td*k-12*a*k-10*a*kA2+td*kA3-8*kA3+4*kA2*cdu-4*k*cfu+cfu*kA3+3*a*kA3-6*wd*kA2+wf*kA3)/(5*kA2-16)y1=(-8*a+a*kA2-2*wd*k+10*a*k+8*wf-3*wf*kA2-3*td*kA2+2*cfu*kA2+4*kA2+8*td-8*cfu-2*k*cdu)/(5*kA2-16)subs(Qd,x1,y1,x,y)以上输入之后报错为:Un defi ned fun c

12、tion or variable 'x1'.请问是哪里除了问题?提问者:nxdviola -最佳答案syms x1,y1 QdQd=(-2*x1-2*wd+2*a-a*k+y1*k+wf*k+td*k)/(4*b-2*b*kA2)subs(Qd,x1,y1,x,y)为何Matlab用subs后给出的结果是个代数式而不是数字?題悬赏分:0 -解决时间:2009-10-8 22:16使用 d=subs(f4,x,y,z,2,3,1)后,结果给出了一个很长的代数式,里面有 pi和atan,但都没有计算,为什么不给出一个最终 的数字结果?提问者:再见长江-二级最佳答案subs函数就是替

13、换符号表达式的函数,要计算需要用eval函数急询:Matlab中subs ( S)的应用疑问?僧悬赏分:5 -解决时间:2006-6-29 12:57急询:Matlab中subs ( S)的应用疑问?1. subs ( S)到底是什么函数?其什么作用,谢谢!2. 下段绘图程序如下的话就画出不来:syms x t;t=0:pi/60:2*pi;y1=i nt(si n(x),x,0,t);y2=i nt(cos(x),x,0,t);plot(y1,y2)而把plot(y1,y2) 改成plot(subs(y1),subs(y2)就可以运行成功画出来了。(1 )为什么?(2) subs在此起到什么

14、作用?(3) 而不加subs为什么运行不了,画不出来? ?急,多谢!(上次提问时候把 y1写成y1=sin(x) 了,现在改为int(sin(x),x,0,t);抱歉)问题补充:(上次提问时候把 y1写成y1=sin(x) 了,现在改为int(sin(x),x,0,t);抱歉)请具体讲一下subs ( S)到底是什么意思?(我知道subs (f,x,t)是什么意思,但我不明白sub( S)在此到底具体是什么意思?请详细一下,谢谢!)提问者:wanglicun - 二 级最佳答案subs ( S)的意思是:S以前是sym变量,subs ( S)为double变量,plot只能对double变量作

15、图。求函数z二f(x,y)极值的一般步骤:第一步解方程组fx(x,y)=O, fy(x,y)=O求出实数解,得驻点.第二步 对于每一个驻点(x0, y0),求出二阶偏导数的值A、B、C.第三步 定出ACB2的符号,再判定是否是极值.曲线极值的标注:用matlab中plot绘制的曲线时,把曲线上峰值的大小标注在上面你指的是离散点的最大和最小值吧?给你个简单的例子看看:代码:x=0:pi/50:2*pi; y=si n( x);y仁max(y);x1=x(fi nd(y=y1);y2=mi n(y);x2=x(fi nd(y=y2);Plot(x,y);hold onplot(x1,y1,'

16、;r*');plot(x2,y2,'g*');离散数据就极值点%方法一x=0:0.01:20;y=2*si n( x/2)+cos(2*x)/2;% in dmax=fi nd(diff(sig n(diff(y)<0)+1;%极大值点% in dmi n二fin d(diff(sig n(diff(y)>0)+1;%极小值点in d=fi nd(diff(sig n(diff(y)=0)+1;%极值点plot(x,y,x(ind),y(ind),'ro')%方法二x=0:0.01:20;y=2*si n( x/2)+cos(2*x)/2;i

17、n dmax=i ntersect(fi nd(diff(y)>0)+1,fi nd(diff(y)<0);%极大值点in dmi n=i ntersect(fi nd(diff(y)<0)+1,fi nd(diff(y)>0);%极小值点plot(x,y,x(i ndmax),y(i ndmax),'ro',x(i ndmi n),y(i ndmi n),'go') %方法三x=0:0.01:20;前向差分%后向差分%寻找极值点(不考虑首尾两点)y=2*si n( x/2)+cos(2*x)/2; yf=y(2:e nd-1)-y(1:

18、e nd-2); % yb=y(2:e nd-1)-y(3:e nd);I=fi nd(yf.*yb>=0)+1;plot(x,y,'b',x(l),y(l),'r*');fun cti onzhudia n,n=T jizhi(x,y,z,J)ezsurf(x,y,z,J);dx=diff(z,x);dy=diff(z,y);zhudian=solve('dx=0' , 'dy=0' , 'x' , 'y');zhudia n=zhudia n'n=len gth(zhudia n)d2y=diff(dy);计算函数的极值function zhudian,n=Tjizhi(x,y,z,J)%(x,y)% ezsurf(x,y,z);%ezplot(y);dx=diff(x,x); dy=diff(x,y)%dy=diff(y);zhudia n=solve('dx=0','dy=0','x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论