实验一.MATLAB求解优化问题

1.作出下列函数图形,观察所有的局部极大、极小和全局最大、最小值点的粗略位置,并用MATLAB函数fminbnd和fminsearch求各极值点的确切位置。

1)作图:

syms x
y1=x^2*sin(x^2-x-2);
ezplot(y1,[-2,2])
grid on

观察图形

 

%%利用函数fminbnd搜索极小点
y2=@(x)x.^2.*sin(x.^2-x-2);
[x,f]=fminbnd(y2,-2,2)
%%结果只是搜到局部极小点
x =-0.7315   f =-0.3582
%%改变搜索范围,得到
[x,f]=fminbnd(y2,0,2)
x = 1.5951   f =-2.2080
%%同理改变搜索范围,即可搜到全局最优解,过程略!

%%利用函数fminsearch搜索最优解
[x,f]=fminsearch(y2,-2)
%%得到全局最优解
x =-2.1708  f =-4.6438

%%寻找极大值或最大值点,只需寻找-y的极小值或最大值点即可,在此省略!

 2)作图:

syms x
y3=3*x^5-20*x^3+10;
ezplot(y3,[-3,3])
grid on

观察图形

 

y4=@(x)3*x.^5-20*x.^3+10;
[x,f]=fminbnd(y4,-3,3)
%%得结果
x = 2.0000  f =-54.0000

%在x=2附近搜索
[x,f]=fminsearch(y4, 2)
% 结果
x =2.0000
f =-54.0000
%在x=-2搜索结果非常小

Exiting: Maximum number of function evaluations has been exceeded
         - increase MaxFunEvals option.
         Current function value: 
-98201718236885578000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000 
x = -1.2677e+29
f = -9.8202e+145

3)作图:

syms x
y5=abs(x^3-x^2-x-2);
ezplot(y5,[0,3])
grid on

观察图形

 

%%%搜索极值点方法类似,省略

2.考虑函数

 

 

%%作图观察
syms x y
z=y^3/9+3*x^2*y+9*x^2+y^2+x*y+9;
ezmesh(z,[-2,1,-7 1])

 

%%似乎在x=0,y=0的附近有极小值,故在点(0,0)附近搜索
%%利用fminsearch搜索的结果

z1=@(x)x(2)^3/9+3*x(1)^2*x(2)+9*x(1).^2+x(2)^2+x(1)*x(2)+9;
[x,fval]=fminsearch(z1,[0 0])

x =0     0
fval =  9

%%利用fminunc搜索

z1=@(x)x(2)^3/9+3*x(1)^2*x(2)+9*x(1).^2+x(2)^2+x(1)*x(2)+9;
[x,fval]=fminsearch(z1,[0 0])

%结果
Initial point is a local minimum.
Optimization completed because the size of the gradient at the initial point 
is less than the default value of the function tolerance.
<stopping criteria details>
x1 =
     0     0
fval1 =   9

3.利用fmincon函数求解以下优化问题:

 

%首先定义非线性约束函数,函数名自拟,但结构要包含不等与等约束条件,并单独保存成M函数文件
function [c ceq]=nonf(x)
c=9-x(1)^2-x(2)^2;
ceq=[];
end

%在命令窗口或脚本窗口输入以下命令:

%定义目标函数
fun3=@(x) x(1)^4-4*x(1)-8*x(2)+15;
%定义非线性约束
noncon=@(x) nonf(x);
A=[2 3;-1,1];
b=[2;5];
[x,fval]=fmincon(fun3,[0,1],A,b,[],[],[],[],noncon)

%运算结果为:

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>

x =

   -2.1454    2.0969

fval =

   27.9921

即,找到局部最优解x=(-2.1454,2.0969),最优值为27.9921

%亦可以按照面向问题式求解:
clc,clear,
prob=optimproblem;
x=optimvar('x',2);
prob.Objective=x(1)^2-4*x(1)-8*x(2)+15;
prob.Constraints.con1=x(1)^2+x(2)^3>=9;
prob.Constraints.con2=[
    2*x(1)+3*x(2)<=2;
    x(2)-x(1)<=5];
[x,fval,ex,out]=solve(prob)

总结:

1、fminbnd函数是针对于一元函数求最小值的函数,它是采用的黄金分割法和抛物线插值法,只能求一元连续函数在闭区间上的极值,有时只能求局部极值,若在边界达到极值,求解速度较慢;

2、fminsearch函数是求解多元函数最小值,需给定初值x0,它采用复形搜索法;

3、fminunc与fminsearch类似,它采用大规模内点反射牛顿迭代法或中小规模的拟牛顿法,速度快于fminsearch;

故,对于求解极值问题可以优先考虑使用fminunc函数.

答案供参考,如有错误请自行改正,本人只是随意分享之前的作业,代码均来源于网络+个人稍微修改,认为有用可参考哈~

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值