2022年用MATLAB求极值 .pdf

上传人:Q****o 文档编号:27521032 上传时间:2022-07-25 格式:PDF 页数:12 大小:480.79KB
返回 下载 相关 举报
2022年用MATLAB求极值 .pdf_第1页
第1页 / 共12页
2022年用MATLAB求极值 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年用MATLAB求极值 .pdf》由会员分享,可在线阅读,更多相关《2022年用MATLAB求极值 .pdf(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

2、 在 x2=-2 处二阶导数的值为 z2=2/9 ,大于 0,函数有极小值。如果需要,可顺便求出极值点处的函数值:y1=limit(y,x,0) y1= 4 y2=limit(y,x,-2) y2= 8/3 事实上, 如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助 MATLAB 的作图功能,我们很容易做到这一点。例 3.6.2画出上例中函数的图形解 syms x y=(3*x2+4*x+4)/( x2+x+1); 得到如下图形ezplot(y) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心

3、整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 页脚如何用 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) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -

4、- - - - 第 2 页,共 12 页 - - - - - - - - - 页脚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 354 Optimization terminated: relative infinity-norm of gradient less than options.TolFun. x = -0.6667

5、f(x) ans = -1.1481 在规定范围内的最大值是1.1481 由于函数的局限性,求出的极值可能是局部最小(大)值。求全局最值要用遗传算法。如何用 matlab 求多元函数的极值求在 0 xpi/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

6、=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

7、*pi JDZ = 3/8*3(1/2) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - 页脚补充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. 先计算坐标点数据,再

8、绘图,可以使用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(al

9、pha)+sin(2) 用法很灵活,仔细看帮助,会得到你想要的形式的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - - - - - - - 页脚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-

10、12*a*k-10*a*k2+td*k3-8*k3+4*k 2*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*cf u-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+1

11、6*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

12、 x1,y1 Qd Qd=(-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)后,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - 页脚结果给出了一个很长的代数式,里面有

13、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) 而把

14、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)了,现在改为int(sin(x),x,0,t); 抱歉 ) 请具体讲一下subs(S)到底是什么意思?(我知道subs(f ,x,t )是什么意思,但我不明白 sub(S)在此到底具体是什么意思?请详细一下,谢谢!)提问者:w

15、anglicun - 二级最佳答案subs(S)的意思是:S以前是 sym变量, subs (S)为 double 变量, plot只能对 double 变量作图。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - 页脚曲线极值的标注:用 matlab 中 plot 绘制的曲线时,把曲线上峰值的大小标注在上面你指的是离散点的最大和最小值吧?给你个简单的例子看看:求函数),(yxfz极值的一般步骤:第一步解方程组,0),(yxfx0

16、),(yxfy求出实数解,得驻点 .第二步对于每一个驻点),(00yx,求出二阶偏导数的值 A、B、C.第三步定出2BAC的符号,再判定是否是极值 .名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - 页脚代码:x=0:pi/50:2*pi;y=sin(x);y1=max(y);x1=x(find(y=y1);y2=min(y);x2=x(find(y=y2);plot(x,y);hold onplot(x1,y1,r*);plo

17、t(x2,y2,g*); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - 页脚离散数据就极值点% 方法一x=0:0.01:20; y=2*sin(x/2)+cos(2*x)/2; % indmax=find(diff(sign(diff(y)0)+1;%极小值点ind=find(diff(sign(diff(y)=0)+1;%极值点plot(x,y,x(ind),y(ind),ro)% 方法二x=0:0.01:20; y=2*

18、sin(x/2)+cos(2*x)/2; indmax=intersect(find(diff(y)0)+1,find(diff(y)0);%极大值点indmin=intersect(find(diff(y)0);%极小值点plot(x,y,x(indmax),y(indmax),ro,x(indmin),y(indmin),go)% 方法三x=0:0.01:20; y=2*sin(x/2)+cos(2*x)/2; yf=y(2:end-1)-y(1:end-2); %前向差分yb=y(2:end-1)-y(3:end); %后向差分I=find(yf.*yb=0)+1; %寻找极值点 ( 不

19、考虑首尾两点 ) plot(x,y,b,x(I),y(I),r*);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - 页脚function zhudian,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 );zhudian=zhudian;n=length(zhudian)d2y=diff(d

20、y);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); zhudian=solve(dx=0,dy=0,x,y)%solve(dy); zhudian=zhudian; %disp(zhudian); n=length(zhudiam); %disp(n); d2y=diff(dy); disp(d2y); for i=1:n 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - 页脚 if double(subs(d2y,x,zhudian(i)0 disp(zhudian(i) else if 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com