请问用matlab怎样求一个函数的最大值
发布网友
发布时间:2022-04-21 22:14
我来回答
共5个回答
热心网友
时间:2022-05-17 10:54
用matlab求函数最大值的步骤如下:
1.
打开matlab软件,清空桌面环境;
clear
clc
2.
定义一个符号变量:
syms t
3.
定义一个函数:
y=t/(1+t*t);
再通过以下函数来查看上面的函数图像;
ezplot(y);
4.
查看该函数的图像可知,函数在0到2之间有一个极值,本例求解该最大值为例;
5.
输入以下的指令可以求得该函数最大值;
max(subs(y,t,[0:0.00001:2]));
其中0.00001是精度,求得最大值为0.5000
热心网友
时间:2022-05-17 10:54
求极值:
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
至于遗传算法,以后提个复杂的问题再回答。
热心网友
时间:2022-05-17 10:55
fminsearch函数为不使用微分运算的全局寻优;
fminunc函数为使用微分运算的全局寻优;
fmincon函数为使用微分运算的受限寻优;
fminbnd函数为使用微分运算的区间寻优;
参数定义详见matlab帮助。注意前两个函数都是全局寻优,而对于区间寻优而言,要使用fminbnd函数。对于本例应为fminbnd(@(x)x^3+x^2+1, LowerBound, UpperBound),其中LowerBound和UpperBound分别表示开区间左右端点。
热心网友
时间:2022-05-17 10:56
f=inline('x.^3+x.^2+1')
[x,y]=fminbnd(f,-2,2)
ezplot('x.^3+x.^2+1')
因为在图像上可看到是单调递增的,所以只需带入x的最大值即可
热心网友
时间:2022-05-17 10:56
先写个函数:
function out=myfun(x)
out=x^3+x^2+1;
再用fminbnd(@myfun,min,max)