0){document.write("");}if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){document.write("");}if(" />
当前位置:文档之家› 最小二乘法

最小二乘法

数学规划模型的matlab求解 非线性最小二乘lsqnonlinmatlab

数学规划模型的matlab求解
var OsObject = ""; if(https://www.doczj.com/doc/f217593551.html,erAgent.indexOf("MSIE")>0) { document.write(""); } if(isFirefox=https://www.doczj.com/doc/f217593551.html,erAgent.indexOf("Firefox")>0){ document.write("
"); } if(isSafari=https://www.doczj.com/doc/f217593551.html,erAgent.indexOf("Safari")>0) { //return "Safari"; } if(isCamino=https://www.doczj.com/doc/f217593551.html,erAgent.indexOf("Camino")>0){ //return "Camino"; } if(isMozilla=https://www.doczj.com/doc/f217593551.html,erAgent.indexOf("Gecko/")>0){ //return "Gecko"; }
今天胡老师给我们讲了数学规划模型,数学规划模型是优化模型的一种,包括线性规划模型(目标函数和约束条件都是线性函数的优化问题); 非线性规划模型(目标函数或者约束条件是非线性的函数); 整数规划(决策变量是整数值得规划问题); 多目标规划(具有多个目标函数的规划问题) ;目标规划(具有不同优先级的目标和偏差的规划问题) 动态规划(求解多阶段决策问题的最优化方法) 。数学规划模型相对比较好理解,关键是要能熟练地求出模型的解。
以下是解线性规划模型的方法:
1.线性规划问题
线性规划问题的标准形式为:
min f ' *x
sub.to:A*x其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。
MATLAB中,线性规划问题(Linear Programming)的求解使用的是函数linprog。
函数 linprog
格式 x = linprog(f,A,b) %求min f ' *x sub.to A*x<=b 线性规划的最优解。
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.非线性规划问题
利用函数fminbnd求有约束的一元函数的最小值
格式 x = fminbnd(fun,x1,x2)
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
[x,fval,exitflag,

output] = fminbnd(…) % output为优化信息
命令 利用函数fminsearch求无约束多元函数最小值
函数 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型简单搜寻法。
命令 利用函数fminunc求多变量无约束函数最小值
函数 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效果较好。
利用fmincon求线性有约束的多元函数的最小值
函数 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(…)
函数 fminbnd
格式 x = fminbnd(fun,x1,x2) %返回自变量x在区间 上函数fun取最小值时x值,fun为目标函数的表达式字符串或MATLAB自定义函数的函数柄。
x = fminbnd(fun,x1,x2,options) % options为指定优化参数选项
[x,fval] = fminbnd(…) % fval为目标函数的最小值
[x,fval,exitflag] = fminbnd(…) %xitflag为终止迭代的条件
[x,fval,exitflag,output] = fminbnd(…) % output为优化信息
说明 若参数exitflag>0,表示函数收敛于x,若exitflag=0,表示超过函数估计值或迭代的最大数字,exitflag<0表示函数不收敛于x;若参数output=iterations表示迭代次数,output=funccount表示函数赋值次数,output=algorithm表示所使用的算法。
3.二次规划问题
函数 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与线性规划中参数意义相同
4. 极小化极大(Minmax)问题
函数 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(…)
5.多目标规划问题
函数 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(…)
6.最小二乘最优问题
有约束线性最小二乘
函数 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乘子
非线性数据(曲线)拟合
函数 lsqcurvefit
格式 x = lsqcurvefit(fun,x0,xdata,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(

…)
非线性最小二乘
函数 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矩。
非负线性最小二乘
函数 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(…)
6.非线性方程(组)求解
非线性方程的解
函数 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(…)
非线性方程组的解
函数 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(…)
[x,fval,exitflag,output,jacobian] = fsolve(…) % jacobian为解x处的Jacobian阵。
其余参数与前面参数相似。
转自 程序人生

非线性最小二乘法-非线性最小二乘法




非线性最小二乘法-正文

以误差的平方和最小为准则来估计非线性静态模型参数的一种参数估计方法。设非线性系统的模型为
y=f(x,θ)

式中y是系统的输出,x是输入,θ是参数(它们可以是向量)。这里的非线性是指对参数θ的非线性模型,不包括输入输出变量随时间的变化关系。在估计参数时模型的形式f是已知的,经过N次实验取得数据(x1,y1),(x2,y1),…,(xn,yn)。估计参数的准则(或称目标函数)

选为模型的误差平方和


非线性最小二乘法就是求使Q达到极小的参数估计值孌。
由于 f的非线性,所以不能象线性最小二乘法那样用求多元函数极值的办法来得到参数估计值,而需要采用复杂的优化算法来求解。常用的算法有两类,一类是搜索算法,另一类是迭代算法。
搜索算法的思路是:按一定的规则选择若干组参数值,分别计算它们的目标函数值并比较大小;选出使目标函数值最小的参数值,同时舍弃其他的参数值;然后按规则补充新的参数值,再与原来留下的参数值进行比较,选出使目标函数达到最小的参数值。如此继续进行,直到选不出更好的参数值为止。以不同的规则选择参数值,即可构成不同的搜索算法。常用的方法有单纯形搜索法、复合形搜索法、随机搜索法等。
迭代算法是从参数的某一初始猜测值θ(0)出发,然后产生一系列的参数点θ(1)、θ(2)…,如果这个参数序列收敛到使目标函数极小的参数点孌,那么对充分大的N就可用θ(N) 作为孌。迭代算法的一般步骤是:
① 给出初始猜测值θ(0),并置迭代步数i=1。
② 确定一个向量v(i)作为第i步的迭代方向。
③ 用寻优的方法决定一个标量步长ρ(i),使得 Q(θ(i))<Q(θ(i)),其中θ(i)=θi-1+ρ(i)v(i)。
④ 检查停机规则是否满足,如果不满足,则将i加1再从②开始重复;如果满足,则取θ(i)为孌。
典型的迭代算法有牛顿-拉夫森法、高斯迭代算法、麦夸特算法、变尺度法等。
非线性最小二乘法除可直接用于估计静态非线性模型的参数外,在时间序列建模、连续动态模型的参数估计中,也往往遇到求解非线性最小二乘问题。

相关主题
文本预览
相关文档 最新文档