找回密码
 注册
Simdroid-非首页
查看: 109|回复: 6

最小二乘的讨论(lsqlin ,\,lsqnonneg)

[复制链接]
发表于 2011-5-11 07:58:08 | 显示全部楼层 |阅读模式 来自 四川成都
最小二乘在工程上运用 的比较多,尤其是实际现场得到一系列量测数据,需要求某个不容易精确测量的参数的时候。而且测量参数的数量往往多于你反推的参数,这就需要运用优化的方法来求近似解,怎么才能更好的解决这个问题呢?我觉得有必要讨论这个问题,勉励共进。
发表于 2011-5-11 13:10:05 | 显示全部楼层 来自 黑龙江哈尔滨
Simdroid开发平台
已经是比较成熟的方法了,以前讨论够多了,可以翻翻以前的贴子,泛泛的讨论没什么可讨论的了,没什么意义,如果有具体问题,可以贴上来再讨论。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-15 19:32:32 | 显示全部楼层 来自 四川成都
我计算了一个两个参数的最小二乘的例子:
准确值为20,40;
有100组测量数据,其中c为系数矩阵,d为准确解,d1为扰动d的正负2%扰动值,所求参数为大于零作为约束条件。同时计算cond(c)=76.1092,也就是说系数矩阵的条件数比较小,扰动影响较小,三种方法都可以。
程序如下:
c=[0.0000E+00 0.0000E+00
1.6442E-07 3.3162E-07
6.4651E-07 1.3153E-06
1.4296E-06 2.9344E-06
2.4969E-06 5.1721E-06
3.8317E-06 8.0117E-06
5.4173E-06 1.1437E-05
7.2370E-06 1.5430E-05
9.2741E-06 1.9975E-05
1.1512E-05 2.5055E-05
1.3933E-05 3.0654E-05
1.6522E-05 3.6754E-05
1.9262E-05 4.3339E-05
2.2135E-05 5.0392E-05
2.5125E-05 5.7896E-05
2.8215E-05 6.5836E-05
3.1389E-05 7.4193E-05
3.4630E-05 8.2952E-05
3.7921E-05 9.2095E-05
4.1246E-05 1.0161E-04
4.4587E-05 1.1147E-04
4.7931E-05 1.2166E-04
5.1275E-05 1.3218E-04
5.4619E-05 1.4299E-04
5.7963E-05 1.5409E-04
6.1307E-05 1.6546E-04
6.4651E-05 1.7708E-04
6.7995E-05 1.8893E-04
7.1339E-05 2.0100E-04
7.4683E-05 2.1327E-04
7.8027E-05 2.2572E-04
8.1371E-05 2.3834E-04
8.4716E-05 2.5111E-04
8.8060E-05 2.6402E-04
9.1404E-05 2.7704E-04
9.4748E-05 2.9016E-04
9.8092E-05 3.0337E-04
1.0144E-04 3.1664E-04
1.0478E-04 3.2997E-04
1.0812E-04 3.4332E-04
1.1147E-04 3.5670E-04
1.1481E-04 3.7007E-04
1.1816E-04 3.8345E-04
1.2150E-04 3.9683E-04
1.2484E-04 4.1020E-04
1.2819E-04 4.2358E-04
1.3153E-04 4.3695E-04
1.3488E-04 4.5033E-04
1.3822E-04 4.6371E-04
1.4156E-04 4.7708E-04
1.4491E-04 4.9046E-04
1.4825E-04 5.0383E-04
1.5160E-04 5.1721E-04
1.5494E-04 5.3059E-04
1.5828E-04 5.4396E-04
1.6163E-04 5.5734E-04
1.6497E-04 5.7072E-04
1.6832E-04 5.8409E-04
1.7166E-04 5.9747E-04
1.7500E-04 6.1084E-04
1.7835E-04 6.2422E-04
1.8169E-04 6.3760E-04
1.8504E-04 6.5097E-04
1.8838E-04 6.6435E-04
1.9172E-04 6.7772E-04
1.9507E-04 6.9110E-04
1.9841E-04 7.0448E-04
2.0176E-04 7.1785E-04
2.0510E-04 7.3123E-04
2.0844E-04 7.4460E-04
2.1179E-04 7.5798E-04
2.1513E-04 7.7136E-04
2.1848E-04 7.8473E-04
2.2182E-04 7.9811E-04
2.2516E-04 8.1149E-04
2.2851E-04 8.2486E-04
2.3185E-04 8.3824E-04
2.3520E-04 8.5161E-04
2.3854E-04 8.6499E-04
2.4189E-04 8.7837E-04
2.4523E-04 8.9174E-04
2.4857E-04 9.0512E-04
2.5192E-04 9.1849E-04
2.5526E-04 9.3187E-04
2.5861E-04 9.4525E-04
2.6195E-04 9.5862E-04
2.6529E-04 9.7200E-04
2.6864E-04 9.8538E-04
2.7198E-04 9.9875E-04
2.7533E-04 1.0121E-03
2.7867E-04 1.0255E-03
2.8201E-04 1.0389E-03
2.8536E-04 1.0523E-03
2.8870E-04 1.0656E-03
2.9205E-04 1.0790E-03
2.9539E-04 1.0924E-03
2.9873E-04 1.1058E-03
3.0208E-04 1.1191E-03
3.0542E-04 1.1325E-03
3.0877E-04 1.1459E-03
3.1211E-04 1.1593E-03];
d=[0.0000E+00
1.6553E-05
6.5543E-05
1.4597E-04
2.5682E-04
3.9710E-04
5.6581E-04
7.6194E-04
9.8448E-04
1.2324E-03
1.5048E-03
1.8006E-03
2.1188E-03
2.4584E-03
2.8184E-03
3.1977E-03
3.5955E-03
4.0107E-03
4.4422E-03
4.8891E-03
5.3505E-03
5.8252E-03
6.3126E-03
6.8121E-03
7.3230E-03
7.8445E-03
8.3761E-03
8.9171E-03
9.4667E-03
1.0024E-02
1.0589E-02
1.1161E-02
1.1739E-02
1.2322E-02
1.2910E-02
1.3502E-02
1.4097E-02
1.4694E-02
1.5294E-02
1.5895E-02
1.6497E-02
1.7099E-02
1.7701E-02
1.8303E-02
1.8905E-02
1.9507E-02
2.0109E-02
2.0711E-02
2.1313E-02
2.1915E-02
2.2516E-02
2.3118E-02
2.3720E-02
2.4322E-02
2.4924E-02
2.5526E-02
2.6128E-02
2.6730E-02
2.7332E-02
2.7934E-02
2.8536E-02
2.9138E-02
2.9740E-02
3.0342E-02
3.0943E-02
3.1545E-02
3.2147E-02
3.2749E-02
3.3351E-02
3.3953E-02
3.4555E-02
3.5157E-02
3.5759E-02
3.6361E-02
3.6963E-02
3.7565E-02
3.8167E-02
3.8769E-02
3.9370E-02
3.9972E-02
4.0574E-02
4.1176E-02
4.1778E-02
4.2380E-02
4.2982E-02
4.3584E-02
4.4186E-02
4.4788E-02
4.5390E-02
4.5992E-02
4.6594E-02
4.7195E-02
4.7797E-02
4.8399E-02
4.9001E-02
4.9603E-02
5.0205E-02
5.0807E-02
5.1409E-02
5.2011E-02
5.2613E-02];
x0=cond(c)
x1=c\d
[x2,resnorm]=lsqnonneg(c,d)
[x3,resnorm]=lsqlin(c,d,[],[],[],[],[0,0],[],[],optimset('largescale','off'))
d1=[0.0000E+00
1.6666E-05
6.6277E-05
1.4888E-04
2.5274E-04
4.0257E-04
5.7015E-04
7.7125E-04
9.9420E-04
1.2119E-03
1.4779E-03
1.7881E-03
2.0814E-03
2.4787E-03
2.8283E-03
3.1648E-03
3.6609E-03
4.0902E-03
4.3830E-03
4.9623E-03
5.3321E-03
5.7703E-03
6.2404E-03
6.6801E-03
7.2150E-03
7.7428E-03
8.3812E-03
8.7934E-03
9.3299E-03
1.0217E-02
1.0743E-02
1.1204E-02
1.1903E-02
1.2479E-02
1.3021E-02
1.3501E-02
1.4138E-02
1.4715E-02
1.5439E-02
1.5698E-02
1.6691E-02
1.7092E-02
1.7906E-02
1.8186E-02
1.8644E-02
1.9661E-02
2.0309E-02
2.0965E-02
2.0952E-02
2.2202E-02
2.2786E-02
2.2878E-02
2.3453E-02
2.4682E-02
2.5225E-02
2.5085E-02
2.5660E-02
2.6320E-02
2.7083E-02
2.7461E-02
2.8134E-02
2.9522E-02
2.9265E-02
3.0861E-02
3.1410E-02
3.1882E-02
3.2749E-02
3.3077E-02
3.3327E-02
3.3300E-02
3.4838E-02
3.5089E-02
3.6281E-02
3.6344E-02
3.7092E-02
3.7175E-02
3.8053E-02
3.8558E-02
3.8833E-02
3.9977E-02
4.0400E-02
4.0724E-02
4.2032E-02
4.2463E-02
4.3024E-02
4.3557E-02
4.4106E-02
4.4534E-02
4.4680E-02
4.6663E-02
4.6061E-02
4.7625E-02
4.8469E-02
4.8792E-02
4.9196E-02
5.0261E-02
5.0882E-02
4.9843E-02
5.0933E-02
5.1782E-02
5.3325E-02];
x4=c\d1
[x5,resnorm]=lsqnonneg(c,d1)
[x6,resnorm]=lsqlin(c,d1,[],[],[],[],[0,0],[],[],optimset('largescale','off'))
x0 =
   76.1092

x1 =
   20.0014
   39.9996

x2 =
   20.0014
   39.9996

resnorm =
  2.2548e-011
Optimization terminated.
x3 =
   20.0014
   39.9996

resnorm =
  2.2548e-011

x4 =
   19.3635
   40.1961

x5 =
   19.3635
   40.1961

resnorm =
  1.0015e-005
Optimization terminated.
x6 =
   19.3635
   40.1961

resnorm =
  1.0015e-005

得出结论上述三种方法都该问题都有效。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-15 20:03:33 | 显示全部楼层 来自 四川成都
我又计算了一个4个参数的最小二乘的例子:
准确值为10,20,30,40;
有100组测量数据,其中c为系数矩阵,d为准确解,d1为扰动d的正负2%扰动值,所求参数为大于零作为约束条件。
条件数算得:647.9880
运算 过程及结果为:
c=[0.0000E+00        0.0000E+00        0.0000E+00        0.0000E+00
6.4651E-07        1.3153E-06        1.9841E-06        2.6529E-06
2.4969E-06        5.1721E-06        7.8473E-06        1.0523E-05
5.4173E-06        1.1437E-05        1.7456E-05        2.3475E-05
9.2741E-06        1.9975E-05        3.0676E-05        4.1377E-05
1.3933E-05        3.0654E-05        4.7374E-05        6.4094E-05
1.9262E-05        4.3339E-05        6.7416E-05        9.1493E-05
2.5125E-05        5.7896E-05        9.0668E-05        1.2344E-04
3.1389E-05        7.4193E-05        1.1700E-04        1.5980E-04
3.7921E-05        9.2095E-05        1.4627E-04        2.0044E-04
4.4587E-05        1.1147E-04        1.7835E-04        2.4523E-04
5.1275E-05        1.3218E-04        2.1310E-04        2.9403E-04
5.7963E-05        1.5409E-04        2.5040E-04        3.4671E-04
6.4651E-05        1.7708E-04        2.9011E-04        4.0313E-04
7.1339E-05        2.0100E-04        3.3208E-04        4.6317E-04
7.8027E-05        2.2572E-04        3.7620E-04        5.2669E-04
8.4716E-05        2.5111E-04        4.2233E-04        5.9354E-04
9.1404E-05        2.7704E-04        4.7033E-04        6.6361E-04
9.8092E-05        3.0337E-04        5.2006E-04        7.3676E-04
1.0478E-04        3.2997E-04        5.7141E-04        8.1285E-04
1.1147E-04        3.5670E-04        6.2422E-04        8.9174E-04
1.1816E-04        3.8345E-04        6.7837E-04        9.7331E-04
1.2484E-04        4.1020E-04        7.3373E-04        1.0574E-03
1.3153E-04        4.3695E-04        7.9015E-04        1.1439E-03
1.3822E-04        4.6371E-04        8.4751E-04        1.2327E-03
1.4491E-04        4.9046E-04        9.0568E-04        1.3237E-03
1.5160E-04        5.1721E-04        9.6451E-04        1.4166E-03
1.5828E-04        5.4396E-04        1.0239E-03        1.5114E-03
1.6497E-04        5.7072E-04        1.0836E-03        1.6080E-03
1.7166E-04        5.9747E-04        1.1437E-03        1.7061E-03
1.7835E-04        6.2422E-04        1.2039E-03        1.8058E-03
1.8504E-04        6.5097E-04        6.6210E-04        1.9067E-03
1.9172E-04        6.7772E-04        7.2213E-04        2.0089E-03
1.9841E-04        7.0448E-04        7.8190E-04        2.1122E-03
2.0510E-04        7.3123E-04        8.4127E-04        2.2163E-03
2.1179E-04        7.5798E-04        9.0010E-04        2.3213E-03
2.1848E-04        7.8473E-04        9.5827E-04        2.4270E-03
2.2516E-04        8.1149E-04        1.0156E-03        2.5332E-03
2.3185E-04        8.3824E-04        1.0721E-03        2.6397E-03
2.3854E-04        8.6499E-04        1.1274E-03        2.7466E-03
2.4523E-04        8.9174E-04        1.1816E-03        2.8536E-03
2.5192E-04        9.1849E-04        1.2344E-03        2.9606E-03
2.5861E-04        9.4525E-04        1.2857E-03        3.0676E-03
2.6529E-04        9.7200E-04        1.3355E-03        3.1746E-03
2.7198E-04        9.9875E-04        1.3834E-03        3.2816E-03
2.7867E-04        1.0255E-03        1.4296E-03        3.3886E-03
2.8536E-04        1.0523E-03        1.4737E-03        3.4956E-03
2.9205E-04        1.0790E-03        1.5157E-03        3.6026E-03
2.9873E-04        1.1058E-03        1.5554E-03        3.7096E-03
3.0542E-04        1.1325E-03        1.5927E-03        3.8167E-03
3.1211E-04        1.1593E-03        1.6274E-03        3.9237E-03];
d=[0.0000E+00
1.9841E-04
7.8473E-04
1.7456E-03
3.0676E-03
4.7374E-03
6.7416E-03
9.0668E-03
1.1700E-02
1.4627E-02
1.7835E-02
2.1311E-02
2.5042E-02
2.9017E-02
3.3223E-02
3.7648E-02
4.2281E-02
4.7109E-02
5.2121E-02
5.7303E-02
6.2645E-02
6.8134E-02
7.3761E-02
7.9517E-02
8.5391E-02
9.1376E-02
9.7460E-02
1.0364E-01
1.0989E-01
1.1622E-01
1.2261E-01
1.1100E-01
1.1749E-01
1.2402E-01
1.3057E-01
1.3713E-01
1.4371E-01
1.5028E-01
1.5683E-01
1.6337E-01
1.6988E-01
1.7634E-01
1.8277E-01
1.8914E-01
1.9546E-01
2.0173E-01
2.0793E-01
2.1408E-01
2.2015E-01
2.2615E-01
2.3208E-01];
d1=[0.0000E+00
1.9965E-04
7.8627E-04
1.7795E-03
3.0569E-03
4.6877E-03
6.6801E-03
9.0264E-03
1.1927E-02
1.4746E-02
1.7759E-02
2.1424E-02
2.4680E-02
2.9510E-02
3.3885E-02
3.8353E-02
4.3019E-02
4.6307E-02
5.1752E-02
5.6953E-02
6.2977E-02
6.7414E-02
7.3538E-02
7.8715E-02
8.5457E-02
9.2536E-02
9.8606E-02
1.0505E-01
1.1141E-01
1.1592E-01
1.2472E-01
1.1096E-01
1.1957E-01
1.2479E-01
1.3249E-01
1.3594E-01
1.4253E-01
1.5038E-01
1.5720E-01
1.6423E-01
1.6666E-01
1.7760E-01
1.7998E-01
1.9004E-01
1.9393E-01
2.0382E-01
2.0741E-01
2.1451E-01
2.2272E-01
2.2756E-01
2.3434E-01];
cond(c)
x1=c\d
[x2,resnorm]=lsqnonneg(c,d)
[x3,resnorm]=lsqlin(c,d,[],[],[],[],[0,0],[],[],optimset('largescale','off'))
x4=c\d1
[x5,resnorm]=lsqnonneg(c,d1)
[x6,resnorm]=lsqlin(c,d1,[],[],[],[],[0,0],[],[],optimset('largescale','off'))

ans =

  647.9880


x1 =

   10.0324
   19.9925
   29.9980
   40.0004


x2 =

   10.0324
   19.9925
   29.9980
   40.0004


resnorm =

  2.5269e-010

Optimization terminated.

x3 =

   10.0324
   19.9925
   29.9980
   40.0004


resnorm =

  2.5269e-010


x4 =

   10.3532
   15.8662
   31.6694
   40.6966


x5 =

   10.3532
   15.8662
   31.6694
   40.6966


resnorm =

  6.2233e-005

Optimization terminated.

x6 =

   10.3532
   15.8662
   31.6694
   40.6966


resnorm =

  6.2233e-005

很明显,640多的条件数,当准确值有2%扰动时已经不能算出准确值了。
同时我还计算了5个参数的情况,条件数更大,1600多,扰动有0.1%的时候已经计算不出准确值了,我想问一下各位前辈,这种情况下如何解决呢?也就是条件数大的情况如何求这些参数,我想 知道你matlab的局限性还是算法上的问题,优化的教材我也看了不少,望指教,谢谢!!!!!
回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-15 20:06:13 | 显示全部楼层 来自 四川成都
2# messenger
版主你好,我从这学期 才开始接触matlab,我找了很久,我没找到前面你说过的最小二乘这方面讨论,能不能给个链接谢谢!
回复 不支持

使用道具 举报

发表于 2011-5-15 20:29:46 | 显示全部楼层 来自 黑龙江哈尔滨
随便搜搜“最小二乘”,就可以搜出很多贴子呀。比如这个http://forum.simwe.com/thread-842865-1-1.html
看你最近发的有关“最小二乘”的贴子,总是执着於“扰动”。“cond大,扰动带来比较夸张的变化正常啊”,大家觉得是常识的东西,你却总是在研究,这就是为什么你的贴子没人回的原因。
建议你先好好学习一下数值分析方面的知识,Matlab版侧重於求解过程中的知识和技巧,不太多涉及基础知识。
回复 不支持

使用道具 举报

 楼主| 发表于 2011-5-16 09:04:02 | 显示全部楼层 来自 四川成都
6# messenger
谢谢版主,我论文主要是这方面的内容,所以才这样把参数由少到多进行运算。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-4 19:33 , Processed in 0.033978 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表