examples/xyacfs.mod
author Alpar Juttner <alpar@cs.elte.hu>
Mon, 06 Dec 2010 13:09:21 +0100
changeset 1 c445c931472f
permissions -rw-r--r--
Import glpk-4.45

- Generated files and doc/notes are removed
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;