RosettaCodeData/Task/Polynomial-regression/XPL0/polynomial-regression.xpl0
2025-06-11 20:16:52 -04:00

60 lines
1.4 KiB
Text

proc PolyReg(XA, YA, N);
real XA, YA; int N;
int I;
real XM, YM, X2M, X3M, X4M, XYM, X2YM;
real SXX, SXY, SXX2, SX2X2, SX2Y;
real A, B, C, Y, RN;
[XM:= 0.; YM:= 0.;
X2M:= 0.; X3M:= 0.; X4M:= 0.;
XYM:= 0.; X2YM:= 0.;
for I:= 0 to N-1 do
[XM:= XM + XA(I);
YM:= YM + YA(I);
X2M:= X2M + XA(I)*XA(I);
X3M:= X3M + XA(I)*XA(I)*XA(I);
X4M:= X4M + XA(I)*XA(I)*XA(I)*XA(I);
XYM:= XYM + XA(I)*YA(I);
X2YM:= X2YM + XA(I)*XA(I)*YA(I);
];
RN:= float(N);
XM:= XM/RN;
YM:= YM/RN;
X2M:= X2M/RN;
X3M:= X3M/RN;
X4M:= X4M/RN;
XYM:= XYM/RN;
X2YM:= X2YM/RN;
SXX:= X2M - XM*XM;
SXY:= XYM - XM*YM;
SXX2:= X3M - XM*X2M;
SX2X2:= X4M - X2M*X2M;
SX2Y:= X2YM - X2M*YM;
B:= (SXY*SX2X2 - SX2Y*SXX2) / (SXX*SX2X2 - SXX2*SXX2);
C:= (SX2Y*SXX - SXY*SXX2) / (SXX*SX2X2 - SXX2*SXX2);
A:= YM - B*XM - C*X2M;
Format(1, 0);
Text(0, "y = "); RlOut(0, A);
Text(0, " + "); RlOut(0, B);
Text(0, "x + "); RlOut(0, C);
Text(0, "x^^2"); CrLf(0);
Text(0, " Input Approx^m^j");
Text(0, " x y y1^m^j");
for I:=0 to N-1 do
[Format(3, 0);
RlOut(0, XA(I)); Text(0, " ");
RlOut(0, YA(I)); Text(0, " ");
Y:= A + (B + C*XA(I)) * XA(I);
Format(3, 1);
RlOut(0, Y);
CrLf(0);
];
];
real XA, YA;
[XA:= [0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.];
YA:= [1., 6., 17., 34., 57., 86., 121., 162., 209., 262., 321.];
PolyReg(XA, YA, 11);
]