用MATLAB求极值

2019-02-15 22:26

用MATLAB求极值

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

3x2?4x?4例3.6.1 求y?的极值 2x?x?1解 首先建立函数关系: syms s

y=(3*x^2+4*x+4)/( x^2+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

事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。 例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 0

极值有两点。

求最大值,既求-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)

0

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)

补充

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

1.使用ezmesh或者ezsurf这两个函数是简易绘图函数,可以直接使用字符串绘图 ezmesh('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))))')

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


用MATLAB求极值.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2011年洛阳市教育教学研究课题立项申报书(中岳学区) - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: