author | Alpar Juttner <alpar@cs.elte.hu> |
Mon, 06 Dec 2010 13:09:21 +0100 | |
changeset 1 | c445c931472f |
permissions | -rw-r--r-- |
alpar@1 | 1 |
/*Extended Yet Another Curve Fitting Solution (The poor man's RMA) |
alpar@1 | 2 |
|
alpar@1 | 3 |
An extension of yacfs.mod adding a Weight parameter: |
alpar@1 | 4 |
When set to 1 the model produces best fit by least squares with all error in y and none in x (YonX); |
alpar@1 | 5 |
When set to zero the model produces best fit by least squares with all error in x and none in y (XonY); |
alpar@1 | 6 |
When set to 0.5 the model assumes equal error in x and y producing results similar to fitting by Reduced Major Axis Analysis. |
alpar@1 | 7 |
|
alpar@1 | 8 |
Nigel_Galloway@operamail.com |
alpar@1 | 9 |
November 5th., 2009 |
alpar@1 | 10 |
*/ |
alpar@1 | 11 |
set Sample; |
alpar@1 | 12 |
param Sx {z in Sample}; |
alpar@1 | 13 |
param Sy {z in Sample}; |
alpar@1 | 14 |
param Weight := 0.5; |
alpar@1 | 15 |
|
alpar@1 | 16 |
var a; |
alpar@1 | 17 |
var b; |
alpar@1 | 18 |
var p; |
alpar@1 | 19 |
var q; |
alpar@1 | 20 |
|
alpar@1 | 21 |
XonY1 :sum{z in Sample} q*Sy[z]*Sy[z] + sum{z in Sample} p*Sy[z] = sum{z in Sample} Sy[z]*Sx[z]; |
alpar@1 | 22 |
XonY2 :sum{z in Sample} q*Sy[z] + sum{z in Sample} p = sum{z in Sample} Sx[z]; |
alpar@1 | 23 |
YonX1 :sum{z in Sample} a*Sx[z]*Sx[z] + sum{z in Sample} b*Sx[z] = sum{z in Sample} Sy[z]*Sx[z]; |
alpar@1 | 24 |
YonX2 :sum{z in Sample} a*Sx[z] + sum{z in Sample} b = sum{z in Sample} Sy[z]; |
alpar@1 | 25 |
|
alpar@1 | 26 |
solve; |
alpar@1 | 27 |
|
alpar@1 | 28 |
param W := Weight*a + (1-Weight)*(1/q); |
alpar@1 | 29 |
printf "\nbest linear fit is:\n\ty = %f %s %fx\n\n", b*Weight - (1-Weight)*(p/q), if W < 0 then "-" else "+", abs(W); |
alpar@1 | 30 |
|
alpar@1 | 31 |
data; |
alpar@1 | 32 |
|
alpar@1 | 33 |
param: |
alpar@1 | 34 |
Sample: Sx Sy := |
alpar@1 | 35 |
1 0 1 |
alpar@1 | 36 |
2 0.5 0.9 |
alpar@1 | 37 |
3 1 0.7 |
alpar@1 | 38 |
4 1.5 1.5 |
alpar@1 | 39 |
5 1.9 2 |
alpar@1 | 40 |
6 2.5 2.4 |
alpar@1 | 41 |
7 3 3.2 |
alpar@1 | 42 |
8 3.5 2 |
alpar@1 | 43 |
9 4 2.7 |
alpar@1 | 44 |
10 4.5 3.5 |
alpar@1 | 45 |
11 5 1 |
alpar@1 | 46 |
12 5.5 4 |
alpar@1 | 47 |
13 6 3.6 |
alpar@1 | 48 |
14 6.6 2.7 |
alpar@1 | 49 |
15 7 5.7 |
alpar@1 | 50 |
16 7.6 4.6 |
alpar@1 | 51 |
17 8.5 6 |
alpar@1 | 52 |
18 9 6.8 |
alpar@1 | 53 |
19 10 7.3 |
alpar@1 | 54 |
; |
alpar@1 | 55 |
|
alpar@1 | 56 |
end; |