起先采用分段斜率与平均值比较的方法发现不太科学
现在采用最小二乘法实现
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
![None.gif](/Images/OutliningIndicators/None.gif)
昨天改为从零点开始取斜率
1
procedure ZX2Multi(dx, dy: array of Double; Count: Integer; var a, b: Double);
2
//
最小二乘法直线拟和 y=ax+b;
3
var
4
i: Integer;
5
x, y, xy, x2: Double;
6
begin
7
x :
=
0
;
8
y :
=
0
;
9
xy :
=
0
;
10
x2 :
=
0
;
11
for
i :
=
0
to Count
-
1
do
12
begin
13
x :
=
x
+
dx[i];
14
y :
=
y
+
dy[i];
15
xy :
=
xy
+
dx[i]
*
dy[i];
16
x2 :
=
x2
+
dx[i]
*
dx[i];
17
end;
18
a :
=
(Count
*
xy
-
x
*
y)
/
(Count
*
x2
-
x
*
x);
19
b :
=
1.0
/
Count
*
y
-
a
/
Count
*
x;
20
//
GSTLogFmt('ZX2Multi Result: a: %3.3f,'#9'b: %3.3f', [a, b]);
21
end;
22![None.gif](/Images/OutliningIndicators/None.gif)
23
function RateCalculate(TestValue, ResultValue: array of Double; Count: Integer; URate, RateErr, LineErr: Double): Boolean;
24
//
各点斜率与拟和结果比较
25
var
26
i: Integer;
27
RARate, a, b: Double;
28
Rate, RRate: array[
0
..
100
] of Double;
29
begin
30
Result :
=
True;
31
ZX2Multi(ResultValue, TestValue, Count, a, b);
32
Rate[
0
] :
=
(TestValue[Count
-
1
]
-
TestValue[
0
])
/
(ResultValue[Count
-
1
]
-
ResultValue[
0
]);
33
for
i :
=
1
to Count
-
1
do
34
begin
35
Rate[i] :
=
(TestValue[i]
-
TestValue[
0
])
/
(ResultValue[i]
-
ResultValue[
0
]);
36
end;
37
RARate :
=
(a
-
URate)
/
URate
*
100
;
38
if
(Abs(RARate)
>
RateErr) then
39
begin
40
Result :
=
False;
41
end;
42
GSTLogFmt(
'
拟和变比:%3.3f,理论变比:%3.3f,平均变比误差:%3.3f%%,(平均误差指标%3.3f%%),线性误差指标(%3.3f%%)
'
, [a, URate, RARate, RateErr, LineErr]);
43
for
i :
=
1
to Count
-
1
do
44
begin
45
RRate[i] :
=
(Rate[i]
-
a)
/
a
*
100
;
46
if
(Abs(RRate[i])
>
LineErr) then
47
begin
48
Result :
=
False;
49
end;
50
GSTLogFmt(
'
测量值:%3.3f,
'
#
9
'
AD采样结果:%3.3f,
'
#
9
'
实测变比:%3.3f,
'
#
9
'
变比误差:%3.3f%%
'
, [TestValue[i], ResultValue[i], Rate[i], RRate[i]]);
51
end;
52
end;
53![None.gif](/Images/OutliningIndicators/None.gif)
54
var
55
TestValue, ResultValue: array[
0
..
6
] of Double;
56
i: Integer;
57
begin
58
TestValue[
0
] :
=
0
;
59
ResultValue[
0
] :
=
0
;
60
for
i :
=
1
to
6
do
61
begin
62
TestValue[i] :
=
i
*
10
;
63
ResultValue[i] :
=
i
*
200
+
Random(
1000
)
/
1000.0
;
64
end;
65
if
not RateCalculate(TestValue, ResultValue,
6
,
0.050
,
10.0
,
1.0
) then
66
begin
67
GSTLogFail(
'
该路模拟量变比超差!
'
);
68
end;
69
end.
![None.gif](/Images/OutliningIndicators/None.gif)
2
![None.gif](/Images/OutliningIndicators/None.gif)
3
![None.gif](/Images/OutliningIndicators/None.gif)
4
![None.gif](/Images/OutliningIndicators/None.gif)
5
![None.gif](/Images/OutliningIndicators/None.gif)
6
![None.gif](/Images/OutliningIndicators/None.gif)
7
![None.gif](/Images/OutliningIndicators/None.gif)
8
![None.gif](/Images/OutliningIndicators/None.gif)
9
![None.gif](/Images/OutliningIndicators/None.gif)
10
![None.gif](/Images/OutliningIndicators/None.gif)
11
![None.gif](/Images/OutliningIndicators/None.gif)
12
![None.gif](/Images/OutliningIndicators/None.gif)
13
![None.gif](/Images/OutliningIndicators/None.gif)
14
![None.gif](/Images/OutliningIndicators/None.gif)
15
![None.gif](/Images/OutliningIndicators/None.gif)
16
![None.gif](/Images/OutliningIndicators/None.gif)
17
![None.gif](/Images/OutliningIndicators/None.gif)
18
![None.gif](/Images/OutliningIndicators/None.gif)
19
![None.gif](/Images/OutliningIndicators/None.gif)
20
![None.gif](/Images/OutliningIndicators/None.gif)
21
![None.gif](/Images/OutliningIndicators/None.gif)
22
![None.gif](/Images/OutliningIndicators/None.gif)
23
![None.gif](/Images/OutliningIndicators/None.gif)
24
![None.gif](/Images/OutliningIndicators/None.gif)
25
![None.gif](/Images/OutliningIndicators/None.gif)
26
![None.gif](/Images/OutliningIndicators/None.gif)
27
![None.gif](/Images/OutliningIndicators/None.gif)
28
![None.gif](/Images/OutliningIndicators/None.gif)
29
![None.gif](/Images/OutliningIndicators/None.gif)
30
![None.gif](/Images/OutliningIndicators/None.gif)
31
![None.gif](/Images/OutliningIndicators/None.gif)
32
![None.gif](/Images/OutliningIndicators/None.gif)
33
![None.gif](/Images/OutliningIndicators/None.gif)
34
![None.gif](/Images/OutliningIndicators/None.gif)
35
![None.gif](/Images/OutliningIndicators/None.gif)
36
![None.gif](/Images/OutliningIndicators/None.gif)
37
![None.gif](/Images/OutliningIndicators/None.gif)
38
![None.gif](/Images/OutliningIndicators/None.gif)
39
![None.gif](/Images/OutliningIndicators/None.gif)
40
![None.gif](/Images/OutliningIndicators/None.gif)
41
![None.gif](/Images/OutliningIndicators/None.gif)
42
![None.gif](/Images/OutliningIndicators/None.gif)
43
![None.gif](/Images/OutliningIndicators/None.gif)
44
![None.gif](/Images/OutliningIndicators/None.gif)
45
![None.gif](/Images/OutliningIndicators/None.gif)
46
![None.gif](/Images/OutliningIndicators/None.gif)
47
![None.gif](/Images/OutliningIndicators/None.gif)
48
![None.gif](/Images/OutliningIndicators/None.gif)
49
![None.gif](/Images/OutliningIndicators/None.gif)
50
![None.gif](/Images/OutliningIndicators/None.gif)
51
![None.gif](/Images/OutliningIndicators/None.gif)
52
![None.gif](/Images/OutliningIndicators/None.gif)
53
![None.gif](/Images/OutliningIndicators/None.gif)
54
![None.gif](/Images/OutliningIndicators/None.gif)
55
![None.gif](/Images/OutliningIndicators/None.gif)
56
![None.gif](/Images/OutliningIndicators/None.gif)
57
![None.gif](/Images/OutliningIndicators/None.gif)
58
![None.gif](/Images/OutliningIndicators/None.gif)
59
![None.gif](/Images/OutliningIndicators/None.gif)
60
![None.gif](/Images/OutliningIndicators/None.gif)
61
![None.gif](/Images/OutliningIndicators/None.gif)
62
![None.gif](/Images/OutliningIndicators/None.gif)
63
![None.gif](/Images/OutliningIndicators/None.gif)
64
![None.gif](/Images/OutliningIndicators/None.gif)
65
![None.gif](/Images/OutliningIndicators/None.gif)
66
![None.gif](/Images/OutliningIndicators/None.gif)
67
![None.gif](/Images/OutliningIndicators/None.gif)
68
![None.gif](/Images/OutliningIndicators/None.gif)
69
![None.gif](/Images/OutliningIndicators/None.gif)