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
极值有两点。
求最⼤值,既求-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求导函数句柄
匿名函数
这是函数句柄的⼀种⾼级⽤法, 这样产⽣的函数句柄变量不指向特定的函数, ⽽是⼀个函数表达式. 其语法:
变量名=@(输⼊参数列表)运算表达式
例如, 前⾯那个计算变量平⽅的函数可以简单地写为这个匿名函数:
mysqr1=@(x)x.*x
之后, 执⾏mysqr1(变量名), 即可计算该变量的平⽅, 注意, mysqr1属性是函数句柄变量, ⽽不是这个表达式; 还有要注意这个表达式不需要⽤单引号括起来
发布评论