方程求解极值优化问题.docx
《方程求解极值优化问题.docx》由会员分享,可在线阅读,更多相关《方程求解极值优化问题.docx(10页珍藏版)》请在冰豆网上搜索。
方程求解极值优化问题
问题1:
(约束非线性)
求:
在区间[2,5]间的最小值;在区间[0,3]间的最大值。
程序:
fn='2*exp(-x)*sin(x)';
[xmin,fmin]=fminbnd(fn,2,5)
fm='-2*exp(-x)*sin(x)';
[xmax,fmax]=fminbnd(fm,0,3)
结果:
xmin=3.9270
fmin=-0.0279
xmax=0.7854
fmax=-0.6448
语法:
x=fminbnd(fun,x1,x2)
x=fminbnd(fun,x1,x2,options)
x=fminbnd(fun,x1,x2,options,P1,P2,……)
[x,fval]=fminbnd(……)
[x,fval,exitflag]=fminbnd(……)
[x,fval,exitflag,output]=fminbnd(……)
含义:
x:
设计变量
fun:
目标函数
x1,x2:
设置设计变量给定区间的上下界值
fval:
返回目标函数在最优解x点的函数值
exitglag:
返回算法的终止标志
output:
返回优化算法信息的一个数据结构
问题2:
求解无约束条件下多变量函数的最小值,fminsearch函数和fminunc函数相同。
求函数
的最小值
程序:
%f(x)的myfun41.m文件
functionf=myfun41(x)
f=3*x
(1)^2+2*x
(1)*x
(2)+x
(2)^2;
%调用函数fminunc,myh41.m
%起始点
x0=[11]
[x,fval]=fminunc(@myfun41,x0)
结果:
Optimizationterminatedsuccessfully:
Searchdirectionlessthan2*options.TolX
x=
1.0e-008*
-0.75120.2479
fval=
1.3818e-016
问题3:
求函数
的最小值
程序:
%f(x)的.m文件myfun42.m
functionf=myfun42(x)
f=sin(x)+3;
%调用函数fminsearch,myh42.m
%起始点
x0=2;
[x,fval]=fminsearch(@myfun42,x0)
结果:
x=
4.7124
fval=
2.0000
语法:
x=fminserach(fun,x0)
x=fminserach(fun,x0,options)
x=fminserach(fun,x0,options,P1,P2,…)
[x,fval]=fminserach(…)
[x,fval,exitflag]=fminserach(…)
[x,fval,exitflag,output]=fminserach(…)
x=fminunc(fun,x0)
x=fminuvc(fun,x0,options)
x=fminunc(fun,x0,options,P1,P2,…)
[x,fval]=fminunc(…)
[x,fval,exitflag]=fminunc(…)
[x,fval,exitflag,output]=fminunc(…)
[x,fval,exitflag,output,grad]=fminunc(…)
[x,fval,exitflag,output,grad,hessian]=fminunc(…)
问题4:
优化工具箱中其他函数:
方程求解函数
1、fsolve函数:
求解非线性方程(计算零点)
语法:
x=fsolve(fun,x0)
x=fsolve(fun,x0,options)
x=fsolve(fun,x0,options,P1,P2,…)
[x,fval]=fsolve(…)
[x,fval,exitflag]=fsolve(…)
[x,fval,exitflag,output]=fsolve(…)
[x,fval,exitflag,output,jacobian]=fsolve(…)
求解方程组:
取x0=[-5,–5]
即求解:
的零点
%程序myfun71.m
functionf=myfun71(x)
f=[2*x
(1)-x
(2)-exp(-x
(1));-x
(1)+2*x
(2)-exp(-x
(2))];
%程序myh71.m
x0=[-5;-5];
options=optimset(‘Display’,’iter’);
[x,fval]=fsolve(@fun71,x0,options)
结果:
x=
0.5671
0.5671
fval=
1.0e-006*
-0.4059
-0.4059
2、fzero函数:
求解单变量连续函数的零点
已知:
f(x),求f(x)=0的根。
语法:
x=fzero(fun,x0)
x=fzero(fun,x0,options)
x=fzero(fun,x0,options,P1,P2,…)
[x,fval]=fzero(…)
[x,fval,exitflag]=fzero(…)
[x,fval,exitflag,output]=fzero(…)
3、求解函数:
在x=2附近的零点。
%程序myfun72.m
functionf=myfun72(x)
f=x.^3-2*x-5;
%程序myh72.m
z=fzero(@myfun72,2)
结果:
z=
2.0946
问题5:
(线性规划,有约束等式不等式):
某车间有甲乙两台机床,可用于加工三种工件,这两台机床的可用台时数分别为700和800,三种工件的数量分别为300、500和400,已知机床加工情况如下表:
问如何分配机床的加工任务,才能既满足加工工件的要求,又使总加工费用最低?
解:
设在甲机床上加工工件1、2和3的数量分别是x1、x2和x3,在乙机床上加工工件1、2和3的数量分别是x4、x5和x6,根据条件可建立数学模型:
程序:
f=[13;9;10;11;12;8];
A=[0.41.11000
0000.51.21.3];
b=[700;800];
aeq=[100100
010010
001001];
beq=[300500400];
lb=zeros(6,1);
[x,fval,exitflag]=linprog(f,A,b,aeq,beq,lb)
运行结果:
x=
0.0000
500.0000
0.0000
300.0000
0.0000
400.0000
fval=
1.1000e+004
exitflag=
1
即:
在甲机床上加工500个工件2,在乙机床上加工300个工件1,加工400个工件3,可在满足条件情况下使总加工费用最小,为11000元。
且收敛正常。
语法:
x=linprog(f,A,b,aeq,beq)
x=linprog(f,A,b,aeq,beq,lb,ub)
x=linprog(f,A,b,aeq,beq,lb,ub,x0)
x=linprog(f,A,b,aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(……)
[x,fval,exitflag]=linprog(……)
[x,fval,exitflag,output]=linprog(……)
[x,fval,exitflag,output,lambda]=linprog(……)
含义:
x:
设计变量
f:
目标函数的系数矩阵
A:
不等式约束的系数矩阵
b:
不等式约束值的列向量
Aeq:
等式约束的系数矩阵
Beq:
等式约束值的列向量
lb,ub:
设计向量的上下界值
fval:
返回目标函数在最优解x点的函数值
exitglag:
返回算法的终止标志
output:
返回优化算法信息的一个数据结构