【共享】matlab优化函数集锦
1
函数 linprog
格式 x = linprog(f,A,b) %求min f ' *x sub.to 线性规划的最优解。
x = linprog(f,A,b,Aeq,beq) %等式约束 ,若没有不等式约束 ,则A=[ ],b=[ ]。
x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围 ,若没有等式约束 ,则Aeq=[ ],beq=[ ]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定的优化参数
[x,fval] = linprog(…) % 返回目标函数最优值,即fval= f ' *x。
[x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange乘子。
[x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代的错误条件。
[x,fval, lambda,exitflag,output] = linprog(…) % output为关于优化的一些信息
说明 若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数。
2
foptions函数
对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:
options(1)-参数显示控制(默认值为0)。等于1时显示一些结果。
options(2)-优化点x的精度控制(默认值为1e-4)。
options(3)-优化函数F的精度控制(默认值为1e-4)。
options(4)-违反约束的结束标准(默认值为1e-6)。
options(5)-算法选择,不常用。
options(6)-优化程序方法选择,为0则为BFCG算法,为1则采用DFP算法。
options(7)-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法。
options(8)-函数值显示 (目标—达到问题中的Lambda )
options(9)-若需要检测用户提供的梯度,则设为1。
options(10)-函数和约束估值的数目。
options(11)-函数梯度估值的个数。
options(12)-约束估值的数目。
options(13)-等约束条件的个数。
options(14)-函数估值的最大次数(默认值是100×变量个数)
options(15)-用于目标 — 达到问题中的特殊目标。
options(16)-优化过程中变量的最小有限差分梯度值。
options(17)- 优化过程中变量的最大有限差分梯度值。
options(18)-步长设置 (默认为1或更小)。
Foptions已经被optimset和optimget代替,详情请查函数optimset和optimget。
3
函数 fminbnd
格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间 上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,f
val,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息
说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
4
函数 fminsearch
格式 x = fminsearch(fun,x0) %x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminsearch(fun,x0,options) % options查optimset
[x,fval] = fminsearch(…) %最优点的函数值
[x,fval,exitflag] = fminsearch(…) % exitflag与单变量情形一致
[x,fval,exitflag,output] = fminsearch(…) %output与单变量情形一致
注意:fminsearch采用了Nelder-Mead型简单搜寻法。
5
函数 fminunc
格式 x = fminunc(fun,x0) %返回给定初始点x0的最小函数值点
x = fminunc(fun,x0,options) % options为指定优化参数
[x,fval] = fminunc(…) %fval最优点x处的函数值
[x,fval,exitflag] = fminunc(…) % exitflag为终止迭代的条件,与上同。
[x,fval,exitflag,output] = fminunc(…) %output为输出优化信息
[x,fval,exitflag,output,grad] = fminunc(…) % grad为函数在解x处的梯度值
[x,fval,exitflag,output,grad,hessian] = fminunc(…) %目标函数在解x处的海赛(Hessian)值
注意:当函数的阶数大于2时,使用fminunc比fminsearch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。
6
函数 fmincon
格式 x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fmincon(…)
[x,fval,exitflag] = fmincon(…)
[x,fval,exitflag,output] = fmincon(…)
[x,fval,exitflag,output,lambda] = fmincon(…)
[x,fval,exitflag,output,lambda,grad] = fmincon(…)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(…)
参数说明:fun为目标函数,它可用前面的方法定义;
x0为初始值;
A、b满足线性不等式约束 ,若没有不等式约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的估计C和Ceq,通过指定函数柄来使用,如:>>x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = … % 计算x处的非线性不等约束 的函数值。
Ceq = … % 计算x处的非线性等式约束 的函数值。
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息;
grad表示目标函数在x处的梯度;
hessian表示目标函数
在x处的Hessiab值。
7
函数 quadprog
格式 x = quadprog(H,f,A,b) %其中H,f,A,b为标准形中的参数,x为目标函数的最小值。
x = quadprog(H,f,A,b,Aeq,beq) %Aeq,beq满足等约束条件 。
x = quadprog(H,f,A,b,Aeq,beq,lb,ub) % lb,ub分别为解x的下界与上界。
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) %x0为设置的初值
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定的优化参数
[x,fval] = quadprog(…) %fval为目标函数最优值
[x,fval,exitflag] = quadprog(…) % exitflag与线性规划中参数意义相同
[x,fval,exitflag,output] = quadprog(…) % output与线性规划中参数意义相同
[x,fval,exitflag,output,lambda] = quadprog(…) % lambda与线性规划中参数意义相同
8
函数 fseminf
格式 x = fseminf(fun,x0,ntheta,seminfcon)
x = fseminf(fun,x0,ntheta,seminfcon,A,b)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub)
x = fseminf(fun,x0,ntheta,seminfcon,A,b,Aeq,beq,lb,ub,options)
[x,fval] = fseminf(…)
[x,fval,exitflag] = fseminf(…)
[x,fval,exitflag,output] = fseminf(…)
[x,fval,exitflag,output,lambda] = fseminf(…)
参数说明:x0为初始估计值;
fun为目标函数,其定义方式与前面相同;
A、b由线性不等式约束 确定,没有,则A=[ ],b=[ ];
Aeq、beq由线性等式约束 确定,没有,则Aeq=[ ],beq=[ ];
Lb、ub由变量x的范围 确定;
options为优化参数;
ntheta为半无限约束的个数;
seminfcon用来确定非线性约束向量C和Ceq以及半无限约束的向量K1,K2,…,Kn,通过指定函数柄来使用,
收藏 分享 评分
回复 引用 订阅 TOP
亲爱的研友,请积极对对你有帮助的资源评分,请对帮助过你的会员评分,请对好的讨论贴评分!
笑石头 发短消息
加为好友
笑石头 当前离线
帖子28 积分28 技术分0 技术分 研学币87 研学币 学历 研究方向 职业 所在地 在线时间0 小时 注册时间2003-12-6 最后登录2006-12-9
新手上路
2# 发表于 2006-6-5 06:37 | 只看该作者 Re:【共享】matlab优化函数集锦
9
函数 fminimax
格式 x = fminimax(fun,x0)
x = fminimax(fun,x0,A,b)
x = fminimax(fun,x0,A,b,Aeq,beq)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fminimax(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval,maxfval] = fminimax(…)
[x,fval,maxfval,exitflag] = fminimax(…)
[x,fval,maxfval,exitflag,output] = fminimax(…)
[x,fval,maxfval,exitflag,output,lambda] = fminimax(…)
参数说明:fun为目标函数;
x0为初始值;
A、b满足线性不等约束 ,若没有不等约束,则取A=[ ],b=[ ];
Aeq、beq满足等式约束 ,若没有,则取Aeq=[ ],beq=[ ];
lb、ub满足 ,若没有界,可设lb=[ ],ub=[ ];
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束
分别在x处的值C和Ceq,通过指定函数柄来使用,如:>>x = fminimax(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon),先建立非线性约束函数,并保存为mycon.m:function [C,Ceq] = mycon(x)
C = … % 计算x处的非线性不等约束 的函数值。
Ceq = … % 计算x处的非线性等式约束 的函数值。
options为指定的优化参数;
fval为最优点处的目标函数值;
maxfval为目标函数在x处的最大值;
exitflag为终止迭代的条件;
lambda是Lagrange乘子,它体现哪一个约束有效。
output输出优化信息。
10
函数 fgoalattain
格式 x = fgoalattain(fun,x0,goal,weight)
x = fgoalattain(fun,x0,goal,weight,A,b)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
x = fgoalattain(fun,x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fgoalattain(…)
[x,fval,attainfactor] = fgoalattain(…)
[x,fval,attainfactor,exitflag] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output] = fgoalattain(…)
[x,fval,attainfactor,exitflag,output,lambda] = fgoalattain(…)
参数说明:
x0为初始解向量;
fun为多目标函数的文件名字符串,其定义方式与前面fun的定义方式相同;
goal为用户设计的目标函数值向量;
weight为权值系数向量,用于控制目标函数与用户自定义目标值的接近程度;
A、b满足线性不等式约束 ,没有时取A=[ ],b=[ ];
Aeq、beq满足线性等式约束 ,没有时取Aeq=[ ],beq=[ ];
lb、ub为变量的下界和上界: ;
nonlcon的作用是通过接受的向量x来计算非线性不等约束 和等式约束 分别在x处的值C和Ceq,通过指定函数柄来使用
options为指定的优化参数;
fval为多目标函数在x处的值;
attainfactor为解x处的目标规划因子;
exitflag为终止迭代的条件;
output为输出的优化信息;
lambda为解x处的Lagrange乘子
11
函数 lsqlin
格式 x = lsqlin(C,d,A,b) %求在约束条件 下,方程Cx = d的最小二乘解x。
x = lsqlin(C,d,A,b,Aeq,beq) %Aeq、beq满足等式约束 ,若没有不等式约束,则设A=[ ],b=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub) %lb、ub满足 ,若没有等式约束,则Aeq=[ ],beq=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0) % x0为初始解向量,若x没有界,则lb=[ ],ub=[ ]。
x = lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0,options) % options为指定优化参数
[x,resnorm] = lsqlin(…) % resnorm=norm(C*x-d)^2,即2-范数。
[x,resnorm,residual] = lsqlin(…) %residual=C*x-d,即残差。
[x,resnorm,residual,exitflag] = lsqlin(…) %exitflag为终止迭代的条件
[x,resnorm,residual,exitflag,output] = lsqlin(…) % output表示输出优化信息
[x,resnorm,residual,exitflag,output,lambda] = lsqlin(…) % lambda为解x的Lagrange乘子
12
函数 lsqcurvefit
格式 x = lsqcurvefit(fun,x0,xd
ata,ydata)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
[x,resnorm] = lsqcurvefit(…)
[x,resnorm,residual] = lsqcurvefit(…)
[x,resnorm,residual,exitflag] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqcurvefit(…)
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqcurvefit(…)
参数说明:
x0为初始解向量;xdata,ydata为满足关系ydata=F(x, xdata)的数据;
lb、ub为解向量的下界和上界 ,若没有指定界,则lb=[ ],ub=[ ];
options为指定的优化参数;
fun为拟合函数,其定义方式为:x = lsqcurvefit(@myfun,x0,xdata,ydata),
其中myfun已定义为 function F = myfun(x,xdata)
F = … % 计算x处拟合函数值fun的用法与前面相同;
resnorm=sum ((fun(x,xdata)-ydata).^2),即在x处残差的平方和;
residual=fun(x,xdata)-ydata,即在x处的残差;
exitflag为终止迭代的条件;
output为输出的优化信息;
lambda为解x处的Lagrange乘子;
jacobian为解x处拟合函数fun的jacobian矩阵。
13
函数 lsqnonlin
格式 x = lsqnonlin(fun,x0) %x0为初始解向量;fun为 ,i=1,2,…,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同。
x = lsqnonlin(fun,x0,lb,ub) %lb、ub定义x的下界和上界: 。
x = lsqnonlin(fun,x0,lb,ub,options) %options为指定优化参数,若x没有界,则lb=[ ],ub=[ ]。
[x,resnorm] = lsqnonlin(…) % resnorm=sum(fun(x).^2),即解x处目标函数值。
[x,resnorm,residual] = lsqnonlin(…) % residual=fun(x),即解x处fun的值。
[x,resnorm,residual,exitflag] = lsqnonlin(…) %exitflag为终止迭代条件。
[x,resnorm,residual,exitflag,output] = lsqnonlin(…) %output输出优化信息。
[x,resnorm,residual,exitflag,output,lambda] = lsqnonlin(…) %lambda为Lagrage乘子。
[x,resnorm,residual,exitflag,output,lambda,jacobian] =lsqnonlin(…) %fun在解x处的Jacobian矩阵。
14
函数 lsqnonneg
格式 x = lsqnonneg(C,d) %C为实矩阵,d为实向量
x = lsqnonneg(C,d,x0) % x0为初始值且大于0
x = lsqnonneg(C,d,x0,options) % options为指定优化参数
[x,resnorm] = lsqnonneg(…) % resnorm=norm (C*x-d)^2
[x,resnorm,residual] = lsqnonneg(…) %residual=C*x-d
[x,resnorm,residual,exitflag] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output] = lsqnonneg(…)
[x,resnorm,residual,exitflag,output,lambda] = lsqnonneg(…)
15
函数 fzero
格式 x = fzero (fun,x0) %用fun定义表达式f(x),x0为初始解。
x = fzero (fun,x0,options)
[x,fval] = fzero(…) %fval=f(x)
[x,fval,exitflag] = fzero(…)
[x,fval,exitflag,output] = fzero(…)
说明 该函数采用数值解求方程f(x)=0的根。
16
函数 fsolve
格式 x = fsolve(fun,x0) %用fun定义向量函数,其定义方式为:先定义方程函数function F = myfun (x)。
F
=[表达式1;表达式2;…表达式m] %保存为myfun.m,并用下面方式调用:x = fsolve(@myfun,x0),x0为初始估计值。
x = fsolve(fun,x0,options)
[x,fval] = fsolve(…) %fval=F(x),即函数值向量
[x,fval,exitflag] = fsolve(…)
[x,fval,exitflag,output] = fsolve(…)