用MATLAB求函数f(x)=x^3-x^2-x-b/3的极值,可以先用图形来判断,是否有最大(小)值存在。求解过程如下:
>> x=-10:10;b=6;
>> f=x^3-x^2-x-b/3;
>> plot(x,f) %绘图
>> func=@(x)x^3-x^2-x-6/3;
>> [x,g]=fminsearch(func,0) %极小值
>> func=@(x)-(x^3-x^2-x-6/3);
>> [x,g]=fminsearch(func,0) %极大值
极小值:x = 10000;g = -3
极大值:x = -03333;g = 18148
有三种方法:导数为0求极值、优化算法(运用函数)、绘图观察有2个函数:[x,feal,exitflag,output]=fminbnd(fun,x1,x2,options)[x,feal,exitflag,output]=fminsearch(fun,x0,options)%若exitflag给出数大于0,则成功找到极值点,x,fval分别是极值点和对应的目标函数极值运用函数的例子:在-10《x《10区间,求函数最小值x1=-10;x2=10;yx=@(x)(sin(x)^2)exp(-01x)-05sin(x)(x+01));[xn0,fval,exitflag,output]=fminbnd(yx,x1,x2)解:先对方程求偏导数,即首先将X2看作常数,将X1看作自变量求导数得:Y'(X1)=693569-225646X1(1)
然后将X1看作常数,将X2看作自变量求导数得:
Y'(X2)=155-2017X2(2)
当Y'(X1)=0时,代入(1)解得:X1=13522;
当Y'(X1)=0时,代入(2)解得:X2=45588
显然两个自变量的数值都在规定范围内,且Y'(X1)的值随X1增大而减小,Y'(X2)的值X2增大而减小,故原方程有最大值。将两值代入原方程得最大值:
Ymax=-3856444+9378440+706614-4689230+353305
=1892685>> f=@(x)(x^3+cos(x)+xlog(x))/exp(x);
>> [x,fval]=fminbnd(f,0,1)
x =
05223
fval =
03974
>> f=@(x)(2x(1)^3+4x(1)x(2)^3-10x(1)x(2)+x(2)^2);
>> [x,fval]=fminsearch(f,[0 0])
x =
10016 08335
fval =
-33241
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)