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

[1stOpt] 请教非线性回归的约束问题

[复制链接]
发表于 2007-8-23 08:51:39 | 显示全部楼层 |阅读模式 来自 江西南昌
本人在学习过程中遇见如下问题,原代码如:
Title "lianxi";
Parameters b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14;
Variable x1,x2,x3,x4,y;
Function y=b0+b1*x1+b2*x2+b3*x3+b4*x4+b5*x1^2+b6*x2^2+b7*x3^2+b8*x4^2+b9*x1*x2+b10*x1*x3
+b11*x1*x4+b12*x2*x3+b13*x2*x4+b14*x3*x4
Data;
x1      x2      x3     x4        y
0.1        2        50        3        2.76
0.1        2.2        30        4        5.61
0.1        2.4        100        5        6.73
0.1        2.6        80        6        6.3
0.125        2        140        7        4.26
0.125        2.2        120        8        6.11
0.125        2.4        180        9        7.32
0.125        2.6        160        10        8.14
0.15        2        160        6        3.23
0.15        2.2        180        5        2.63
0.15        2.4        120        4        2.17
0.15        2.6        140        3            -0.12
0.175        2        80        10        6.42
0.175        2.2        100        9        7.42
0.175        2.4        30        8        8.33
0.175        2.6        50        7        6.23
0.2        2        80        4        1.99
0.2        2.2        50        5        4.11
0.2        2.4        100        3             1.53
0.2        2.6        30        6        6.04
0.225        2        160        8        1.44
0.225        2.2        140        9        3.28
0.225        2.4        180        7            -0.42
0.225        2.6        120        10        3.17
0.25        2        120        6        1.18
0.25        2.2        180        5              0.02
0.25        2.4        140        4        -0.41
0.275        2        30        9        5.33
0.275        2.2        100        8        3.43
0.275        2.4        50        10        8.23
0.275        2.6        80        7        1.3
本来有这些数据就可以求出回归系数bi的数值,只是对回归方程还要有精度要求,即还需要拟合出来方程所计算出来的值要与测量值的误差不超过0.2,例如:
|y-2.76|/2.76<0.2
     :
     :
  |y-1.3|/1.3<0.2等等
因为我初学,所以不知道该怎么做,还望高手可以指教,谢谢,谢谢,在谢谢!
发表于 2007-9-7 23:05:01 | 显示全部楼层 来自 北京
Simdroid开发平台
1:约束没必要每个都加进去,求出一个最大的相对误差,令其小于0.2就可以了。
2:y值里面有负数,因此约束应该写为,如|(y-2.76)/2.76|<0.2更妥一些。
3:在新版中,需用编程模式,代码如下:

Title "lianxi";
Parameters b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14;
Constant ObsY(0:30)="CodeSheet1[E2:E32]";
Variable x1,x2,x3,x4,y;
StartProgram [Pascal];
Procedure MainModel;
var j: jnteger;
    MD, ty: double;
Begjn
     MD := 0;
     for j := 0 to DataLength -1 do begjn
         ty := b0+b1*x1[j]+b2*x2[j]+b3*x3[j]+b4*x4[j]+b5*x1[j]*x1[j]+b6*x2[j]*x2[j]+b7*x3[j]*x3[j]+
                b8*x4[j]*x4[j]+b9*x1[j]*x2[j]+b10*x1[j]*x3[j]+b11*x1[j]*x4[j]+b12*x2[j]*x3[j]+
                b13*x2[j]*x4[j]+b14*x3[j]*x4[j];
         Y[j] := ty;
         MD := max(MD, abs((ty-ObsY[j])/(ObsY[j])));
     end;
     ConstrainedResult := MD <= 0.2;//b0-b1>=50;
End;
EndProgram;
DataFile "CodeSheet1[A2:E32]";

得结果:
计算用时(时:分:秒:微秒): 00:00:58:694
优化算法: 标准简面体爬山法 + 通用全局优化法
计算结束原因: 达到收敛判定标准
均方差(RMSE): 0.379756910196733
残差平方和(SSE): 4.47067463610725
相关系数(R): 0.990083211235877
相关系数之平方(R^2): 0.980264765171146
决定系数(DC): 0.980196324488447
F统计(F-Statistic): 57.7093450248869

参数                  最佳估算
--------------------        -------------
b0                 -99.8325581105142
b1                 50.8805206203998
b2                 84.2899488270138
b3                 0.16303995991574
b4                 -1.28505375636831
b5                 140.565830917191
b6                 -16.1499898754271
b7                 9.77167971385141E-5
b8                 0.117126092025976
b9                 -37.8288151464277
b10                -0.177617100246274
b11                -4.19770752456546
b12                -0.0737917435348729
b13                0.645979493754242
b14                -0.00198162797150319

====== 输出结果 =====

文件:codesheet1[a2:e32]
No        实测y        计算y
1        2.76        2.72265158620542
2        5.61        5.68833051727664
3        6.73        5.81411633587974
4        6.3        6.81825148892813
5        4.26        4.38996424005984
6        6.11        6.90430915557773
7        7.32        7.22816651598634
8        8.14        7.98745413912157
9        3.23        2.8829911177924
10        2.63        2.92361560021449
11        2.17        2.60399999997134
12        -0.12        -0.143999999996021
13        6.42        6.3418513156899
14        7.42        6.34015438944065
15        8.33        8.75990818610653
16        6.23        6.05826726596714
17        1.99        1.74397449587034
18        4.11        4.01200763818647
19        1.53        1.83599999997479
20        6.04        5.62237089710149
21        1.44        1.72799999996667
22        3.28        3.4113397315445
23        -0.42        -0.494212097875859
24        3.17        3.56975711054973
25        1.18        1.20648994238717
26        0.02        0.0160000000123408
27        -0.41        -0.394411434415617
28        5.33        5.67525892952546
29        3.43        3.10250940804167
30        8.23        8.02490897571131
31        1.3        1.44486437232721

保证相对绝对误差都小于0.2

[ 本帖最后由 shamohu 于 2007-9-7 23:08 编辑 ]
回复 不支持

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-14 05:58 , Processed in 0.053378 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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