matlab 最小二乘最优问题

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)的数据;

相关文档
最新文档