用MATLAB求极值

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

用MATLAB求极值

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

例3.6.1 求

2

2

344

1

x x

y

x x

++

=

++

的极值

解首先建立函数关系:

s yms s

y=(3*x^2+4*x+4)/( x^2+x+1); ↙然后求函数的驻点:

dy=diff(y); ↙

xz=solve(dy) ↙

xz=

[0] [-2]

知道函数有两个驻点x

1=0和x

2

=-2,考察函数在驻点处二阶导数的正负情况:

d2y=diff(y,2); ↙

z1=limit(d2y,x,0) ↙z1=

-2

z2=limit(d2y,x,-2) ↙z2=

2/9

于是知在x

1=0处二阶导数的值为z

1

=-2,小于0,函数有极大值;在x

2

=-2处二阶导数的值

为z

2

=2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值:

y

1

=limit(y,x,0) ↙

y

1

=

4

y

2

=limit(y,x,-2) ↙

y

2

=

8/3

事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MA TLAB的作图功能,我们很容易做到这一点。

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

解syms x ↙

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

ezplot(y) ↙

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

比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值?

求极值:

syms x y

>> y=x^3+x^2+1

>> diff(y) %求导

ans =

3*x^2 + 2*x

>> solve(ans)%求导函数为零的点

ans =

-2/3

极值有两点。

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

>> f=@(x)(-x^3-x^2-1)

f = @(x)(-x^3-x^2-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

>> f(x)

ans =

-1.1481

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

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

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

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

求在0

当X=pi/3 y=pi/3 z有极大值 3/8*3^(1/2)

%定义二元函数

clc;clear;

syms x y;

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)

相关文档
最新文档