请问用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
由于函数的局限性,求出的极值可能是局部最小(大)值。
求全局最值要用遗传算法。
上面简单的函数可以自己估计出来:最大值为inf
至于遗传算法,以后提个复杂的问题再回答。
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
由于函数的局限性,求出的极值可能是局部最小(大)值。
求全局最值要用遗传算法。
上面简单的函数可以自己估计出来:最大值为inf
至于遗传算法,以后提个复杂的问题再回答。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fminsearch函数为不使用微分运算的全局寻优;
fminunc函数为使用微分运算的全局寻优;
fmincon函数为使用微分运算的受限寻优;
fminbnd函数为使用微分运算的区间寻优;
参数定义详见matlab帮助。注意前两个函数都是全局寻优,而对于区间寻优而言,要使用fminbnd函数。对于本例应为fminbnd(@(x)x^3+x^2+1, LowerBound, UpperBound),其中LowerBound和UpperBound分别表示开区间左右端点。
fminunc函数为使用微分运算的全局寻优;
fmincon函数为使用微分运算的受限寻优;
fminbnd函数为使用微分运算的区间寻优;
参数定义详见matlab帮助。注意前两个函数都是全局寻优,而对于区间寻优而言,要使用fminbnd函数。对于本例应为fminbnd(@(x)x^3+x^2+1, LowerBound, UpperBound),其中LowerBound和UpperBound分别表示开区间左右端点。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
f=inline('x.^3+x.^2+1')
[x,y]=fminbnd(f,-2,2)
ezplot('x.^3+x.^2+1')
因为在图像上可看到是单调递增的,所以只需带入x的最大值即可
[x,y]=fminbnd(f,-2,2)
ezplot('x.^3+x.^2+1')
因为在图像上可看到是单调递增的,所以只需带入x的最大值即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先写个函数:
function out=myfun(x)
out=x^3+x^2+1;
再用fminbnd(@myfun,min,max)
function out=myfun(x)
out=x^3+x^2+1;
再用fminbnd(@myfun,min,max)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询