matlab 最小二乘最优问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最小二乘最优问题(转)
默认分类2009-05-21 14:56:33 阅读62 评论1 字号:大中小
1.约束线性最小二乘
有约束线性最小二乘的标准形式为
sub.to
其中:C、A、Aeq 为矩阵;d、b、beq、lb、ub、x 是向量。
在MA TLAB5.x 中,约束线性最小二乘用函数conls 求解。
函数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 乘子
例5-15 求解下面系统的最小二乘解
系统:Cx=d
约束:;
先输入系统系数和x 的上下界:
C = [0.9501 0.7620 0.6153 0.4057;
0.2311 0.4564 0.7919 0.9354;
0.6068 0.0185 0.9218 0.9169;
0.4859 0.8214 0.7382 0.4102;
0.8912 0.4447 0.1762 0.8936];
d = [ 0.0578; 0.3528; 0.8131; 0.0098; 0.1388];
A =[ 0.2027 0.2721 0.7467 0.4659;
0.1987 0.1988 0.4450 0.4186;
0.6037 0.0152 0.9318 0.8462];
b =[ 0.5251; 0.2026; 0.6721];
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);
然后调用最小二乘命令:
[x,resnorm,residual,exitflag,output,lambda] =
lsqlin(C,d,A,b,[ ],[ ],lb,ub);
结果为:
x =
-0.1000
-0.1000
0.2152
0.3502
resnorm =
0.1672
residual =
0.0455
0.0764
-0.3562
0.1620
0.0784
exitflag =
1 %说明解x 是收敛的
output =
iterations: 4
algorithm: medium-scale: active-set firstorderopt: []
cgiterations: []
lambda =
lower: [4x1 double]
upper: [4x1 double]
eqlin: [0x1 double]
ineqlin: [3x1 double]
通过lambda.ineqlin 可查看非线性不等式约束是否有效。
2.非线性数据(曲线)拟合
非线性曲线拟合是已知输入向量xdata 和输出向量ydata,并且知道输入与输出的函数关系为ydata=F(x, xdata),但不知道系数向量x。今进行曲线拟合,求
x 使得下式成立:
在MA TLAB5.x 中,使用函数curvefit 解决这类问题。
函数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,re snorm] = 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,exitfla g,output,lambda,jacobian] =lsqcurvefit(…)
参数说明:
x0 为初始解向量;xdata,ydata 为满足关系ydata=F(x, xdata)的数据;