用MATLAB求极值.docx

上传人:b****3 文档编号:2293521 上传时间:2022-10-28 格式:DOCX 页数:10 大小:83.23KB
下载 相关 举报
用MATLAB求极值.docx_第1页
第1页 / 共10页
用MATLAB求极值.docx_第2页
第2页 / 共10页
用MATLAB求极值.docx_第3页
第3页 / 共10页
用MATLAB求极值.docx_第4页
第4页 / 共10页
用MATLAB求极值.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

用MATLAB求极值.docx

《用MATLAB求极值.docx》由会员分享,可在线阅读,更多相关《用MATLAB求极值.docx(10页珍藏版)》请在冰豆网上搜索。

用MATLAB求极值.docx

用MATLAB求极值

用MATLA求极值

灵活的运用MATLA的计算功能,可以很容易地求得函数的极值。

3x+4x+4

例3.6.1求y二34的极值

解首先建立函数关系:

symss

y=(3*x^2+4*x+4)/(xA2+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,函数有极大值;在x2=-2处二阶导数的值为z2=2/9,大于0,函数有极小值。

如果需要,可顺便求出极值点处的函数值:

y1=limit(y,x,0)/

y1=

4

y2=limit(y,x,-2)/

y2=

8/3

事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。

而借

助MATLA啲作图功能,我们很容易做到这一点。

例3.6.2画出上例中函数的图形

解symsx/

y=(3*xA2+4*x+4)/(xA2+x+1);/得到如下图形

ezplot(y)/

(3x2+4x+4)/(k2+x+1)

 

 

如何用MATLAB求函数的极值点和最大值

比如说y=xA3+xA2+1,怎样用matlab来算它的极值和最大值?

求极值:

symsxy

求导

%求导函数为零的点

>>y=xA3+xA2+1

>>diff(y)%

ans=

3*xA2+2*x>>solve(ans)ans=

-2/3

0

极值有两点。

求最大值,既求-y的最小值:

>>f=@(x)(-xA3-xA2-1)

f=@(x)(-xA3-xA2-1)

>>x=fminunc(f,-3,3)%在-3;-3范围内找

Warning:

Gradientmustbeprovidedfortrust-regionmethod;usingline-searchmethodinstead.

>Infminuncat354

Optimizationterminated:

relativeinfinity-norm

options.TolFun.

x=

ofgradientless

than

-0.6667

>>f(x)

ans=

-1.1481

在规定范围内的最大值是1.1481

由于函数的局限性,求出的极值可能是局部最小(大)值。

求全局最值要用遗传算法。

如何用matlab求多元函数的极值

:

函数z.=sin(^c)sin(+y)泊

求在0

大值

内的极

当X=pi/3y=pi/3z

有极大值3/8*3A(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-BA2;

%判别极大值点

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*3A(1/2)

补充

matlab中的绘图函数很多,三维的有好几个呢,下面我给出两种绘制方法

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,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)

用法很灵活,仔细看帮助,会得到你想要的形式的

matlabsubs女M可用

囂悬赏分:

0-解决时间:

2008-12-317:

36

在解一个模型,其中:

Qd=(-2*x-2*wd+2*a-a*k+y*k+wf*k+td*k)/(4*b-2*b*kA2)

现在求出来

x=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*k

A2*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*cfu-2*k*cdu)/(5*kA2-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*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})

以上输入之后报错为:

Undefinedfunctionorvariable'x1'.

请问是哪里除了问题?

提问者:

nxdviola-

最佳答案

symsx1,y1Qd

Qd=(-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-822:

16

使用d=subs(f4,{x,y,z},{2,3,1})后,

结果给出了一个很长的代数式,里面有pi和atan,但都没有计算,为什么不给出一个最终的数字结果?

提问者:

再见长江-二级

最佳答案

subs函数就是替换符号表达式的函数,要计算需要用eval函数

急询:

Matlab中subs(S)的应用疑问?

僧悬赏分:

5-解决时间:

2006-6-2912:

57

急询:

Matlab中subs(S)的应用疑问?

1.subs(S)到底是什么函数?

其什么作用,谢谢!

2.下段绘图程序如下的话就画出不来:

symsxt;

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)了,现在改为int(sin(x),x,0,t);

抱歉)

请具体讲一下subs(S)到底是什么意思?

(我知道subs(f,x,t)是什么意思,但我不

明白sub(S)在此到底具体是什么意思?

请详细一下,谢谢!

提问者:

wanglicun-二级

最佳答案

subs(S)的意思是:

S以前是sym变量,subs(S)为double变量,plot只能对double变量作图。

求函数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=sin(x);

y仁max(y);

x1=x(find(y==y1));

y2=min(y);

x2=x(find(y==y2));

Plot(x,y);

holdon

plot(x1,y1,'r*');

plot(x2,y2,'g*');

离散数据就极值点

%方法一

x=0:

0.01:

20;

y=2*sin(x/2)+cos(2*x)/2;

%indmax=find(diff(sign(diff(y)))<0)+1;%极大值点

%indmin二find(diff(sign(diff(y)))>0)+1;%极小值点

ind=find(diff(sign(diff(y)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1