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

下载本文档

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

文档简介

用MATLAB求极值灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。例3.6.1 求的极值解 首先建立函数关系: syms s y=(3*x2+4*x+4)/( x2+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处二阶导数的值为z=2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值:y=limit(y,x,0) y=4y=limit(y,x,-2) y=8/3事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。 例3.6.2画出上例中函数的图形 解 syms x y=(3*x2+4*x+4)/( x2+x+1); 得到如下图形ezplot(y) 如何用MATLAB求函数的极值点和最大值比如说y=x3+x2+1,怎样用matlab来算它的极值和最大值?求极值:syms x y y=x3+x2+1 diff(y) %求导ans =3*x2 + 2*x solve(ans) %求导函数为零的点ans =-2/3 0极值有两点。求最大值,既求-y的最小值: f=(x)(-x3-x2-1)f = (x)(-x3-x2-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 354Optimization terminated: relative infinity-norm of gradient less than options.TolFun.x = -0.6667 f(x)ans = -1.1481在规定范围内的最大值是1.1481由于函数的局限性,求出的极值可能是局部最小(大)值。求全局最值要用遗传算法。如何用matlab求多元函数的极值求 在 0xpi/2,0y 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-B2;%判别极大值点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*piJDZ =3/8*3(1/2)补充matlab中的绘图函数很多,三维的有好几个呢,下面我给出两种绘制方法1.使用ezmesh或者ezsurf这两个函数是简易绘图函数,可以直接使用字符串绘图ezmesh(x*y-(1/3)*(x3)+1/4*(x2)*(sqrt(2*(x2-y*2)-1/2*(y*(sqrt(2*(x2-y*2)2.先计算坐标点数据,再绘图,可以使用mesh和surf函数x,y=meshgrid(0:0.1:10);z=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);z(imag(z)=0)=nan;mesh(x,y,z)subs是赋值函数,用数值替代符号变量替换函数例如: 输入subs(a+b,a,4) 意思就是把a用4替换掉,返回 4+b也可以替换多个变量,例如:subs(cos(a)+sin(b),a,b,sym(alpha),2)分别用字符alpha替换a和2替换b,返回 cos(alpha)+sin(2)用法很灵活,仔细看帮助,会得到你想要的形式的matlab subs如何用悬赏分: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*k2)现在求出来x = 1/2*(48*a+32*k+16*wd-16*cdu-4*wf*k-4*td*k-12*a*k-10*a*k2+td*k3-8*k3+4*k2*cdu-4*k*cfu+cfu*k3+3*a*k3-6*wd*k2+wf*k3)/(5*k2-16)y = (-8*a+a*k2-2*wd*k+10*a*k+8*wf-3*wf*k2-3*td*k2+2*cfu*k2+4*k2+8*td-8*cfu-2*k*cdu)/(5*k2-16)要把x和y代回Qd,请教达人,用matlab的subs怎么写啊?万分感谢! 问题补充:Qd=(-2*x1-2*wd+2*a-a*k+y1*k+wf*k+td*k)/(4*b-2*b*k2)x1=1/2*(48*a+32*k+16*wd-16*cdu-4*wf*k-4*td*k-12*a*k-10*a*k2+td*k3-8*k3+4*k2*cdu-4*k*cfu+cfu*k3+3*a*k3-6*wd*k2+wf*k3)/(5*k2-16)y1=(-8*a+a*k2-2*wd*k+10*a*k+8*wf-3*wf*k2-3*td*k2+2*cfu*k2+4*k2+8*td-8*cfu-2*k*cdu)/(5*k2-16)subs(Qd,x1,y1,x,y)以上输入之后报错为:Undefined function 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*k2) 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函数就是替换符号表达式的函数,要计算需要用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=int(sin(x),x,0,t); y2=int(cos(x),x,0,t); plot(y1,y2) 而把 plot(y1,y2) 改成 plot(subs(y1),subs(y2) 就可以运行成功画出来了。 (1)为什么?(2)subs 在此起到什么作用? (3)而不加 subs 为什么运行不了,画不出来? 急,多谢!(上次提问时候把y1写成y1=sin(x)了,现在改为int(sin(x),x,0,t); 抱歉) 问题补充:(上次提问时候把y1写成y1=sin(x)了,现在改

温馨提示

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

评论

0/150

提交评论