matlab学习-求最小值.doc

上传人:re****.1 文档编号:558478658 上传时间:2023-04-22 格式:DOC 页数:5 大小:29KB
返回 下载 相关 举报
matlab学习-求最小值.doc_第1页
第1页 / 共5页
matlab学习-求最小值.doc_第2页
第2页 / 共5页
matlab学习-求最小值.doc_第3页
第3页 / 共5页
matlab学习-求最小值.doc_第4页
第4页 / 共5页
matlab学习-求最小值.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《matlab学习-求最小值.doc》由会员分享,可在线阅读,更多相关《matlab学习-求最小值.doc(5页珍藏版)》请在金锄头文库上搜索。

1、转matlab学习-求最小值2007-08-25 21:391.有约束的一元函数的最小值单变量函数求最小值的标准形式为 min f(x) sub.to x1<x<x2 在MATLAB5.x中使用fmin函数求其最小值。函数 fminbnd格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间 上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项x,fval = fminbnd() % fval为目标函数的最小值x,fval,ex

2、itflag = fminbnd() %xitflag为终止迭代的条件x,fval,exitflag,output = fminbnd() % output为优化信息说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。例5-3 在0,5上求下面函数的最小值f(x)=(x-3)2-1解:先自定义函数:在MATLAB编辑器中建立M文件为

3、:function f = myfun(x)f = (x-3).2- 1;保存为myfun.m,然后在命令窗口键入命令:>> x=fminbnd(myfun,0,5)则结果显示为:x = 32.无约束多元函数最小值多元函数最小值的标准形式为 min f(x)其中:x为向量,如在MATLAB5.x中使用fmins求其最小值。命令 利用函数fminsearch求无约束多元函数最小值函数 fminsearch格式 x = fminsearch(fun,x0) %x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。x = fminsearch(fun,x0,opt

4、ions) % options查optimsetx,fval = fminsearch() %最优点的函数值x,fval,exitflag = fminsearch() % exitflag与单变量情形一致x,fval,exitflag,output = fminsearch() %output与单变量情形一致注意:fminsearch采用了Nelder-Mead型简单搜寻法。命令 利用函数fminunc求多变量无约束函数最小值函数 fminunc格式 x = fminunc(fun,x0) %返回给定初始点x0的最小函数值点x = fminunc(fun,x0,options) % opti

5、ons为指定优化参数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比fminse

6、arch更有效,但当所选函数高度不连续时,使用fminsearch效果较好。例5-5 求 f(x)=3*x12+2*x1*x2+x22 的最小值。>> fun='3*x(1)2+2*x(1)*x(2)+x(2)2'>> x0=1 1;>> x,fval,exitflag,output,grad,hessian=fminunc(fun,x0)结果为:x = 1.0e-008 * -0.7591 0.2665fval = 1.3953e-016exitflag = 1output = iterations: 3 funcCount: 16 ste

7、psize: 1.2353 firstorderopt: 1.6772e-007 algorithm: 'medium-scale: Quasi-Newton line search'grad = 1.0e-006 * -0.1677 0.0114hessian = 6.0000 2.0000 2.0000 2.0000或用下面方法:>> fun=inline('3*x(1)2+2*x(1)*x(2)+x(2)2')fun = Inline function: fun(x) = 3*x(1)2+2*x(1)*x(2)+x(2)2>> x0

8、=1 1;>> x=fminunc(fun,x0)x = 1.0e-008 * -0.7591 0.26653.有约束的多元函数最小值非线性有约束的多元函数的标准形式为:min f(x)sub.to C(x)<=0 Ceq(x)=0 A*x<=b Aeq*x=beq lb<=x<=ub其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数。在MATLAB5.x中,它的求解由函数constr实现。函数 fmincon格式 x = fmincon(fu

9、n,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,fva

10、l,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 = fminco

11、n(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值。例5-6 求下面问题在初始点(0,1)处的最优解min x12+x22-x1*x2-2*x1-5*x2sub.to -(x1-1)2+x2>=0 2*x1-

12、3*x2+6>=0解:约束条件的标准形式为sub.to (x1-1)2-x2<=0 -2*x1+3*x2-6<=0先在MATLAB编辑器中建立非线性约束函数文件:function c, ceq=mycon (x)c=(x(1)-1)2-x(2);ceq= ; %无等式约束然后,在命令窗口键入如下命令或建立M文件:>>fun='x(1)2+x(2)2-x(1)*x(2)-2*x(1)-5*x(2)' %目标函数>>x0=0 1;>>A=-2 3; %线性不等式约束>>b=6;>>Aeq= ; %无线性等

13、式约束>>beq= ;>>lb= ; %x没有下、上界>>ub= ;>>x,fval,exitflag,output,lambda,grad,hessian=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon)则结果为x = 3 4fval = -13exitflag = %解收敛 1output = iterations: 2 funcCount: 9 stepsize: 1 algorithm: 'medium-scale: SQP, Quasi-Newton, line-search' firstorderopt: cgiterations: lambda = lower: 2x1 double %x下界有效情况,通过lambda.lower可查看。 upper: 2x1 double %x上界有效情况,为0表示约束无效。 eqlin: 0x1 double %线性等式约束有效情况,不为0表示约束有效。 eqnonlin: 0x1 double %非线性等式约束有效情况。 ineqlin: 2.5081e-008 %线性不等式约束有效情

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号