1、第五讲第五讲 MatlabMatlab优化工具箱简介优化工具箱简介 -optimization toobox-optimization toobox1.1.线性优化线性优化2.2.非线性优化非线性优化3.3.极小化极大极小化极大(MinmaxMinmax)问题问题4.4.曲线拟合与插值曲线拟合与插值1线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB7.0解决的线性规划问题的标准形式为 min sub.to:其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵.其它形式的线性规划问题都可经过适当变换化为此标准形式.在MATLAB5.x以上版中,线性规划问题Linear Pr
2、ogramming已用函数linprog取代了MATLAB5.x版中的lp函数.当然,由于版本的向下兼容性,一般说来,低版本中的函数在7.0版中仍可使用.nRxxfbxAbeqxAequbxlb5.1 线性优化2函数 linproglinprog格式 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,
3、ub,x0)%设置初值x0.x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)%options为指定的优化参数.bxA3x,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为关于优化的一些信息.说明:若exitflag0表示函数收敛于解x,exitf
4、lag=0表示超过函数估值或迭代的最大次数,exitflagf=-5;-4;-6;%写成行向量亦可!A=1-1 1;3 2 4;3 2 0;b=20;42;30;lb=zeros(3,1);x,fval,exitflag,output,lambda=linprog(f,A,b,lb)结果为:x=%最优解 0.0000 15.0000 3.0000fval=%最优值 -78.0000exitflag=%收敛 16output=iterations:6%迭代次数 cgiterations:0 algorithm:lipsol%所使用规则lambda=ineqlin:3x1 double eqlin
5、:0 x1 double upper:3x1 double lower:3x1 double lambda.ineqlinans=0.0000 1.5000 0.5000 lambda.lowerans=1.0000 0.0000 0.0000表明:不等约束条件2和3以及第1个下界是有效的.7请写出下面线性规划的请写出下面线性规划的MatlabMatlab程序程序.8c=-0.4-0.28-0.32-0.72-0.64-0.6;c=-0.4-0.28-0.32-0.72-0.64-0.6;A=0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 A
6、=0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08;0.02 0 0 0.05 0;0 0 0.03 0 0 0.08;b=850;700;100;900;b=850;700;100;900;Aeq=;beq=;Aeq=;beq=;vlb=0;0;0;0;0;0;vub=;vlb=0;0;0;0;0;0;vub=;x,fval=linprog(c,A,b,Aeq,beq,vlb,vub)x,fval=linprog(c,A,b,Aeq,beq,vlb,vub)9MATLABMA
7、TLAB求解优化问题的主要函数求解优化问题的主要函数10优化函数的输入变量优化函数的输入变量 11优化函数的输出变量优化函数的输出变量 125.2非线性优化5.2.1 5.2.1 有约束的一元函数的最小值有约束的一元函数的最小值单变量函数求最小值的标准形式为 sub.to 函数 fminbndfminbnd格式 x=fminbnd(fun,x1,x2)%返回自变量x在区间上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄.x=fminbnd(fun,x1,x2,options)x,fval=fminbnd()x,fval,exitflag=fminbnd
8、()x,fval,exitflag,output=fminbnd()x(fminx21xxx13例5-2 计算下面函数在区间(0,1)内的最小值.x3exlogxxcosx)x(f解:x,fval,exitflag,output=fminbnd(x3+cos(x)+x*log(x)/exp(x),0,1)x=0.5223fval=0.3974exitflag=1output=iterations:9 funcCount:9 algorithm:golden section search,parabolic interpolation141)3x()x(f3例5-3 在0,5上求下面函数的最小值
9、解:先自定义函数:在MATLAB编辑器中建立M文件为:function f=myfun(x)f=(x-3).2-1;保存为myfun.m,然后在命令窗口键入命令:x=fminbnd(myfun,0,5)则结果显示为:x=3155.2.2 5.2.2 无约束多元函数最小值无约束多元函数最小值多元函数最小值的标准形式为其中:x为向量.命令 利用函数fminsearch求无约束多元函数最小值.函数 fminsearchfminsearch格式 x=fminsearch(fun,x0)%x0为初始点,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄.x=fminsearch(fun,x0
10、,options)%options查optimset.x,fval=fminsearch()%最优点的函数值.x,fval,exitflag=fminsearch()%exitflag与单变量情形一致.x,fval,exitflag,output=fminsearch()%output与单变量情形一致.)x(fminxx,x,xxn2116222132131xxx10 xx4x2y例5-4 求 的最小值点.解:X=fminsearch(2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2,0,0)结果为 X=1.0016 0.8335或在MATLAB编辑器中建立函数文
11、件.function f=myfun(x)f=2*x(1)3+4*x(1)*x(2)3-10*x(1)*x(2)+x(2)2;保存为myfun.m,在命令窗口键入 X=fminsearch(myfun,0,0)或 X=fminsearch(myfun,0,0)结果为:X=1.0016 0.8335175.2.3 5.2.3 有约束的多元函数最小值有约束的多元函数最小值非线性有约束的多元函数的标准形式为:sub.to 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)是返回向量的函数,f(x)为目标函数,f(x)、C(x)、Ceq(x)可以是非线性函数.在MATLA
12、B5.x中,它的求解由函数constr实现.)x(fminx0)x(C0)x(CeqbxAbeqxAequbxlb18函数 fminconfmincon格式 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
13、,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()19参数说明:fun为目标函数,它可用前面的方法定义;nonlcon的作用是通过接受的向量x来计算非线性不等约束和等式约束分别在x处的估计C和Ceq,通过指定函数柄来使用,如:x=fmincon(myfun,x0,A,b,Aeq,beq,lb,ub,mycon),先建
14、立非线性约束函数,并保存为mycon.m:function C,Ceq=mycon(x)C=%计算x处的非线性不等约束的函数值.Ceq=%计算x处的非线性等式约束的函数值.lambda是Lagrange乘子,它体现哪一个约束有效.output输出优化信息;grad表示目标函数在x处的梯度;hessian表示目标函数在x处的Hessian值.20例5-5 求下面问题在初始点(0,1)处的最优解21212221x5x2xxxx0 x)1x(22106x3x221min sub.to 解:约束条件的标准形式为:sub.to 先在MATLAB编辑器中建立非线性约束函数文件:function c,ceq
15、=mycon(x)c=(x(1)-1)2-x(2);ceq=;%无等式约束.0 x)1x(2216x3x22121然后,在命令窗口键入如下命令或建立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=;%无线性等式约束.beq=;lb=;%x没有下、上界.ub=;x,fval,exitflag,output,lambda,grad,hessian=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,mycon)22则结果为x=3 4fval=-13exitflag=1%解
16、收敛.output=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表示约束无效.23 eqlin:0 x1 double%线性等式约束有效情况,不为0表示约束有效.eqnonlin:0 x1 double%非线性等式约束有效情况.ineqlin:2.5081e-
17、008%线性不等式约束有效情况.neqnonlin:6.1938e-008%非线性不等式约束有效情况.grad=%目标函数在最小值点的梯度.1.0e-006*-0.1776 hessian=hessian=%目标函数在最小值点的Hessian值.1.0000 -0.0000 1.0000 -0.0000 -0.0000 1.0000 -0.0000 1.0000245.2.4 5.2.4 二次规划问题二次规划问题二次规划问题(quadratic programming)的标准形式为:sub.to 其中,H、A、Aeq为矩阵,f、b、beq、lb、ub、x为向量其它形式的二次规划问题都可转化为标
18、准形式.MATLAB5.x版中的qp函数已被6.0版中的函数quadprog取代。xfxHx21minbxAbeqxAeqbuxbl25函数 quadprogquadprog格式 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
19、,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与线性规划中参数意义相同.263xx)0,0(xx0110)xx(213xx)xx(fmin2121212121例5-6 求二次规划的最优解 max f(x1,x2
20、)=x1x2+3 sub.to x1+x2-2=0解:化成标准形式:sub.to x1+x2=227在Matlab中实现如下:H=0,-1;-1,0;f=0;0;Aeq=1 1;b=2;x,fval,exitflag,output,lambda=quadprog(H,f,Aeq,b)结果为:x=1.0000 1.000028fval=-1.0000exitflag=4output=iterations:1 algorithm:large-scale:projective preconditioned conjugate gradients f irstorderopt:0 cgiteratio
21、ns:1 message:Optimization terminated:local minimum found;the solution is singular.lambda=eqlin:1.0000 ineqlin:lower:upper:295.3 极小化极大(Minmax)问题)x(FmaxminiFxi0)x(C0)x(CeqbxAbeqxAequbxlbsub.to 其中:x、b、beq、lb、ub是向量,A、Aeq为矩阵,C(x)、Ceq(x)和F(x)是返回向量的函数,F(x)、C(x)、Ceq(x)可以是非线性函数.301.什么是传统机械按键设计?传统的机械按键设计是需要手动
22、按压按键触动PCBA上的开关按键来实现功能的一种设计方式。传统机械按键设计要点:1.合理的选择按键的类型,尽量选择平头类的按键,以防按键下陷。2.开关按键和塑胶按键设计间隙建议留0.050.1mm,以防按键死键。3.要考虑成型工艺,合理计算累积公差,以防按键手感不良。传统机械按键结构层图:按键开关键PCBA函数 fminimaxfminimax格式 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,
23、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()32例5-7 求下列函数最大值的最小化问题其中:)x(f ,)x(f ,)x(f ,)x(f ,)x(f54321304x40 x48xx2)x(f
24、212221122222x3x)x(f18x3x)x(f213214xx)x(f8xx)x(f21533解:先建立目标函数文件,并保存为myfun.m:function f=myfun(x)f(1)=2*x(1)2+x(2)2-48*x(1)-40*x(2)+304;f(2)=-x(1)2-3*x(2)2;f(3)=x(1)+3*x(2)-18;f(4)=-x(1)-x(2);f(5)=x(1)+x(2)-8;然后,在命令窗口键入命令:x0=0.1;0.1;%初始值x,fval=fminimax(myfun,x0)结果为:x=4.0000 4.0000fval=0.0000 -64.0000
25、-2.0000 -8.0000 -0.0000345.4 曲线拟合与插值 在大量的应用领域中,人们经常面临用在大量的应用领域中,人们经常面临用一个解析一个解析函数描述数据函数描述数据(通常是测量值通常是测量值)的任务的任务.对这个问题有对这个问题有两种方法两种方法.插值插值:在插值法里,数据假定是正确的,要求以在插值法里,数据假定是正确的,要求以某种方法描述数据点之间所发生的情况某种方法描述数据点之间所发生的情况.曲线拟合曲线拟合:曲线拟合或回归是人们设法找出某条光:曲线拟合或回归是人们设法找出某条光滑曲线,它滑曲线,它最佳地拟合数据最佳地拟合数据,但不必要经过任何数,但不必要经过任何数据点据
26、点.35标有标有oo的是数据点;连接数据点的实线描绘了的是数据点;连接数据点的实线描绘了线性内插线性内插,虚线是数据的虚线是数据的最佳拟合最佳拟合.00.10.20.30.40.50.60.70.80.91-2024681012 x y=f(x)Second Order Curve Fitting 36 曲线拟合的两个基本问题:曲线拟合的两个基本问题:1.1.最佳拟合意味着什么?最佳拟合意味着什么?2.2.应该用什么样的曲线?应该用什么样的曲线?可用许多不同的方法定义最佳拟合,并存在无可用许多不同的方法定义最佳拟合,并存在无穷数目的曲线穷数目的曲线.当最佳拟合被解释为在数据点的最小误差平方当最
27、佳拟合被解释为在数据点的最小误差平方和,且所用的曲线限定为多项式时,那么曲线拟和,且所用的曲线限定为多项式时,那么曲线拟合是相当简捷的合是相当简捷的.数学上,称为数学上,称为多项式的最小二乘多项式的最小二乘曲线拟合曲线拟合.1 Matlab 曲线拟合37 虚线和标志的数据点之间的垂直距离是在该点的误差虚线和标志的数据点之间的垂直距离是在该点的误差.对各对各数据点距离求平方,并把平方距离全加起来,就是误差平方和数据点距离求平方,并把平方距离全加起来,就是误差平方和.这条虚线是使这条虚线是使误差平方和尽可能小的曲线误差平方和尽可能小的曲线,即是,即是最佳拟合最佳拟合.最最小二乘这个术语仅仅是使误差
28、平方和最小的省略说法小二乘这个术语仅仅是使误差平方和最小的省略说法.00.10.20.30.40.50.60.70.80.91-2024681012 x y=f(x)Second Order Curve Fitting 38Matlab 曲线拟合和插值命令曲 线 拟 合 和 插 值 函 数polyfit(x,y,n)对描述n阶多项式y=f(x)的数据 进行最小二乘曲线拟合interp1(x,y,xo)1维线性插值interp1(x,y,xo,spline)1维3次样条插值interp1(x,y,xo,cubic)1维3次插值interp2(x,y,Z,xi,yi)2维线性插值interp2(x
29、,y,Z,xi,yi,cubic)2维3次插值interp2(x,y,Z,xi,yi,nearest)2维最近邻插值39x=0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1;y=-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2;n=2;p=polyfit(x,y,n)ezplot(-9.8108*x*x+20.1293*x-0.0317)%二次多项式系数%既是p的输出,该命令为画出拟合曲线.xi=linspace(0,1,100);%x-axis data for plotting z=polyval(p,xi)%求出
30、多项式在xi点处的取值.plot(x,y,o ,x,y,xi,z,:)xlabel(x),ylabel(y=f(x),title(Second Order Curve Fitting)4000.10.20.30.40.50.60.70.80.91-2024681012 x y=f(x)Second Order Curve Fitting 41 多项式阶次的选择是任意的多项式阶次的选择是任意的.两点决定一直线或两点决定一直线或一阶多项式一阶多项式.三点决定一个平方或三点决定一个平方或2 2阶多项式阶多项式.按此进按此进行,行,n+1n+1数据点唯一地确定数据点唯一地确定n n阶多项式阶多项式.于
31、是,在上于是,在上面的情况下,面的情况下,有有1111个数据点,我们可选一个高达个数据点,我们可选一个高达1010阶的多项式阶的多项式.然而,高阶多项式给出很差的数值特性,然而,高阶多项式给出很差的数值特性,人们不应选择比所需的阶次高的多项式人们不应选择比所需的阶次高的多项式.此外,随着此外,随着多项式阶次的提高,近似变得不够光滑,因为较高多项式阶次的提高,近似变得不够光滑,因为较高阶次多项式在变零前,可多次求导阶次多项式在变零前,可多次求导.4200.20.40.60.81-20246810121416xy=f(x)2nd and 10th Order curve Fitting 原始数据标
32、以原始数据标以oo,2 2阶曲线拟合是虚线阶曲线拟合是虚线,1010阶拟合是实线阶拟合是实线.注注意,在意,在1010阶拟合中,在左边和右边的极值处,数据点之间出现阶拟合中,在左边和右边的极值处,数据点之间出现大的纹波大的纹波.当企图进行高阶曲线拟合时,这种纹波现象经常发生当企图进行高阶曲线拟合时,这种纹波现象经常发生.显然,显然,越多就越好越多就越好 的观念在这里不适用的观念在这里不适用.432 插值命令 插值定义为对数据点之间函数的估值方法插值定义为对数据点之间函数的估值方法,这些,这些数据点是由某些集合给定数据点是由某些集合给定.当人们不能很快地求出所当人们不能很快地求出所需中间点的函数
33、值时,插值是一个有价值的工具需中间点的函数值时,插值是一个有价值的工具.例例如,当数据点是某些实验测量的结果或是过长的计如,当数据点是某些实验测量的结果或是过长的计算过程时,就有这种情况算过程时,就有这种情况.最简单插值的例子是最简单插值的例子是MATLABMATLAB的作图的作图.按缺省,按缺省,MATLABMATLAB用直线连接所用的数据点以作图用直线连接所用的数据点以作图.这个这个线性线性插值猜测中间值落在数据点之间的直线上插值猜测中间值落在数据点之间的直线上.当然,当当然,当数据点个数的增加和它们之间距离的减小时,线性数据点个数的增加和它们之间距离的减小时,线性插值就更精确插值就更精确
34、.例如例如:44 x1=linspace(0,2*pi,60);x2=linspace(0,2*pi,6);plot(x1,sin(x1),x2,sin(x2),-)xlabel(x),ylabel(sin(x),title(Linear Interpolation)01234567-1-0.500.51xsin(x)Linear Interpolation一个在数据点之间用一个在数据点之间用6060个点,它比另一个只用个点,它比另一个只用6 6个点更光滑和更精确个点更光滑和更精确.45 如曲线拟合一样,插值要作决策如曲线拟合一样,插值要作决策.根据所作的假设,根据所作的假设,有多种插值有多种
35、插值.而且,可以在一维以上空间中进行插值而且,可以在一维以上空间中进行插值.即即如果有反映两个变量函数的插值,如果有反映两个变量函数的插值,z=f(x,y)z=f(x,y),那么就可,那么就可在在x x之间和在之间和在y y之间,找出之间,找出z z的中间值进行插值的中间值进行插值.MATLAB.MATLAB在一维函数在一维函数interp1interp1和在二维函数和在二维函数interp2interp2中,提供了许中,提供了许多的插值选择多的插值选择.为了说明一维插值,考虑下列问题,为了说明一维插值,考虑下列问题,1212小时内,一小时内,一小时测量一次室外温度小时测量一次室外温度.数据存
36、储在两个数据存储在两个MATLABMATLAB变量变量中中.46 hours=1:12;%index for hour data was recorded temps=5 8 9 15 25 29 31 30 22 25 27 24;%recorded temperatures plot(hours,temps,hours,temps,+)%view temperatures title(Temperature)xlabel(Hour),ylabel(Degrees Celsius)0246810125101520253035HourDegrees CelsiusTemperature47 正
37、如上图看到的,正如上图看到的,MATLABMATLAB画出了画出了数据点线性插值的直数据点线性插值的直线线.为了计算在任意给定时间的温度,人们可试着对可视的为了计算在任意给定时间的温度,人们可试着对可视的图作解释图作解释.另外一种方法,可用函数另外一种方法,可用函数interp1.interp1.t=interp1(hours,temps,9.3)%estimate temperature at hour=9.3t=22.9000 t=interp1(hours,temps,4.7)%estimate temperature at hour=4.7t=22 t=interp1(hours,te
38、mps,3.2 6.5 7.1 11.7)%find temp at many points!t=10.2000 30.0000 30.9000 24.900048 interp1 interp1的缺省用法是由的缺省用法是由interp1(x,y,xo)interp1(x,y,xo)来描述,来描述,这里这里x x是独立变量是独立变量(横坐标横坐标),y y是应变量是应变量(纵坐标纵坐标),xoxo是进行插值的一个数值数组是进行插值的一个数值数组.另外,该缺省的使用假定另外,该缺省的使用假定为线性插值为线性插值.若不采用直线连接数据点,我们可采用某些若不采用直线连接数据点,我们可采用某些更光滑更
39、光滑的曲线来拟合数据点的曲线来拟合数据点.最常用的方法是用一个最常用的方法是用一个3 3阶多项阶多项式,即式,即3 3次多项式,来对相继数据点之间的各段建模,次多项式,来对相继数据点之间的各段建模,每个每个3 3次多项式的头两个导数与该数据点相一致次多项式的头两个导数与该数据点相一致.这种这种类型的插值被称为类型的插值被称为3 3次样条或简称为样条次样条或简称为样条.函数函数interp1interp1也能执行也能执行3 3次样条插值次样条插值.49 t=interp1(hours,temps,9.3,spline)%estimate temperature at hour=9.3t=21.8
40、577 t=interp1(hours,temps,4.7,spline)%estimate temperature at hour=4.7t=22.3143 t=interp1(hours,temps,3.2 6.5 7.1 11.7,spline)t=9.6734 30.0427 31.1755 25.382050interp1interp1二个强约束二个强约束:(1 1)人们不能要求有独立变量范围以外的结果,)人们不能要求有独立变量范围以外的结果,例如,例如,interp1(hours,temps,13.5)interp1(hours,temps,13.5)导致一个导致一个错误,因为错误
41、,因为hourshours在在1 1到到1212之间变化之间变化.(2 2)独立变量必须是单调的)独立变量必须是单调的.即独立变量在值即独立变量在值上必须总是增加的或总是减小的上必须总是增加的或总是减小的.二维插值是基于与一维插值同样的基本思想二维插值是基于与一维插值同样的基本思想.然而,正如名字所隐含的,二维插值是对两变然而,正如名字所隐含的,二维插值是对两变量的函数量的函数z=f(x,y)z=f(x,y)进行插值进行插值.513.3.非线性数据(曲线)拟合非线性数据(曲线)拟合非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x,xd
42、ata),但不知道系数向量x.今进行曲线拟合,求x使得下式成立:函数 lsqcurvefitlsqcurvefit格式 x=lsqcurvefit(fun,x0,xdata,ydata)x=lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)x,resnorm=lsqcurvefit()x,resnorm,residual,exitflag,output,lambda=lsqcurvefit()x,resnorm,residual,exitflag,output,lambda,jacobian=lsqcurvefit()i2ii22x)ydata)xdat
43、a,x(F(21ydata)xdata,x(F21min52resnorm=sum(fun(x,xdata)-ydata).2),即在x处残差的平方和;residual=fun(x,xdata)-ydata,即在x处的残差;exitflag为终止迭代的条件;output为输出的优化信息;lambda为解x处的Lagrange乘子;jacobian为解x处拟合函数fun的jacobian矩阵.53例5-8 求解如下最小二乘非线性拟合问题已知输入向量xdata和输出向量ydata,且长度都是n,拟合函数为即目标函数为其中:初始解向量为x0=0.3,0.4,0.1。32)i(xdata)3(x)i(
44、xdatasin()2(x)i(xdata)1(x)i(ydatan1i2iix)ydata)xdata,x(F(21min32xdata)3(x)xdatasin()2(xxdata)1(x)xdata,x(F54解:先建立拟合函数文件,并保存为myfun.mfunction F=myfun(x,xdata)F=x(1)*xdata.2+x(2)*sin(xdata)+x(3)*xdata.3;然后给出数据xdata和ydataxdata=3.6 7.7 9.3 4.1 8.6 2.8 1.3 7.9 10.0 5.4;ydata=16.5 150.6 263.1 24.7 208.5 9.
45、9 2.7 163.9 325.0 54.3;x0=10,10,10;%初始估计值x,resnorm=lsqcurvefit(myfun,x0,xdata,ydata)结果为:Optimization terminated successfully:Relative function value changing by less than OPTIONS.TolFunx=0.2269 0.3385 0.3021resnorm=6.2950554 4 非线性最小二乘非线性最小二乘非线性最小二乘(非线性数据拟合)的标准形式为:其中:L为常数 设则目标函数可表达为其中:x为向量,F(x)为函数向量.
46、L)x(f)x(f)x(f)x(fmin2m2221x)x(f)x(f)x(f)x(Fm21i2i22x)x(f21)x(F21min56函数 lsqnonlinlsqnonlin格式 x=lsqnonlin(fun,x0)%x0为初始解向量;fun为 ,i=1,2,m,fun返回向量值F,而不是平方和值,平方和隐含在算法中,fun的定义与前面相同.x=lsqnonlin(fun,x0,lb,ub,options)%options为指定优化参数,若x没有界,则lb=,ub=.x,resnorm=lsqnonlin()%resnorm=sum(fun(x).2),即解x处目标函数值.x,resn
47、orm,residual=lsqnonlin()%residual=fun(x),即解x处fun的值.)x(fi57例5-9 求下面非线性最小二乘问题初始解向量为x0=0.3,0.4。解:先建立函数文件,并保存为myfun.m,由于lsqnonlin中的fun为向量形式而不是平方和形式,因此,myfun函数应由建立:k=1,2,10function F=myfun(x)k=1:10;F=2+2*k-exp(k*x(1)-exp(k*x(2);然后调用优化程序:x0=0.3 0.4;x,resnorm=lsqnonlin(myfun,x0)x=0.2578 0.2578resnorm=%求目标函
48、数值 124.3622101k2xkxk)eek22(2158实际问题求解(任务分配问题任务分配问题)某车间有甲、乙两台机床,可用于加工三)某车间有甲、乙两台机床,可用于加工三种工件。假定这两台车床的可用台时数分别为种工件。假定这两台车床的可用台时数分别为800800和和900900,三,三种工件的数量分别为种工件的数量分别为400400、600600和和500500,且已知用三种不同车,且已知用三种不同车床加工单位数量不同工件所需的台时数和加工费用如下表。床加工单位数量不同工件所需的台时数和加工费用如下表。问怎样分配车床的加工任务,才能既满足加工工件的要求,问怎样分配车床的加工任务,才能既满
49、足加工工件的要求,又使加工费用最低?又使加工费用最低?596543218121110913minxxxxxxz6,2,1,09003.12.15.08001.14.0500600400 x .654321635241ixxxxxxxxxxxxtsi解解 设在甲车床上加工工件设在甲车床上加工工件1 1、2 2、3 3的数量分别为的数量分别为x1x1、x2x2、x3x3,在乙车床上加工工件,在乙车床上加工工件1 1、2 2、3 3的数量分别为的数量分别为x4x4、x5x5、x6x6。可建立以下线性规划模型:可建立以下线性规划模型:60f=13 9 10 11 12 8;f=13 9 10 11 1
50、2 8;A=0.4 1.1 1 0 0 0A=0.4 1.1 1 0 0 0 0 0 0 0.5 1.2 1.3;0 0 0 0.5 1.2 1.3;b=800;900;b=800;900;Aeq=1 0 0 1 0 0Aeq=1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 1;0 0 1 0 0 1;beq=400 600 500;beq=400 600 500;vlb=zeros(6,1);vlb=zeros(6,1);vub=;vub=;x,fval=linprog(f,A,b,Aeq,beq,vlb,vub)x,fval=linprog(f,