根据我看过的材料来说 ,求最值(极值)无非有下面几种情况。

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

值  结果为

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐