1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/examples/xyacfs.mod Mon Dec 06 13:09:21 2010 +0100
1.3 @@ -0,0 +1,56 @@
1.4 +/*Extended Yet Another Curve Fitting Solution (The poor man's RMA)
1.5 +
1.6 + An extension of yacfs.mod adding a Weight parameter:
1.7 + When set to 1 the model produces best fit by least squares with all error in y and none in x (YonX);
1.8 + When set to zero the model produces best fit by least squares with all error in x and none in y (XonY);
1.9 + When set to 0.5 the model assumes equal error in x and y producing results similar to fitting by Reduced Major Axis Analysis.
1.10 +
1.11 + Nigel_Galloway@operamail.com
1.12 + November 5th., 2009
1.13 +*/
1.14 +set Sample;
1.15 +param Sx {z in Sample};
1.16 +param Sy {z in Sample};
1.17 +param Weight := 0.5;
1.18 +
1.19 +var a;
1.20 +var b;
1.21 +var p;
1.22 +var q;
1.23 +
1.24 +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];
1.25 +XonY2 :sum{z in Sample} q*Sy[z] + sum{z in Sample} p = sum{z in Sample} Sx[z];
1.26 +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];
1.27 +YonX2 :sum{z in Sample} a*Sx[z] + sum{z in Sample} b = sum{z in Sample} Sy[z];
1.28 +
1.29 +solve;
1.30 +
1.31 +param W := Weight*a + (1-Weight)*(1/q);
1.32 +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);
1.33 +
1.34 +data;
1.35 +
1.36 +param:
1.37 +Sample: Sx Sy :=
1.38 + 1 0 1
1.39 + 2 0.5 0.9
1.40 + 3 1 0.7
1.41 + 4 1.5 1.5
1.42 + 5 1.9 2
1.43 + 6 2.5 2.4
1.44 + 7 3 3.2
1.45 + 8 3.5 2
1.46 + 9 4 2.7
1.47 + 10 4.5 3.5
1.48 + 11 5 1
1.49 + 12 5.5 4
1.50 + 13 6 3.6
1.51 + 14 6.6 2.7
1.52 + 15 7 5.7
1.53 + 16 7.6 4.6
1.54 + 17 8.5 6
1.55 + 18 9 6.8
1.56 + 19 10 7.3
1.57 +;
1.58 +
1.59 +end;