1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
| procedure RegressLogarithmique(Nuage: TNuage; var A, B, CC: Extended; var StrRes: string);
// Lien Logarithmique si le tracé de Y(X) sur papier semi-log sur axe des X forme une droite
var SigX, SigY, SigLnX, SigYLnX, SigLnX2: Extended; i, n: integer;
SigX2, SigY2, Sx, Sy: Extended;
begin
n := Length(Nuage);
SigX := 0.0; SigY := 0.0; SigLnX := 0.0; SigYLnX := 0.0; SigLnX2 := 0.0;
SigX2 := 0.0; SigY2 := 0.0;
for i := 0 to High(Nuage) do begin
if Nuage[i].x <= 0.0 then begin
StrRes := 'Non calculable car présence d''un point X <= 0 : EXIT';
EXIT;
end;
SigX := SigX + Nuage[i].x;
SigY := SigY + Nuage[i].y;
SigLnX := SigLnX + ln(Nuage[i].x);
SigYLnX := SigYLnX + Nuage[i].y * ln(Nuage[i].x);
SigLnX2 := SigLnX2 + sqr(ln(Nuage[i].x));
SigX2 := SigX2 + Nuage[i].X * Nuage[i].X;
SigY2 := SigY2 + Nuage[i].Y * Nuage[i].Y;
end;
// Calc. Coeff de Corrélation :
Sx := sqrt(SigLnX2 - sqr(SigLnX) / n);
Sy := Sqrt(SigY2 - sqr(SigY) / n);
CC := (SigYLnX - SigLnX * SigY / n) / (Sx * Sy);
// Calc. paramètres A et B :
A := (SigYLnX - SigLnX * SigY / n) / (SigLnX2 - sqr(SigLnX) / length(Nuage));
B := (SigY / length(Nuage)) - (A * SigLnX / length(Nuage));
StrRes := 'y = ' + FloatToStr(B) + ' + ' + FloatToStr(A) + ' * Ln(x)' + #13#10 // Y = B + A.Ln(X)
+ 'Y = ' + FloatToStr(B) + ' + ' + FloatToStr(A * ln(10)) + ' * Log10(X)' + #13#10
+ 'Coeff. de Corrélation = ' + FloatToStr(CC);
end;
procedure RegressExponentielle(Nuage: TNuage; var A, B, CC: Extended; var StrRes: string);
// Lien Exponentiel si le tracé de Y(X) sur papier semi-log sur axe des Y forme une droite
// B est alors négligeable
var SigX, SigY, SigLnY, SigXLnY, SigX2: Extended; i, N: integer; op: char;
SigY2, SigLnY2, Sx, Sy: Extended;
begin
N := length(Nuage);
SigX := 0.0; SigY := 0.0; SigLnY := 0.0; SigXLnY := 0.0; SigX2 := 0.0; SigY2 := 0.0; SigLnY2 := 0.0;
for i := 0 to N - 1 do begin
if Nuage[i].y <= 0.0 then begin
StrRes := 'Non calculable car présence d''un point Y <= 0 : EXIT';
EXIT;
end;
SigX := SigX + Nuage[i].x;
SigY := SigY + Nuage[i].y;
SigLnY := SigLnY + ln(Nuage[i].y);
SigXLnY := SigXLnY + Nuage[i].x * ln(Nuage[i].y);
SigX2 := SigX2 + sqr(Nuage[i].x);
SigY2 := SigY2 + sqr(Nuage[i].y);
SigLnY2 := SigLnY2 + sqr(ln(Nuage[i].Y));
end;
// Calc. Coeff de Corrélation :
Sx := sqrt(SigX2 - sqr(SigX) / n);
Sy := Sqrt(SigLnY2 - sqr(SigLnY) / n);
CC := (SigXLnY - SigX * SigLnY / n) / (Sx * Sy);
// Calc. paramètres A et B :
A := (N * SigXLnY - SigX * SigLnY) / (N * SigX2 - sqr(SigX));
B := (SigLnY - A * SigX) / N;
if abs(B) < 1E-3 then begin
StrRes := 'Ln(Y) = ' + FloatToStr(A) + ' * X' + #13#10
+ 'Coeff. de Corrélation = ' + FloatToStr(CC);
end else begin
if B < 0 then op := '-' else op := '+';
StrRes := 'Ln(y) = ' + FloatToStr(A) + '.x ( ' + op + FloatToStr(abs(B)) + ' : négligeable)' + #13#10
+ ' => y = e^(' + FloatToStr(A) + '.x)' + #13#10 // Y = e^(A.X)
+ ' => y = ' + FloatToStr(exp(A)) + '^x' + #13#10 // Y = (e^A)^X
+ 'Coeff. de Corrélation = ' + FloatToStr(CC);
end;
end; // RegressExponentielle
procedure RegressPuissance(Nuage: TNuage; var A, B, CC: Extended; var StrRes: string);
// Lien de Puissance si le tracé de Y(X) sur papier log-log forme une droite
var SigX, SigY, SigLnX, SigLnY, SigLnXLnY, SigLnX2: Extended; i, N: integer; op: char;
var Sx, Sy, SigLnY2: Extended;
begin
N := length(Nuage);
SigX := 0.0; SigY := 0.0; SigLnX := 0.0; SigLnY := 0.0; SigLnXLnY := 0.0; SigLnX2 := 0.0; SigLnY2 := 0.0;
for i := 0 to N - 1 do begin
if Nuage[i].y <= 0.0 then begin
StrRes := 'Non calculable car présence d''un point Y <= 0 : EXIT';
EXIT;
end;
if Nuage[i].x <= 0.0 then begin
StrRes := 'Non calculable car présence d''un point X <= 0 : EXIT';
EXIT;
end;
SigX := SigX + Nuage[i].x;
SigY := SigY + Nuage[i].y;
SigLnX := SigLnX + ln(Nuage[i].x);
SigLnY := SigLnY + ln(Nuage[i].y);
SigLnXLnY := SigLnXLnY + ln(Nuage[i].x) * ln(Nuage[i].y);
SigLnX2 := SigLnX2 + sqr(ln(Nuage[i].x));
SigLnY2 := SigLnY2 + sqr(ln(Nuage[i].y));
end;
// Calc. Coeff de Corrélation :
Sx := sqrt(SigLnX2 - sqr(SigLnX) / n);
Sy := Sqrt(SigLnY2 - sqr(SigLnY) / n);
CC := (SigLnXLnY - SigLnX * SigLnY / n) / (Sx * Sy);
// Calc. paramètres A et B :
A := (N * SigLnXLnY - SigLnX * SigLnY) / (N * SigLnX2 - sqr(SigLnX));
B := (SigLnY - A * SigLnX) / N;
if B < 0 then op := '-' else op := '+';
StrRes := 'Ln(y) = ' + FloatToStr(A) + '.Ln(x) ' + op + ' ' + FloatToStr(abs(B)) + #13#10
+ ' => y = x^(' + FloatToStr(A) + ').e^(' + op + FloatToStr(abs(B)) + ')' + #13#10 // Y = (X^A).e^B
+ ' => y = ' + op + FloatToStr(exp(abs(B))) + '.x^(' + FloatToStr(A) + ')' + #13#10 // Y = (e^B).X^A
+ 'Coeff. de Corrélation = ' + FloatToStr(CC);
end; |
Partager