matlab syms min,matlab求最值(极值)
根据我看过的材料来说 ,求最值(极值)无非有下面几种情况。1、求简单函数的单一最值(极值)clearclct=-100:0.001:100;%初值:增量:终值symsx;y=x/(x*x+1);f=inline(y);%内联函数max=max(f(t))min=min(f(t))这里有必要介绍下内联函数,c++也有,应该说好多编程语言都有。抄来一段:在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
的
最
大
值 结果为
O(∩_∩)O~,这是今天我写的第四篇日志了。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)