matlab求最值(极值)

 根据我看过的材料来说 ,求最值(极值)无非有下面几种情况。
     1、求简单函数的单一最值(极值)  
clear
clc
t =  -100 : 0.001 : 100 ;   %        
syms  x ;
y  =  x / ( x  *  x  +  1 ) ;
f  =  inline ( y ) ;       % 
max  =  max ( f ( t ))
min  =  min ( f ( t ))
 这里有必要介绍下内联函数,c++也有,应该说好多编程语言都有。
抄来一段:

在matlab命令窗口、程序或函数中创建局部函数时,可用inline。优点是不必将其储存为一个单独文件。在运用中有几点限制:不能调用另一个inline函数,只能由一个matlab表达式组成,并且只能返回一个变量—显然不允许[u,v]这种形式。因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline。除了这些限制,在许多情况下使用该函数非常方便。

Inline函数的一般形式为:

FunctionName=inline(‘任何有效的matlab表达式’, ‘p1’,’p2’ ,….) ,其中‘p1’,’p2’ ,…是出现在表达式中的所有变量的名字。

如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量 )

在命令窗口输入:

Fofx=inline(‘x .^2*cos(a*x)-b’ , ‘x’,’a’,’b’);

g= Fofx([pi/3 pi/3.5],4,1)

系统输出为:g=-1.5483 -1.7259

*****************************************************

feval函数如何理解

feval函数的最通常的应用是以下形式:
feval(‘functionname’,parameter),举个简单的例子:
比如要计算sin(2),当然可以直接用命令y=sin(2);利用feval,还可以这样来做:
y=feval(‘sin’,2);另外这里的函数名字还可以是一个函数句柄,即h=@sin;

y=feval(h,2);或者直接写成y=feval(@sin,2);  

2.求
函数的极值点和最大值 
比如说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
由于函数的局限性,求出的极值可能是局部最小(大)值。

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


注:此处@的用法
函数句柄
匿名函数

这是函数句柄的一种高级用法, 这样产生的函数句柄变量不指向特定的函数, 而是一个函数表达式. 其语法:

变量名=@(输入参数列表)运算表达式

例如, 前面那个计算变量平方的函数可以简单地写为这个匿名函数:

mysqr1=@(x)x.*x

之后, 执行mysqr1(变量名), 即可计算该变量的平方, 注意, mysqr1属性是函数句柄变量, 而不是这个表达式; 还有要注意这个表达式不需要用单引号括起来  

注:
fminunc 用法,找不到百度,就写英文的了
 
fminunc finds a local minimum of a function of several variables.
    X = fminunc(FUN,X0) starts at X0 and attempts to find a local minimizer
    X of the function FUN. FUN accepts input X and returns a scalar
    function value F evaluated at X. X0 can be a scalar, vector or matrix.   

3.求多元函数的极值 
 列如求最大值:
 
f=5+1350*(1-x)^(2.9)+1350*x^3*((1-y)^(2.9)-(1-x)^(2.9))+135*y^3*(1-10*(1-y^(2.9)));
其中0.8
 
matlab
f  = @ ( x )  -5-1350 * ( 1 - x ( 1 ))^ ( 2.9 ) -1350 * x ( 1 )^ 3 * (( 1 - x ( 2 ))^ ( 2.9 ) - ( 1 - x ( 1 ))^ ( 2.9 )) -135 * x ( 2 )^ 3 * ( 1-10 * ( 1 - x ( 2 )^ ( 2.9 )))
lb  =  [ 0.8 ;  0.6 ] ;  %  x  y
ub  =  [ 1 ;  0.8 ]  ;  %  x  y
x0  =  [ 0.5 ; 0.6 ] ;  %  Starting  guess  at  the  solution
[ x1 , fval1 ]  =  fmincon ( f , x0 , [ ] , [ ] , [ ] , [ ] , lb , ub ) ;
xmax2  =  x1 ( 1 )  %  x
ymax2  =  x1 ( 2 )  %  y
zmax2  =  - fval1  %  Z  
结果为
matlab求最值(极值)_第1张图片 

其实还有其他方法,这里复制来一个连接,用求导法的
 
http://blog.sina.com.cn/s/blog_5d4cce1b0100l595.html

O(∩_∩)O~,这是今天我写的第四篇日志了。 

你可能感兴趣的:(Matlab)