LazStats: Fix usage of invalid rows in WLSUnit. Cleanup.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7781 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2020-10-18 13:52:00 +00:00
parent 791746e7ef
commit dfffbcf6f8
4 changed files with 175 additions and 257 deletions

View File

@ -32,6 +32,7 @@ procedure VecSize(A: TDblVector; out n: Integer);
procedure VecMaxMin(const AData: TDblVector;
out AMax, AMin: Double);
function VecMean(const AData: TDblVector): Double;
procedure VecMeanStdDev(const AData: TDblVector;
out AMean, AStdDev: Double);
procedure VecMeanVarStdDev(const AData: TDblVector;
@ -57,6 +58,7 @@ operator * (A: TDblMatrix; v: TDblVector): TDblVector;
function MatAppendColVector(A: TDblMatrix; v: TDblVector): TDblMatrix;
procedure MatCheck(A: TDblMatrix);
procedure MatCheckSquare(A: TDblMatrix; out n: Integer);
procedure MatColDelete(A: TDblMatrix; ACol: Integer);
procedure MatColMeanVarStdDev(A: TDblMatrix; out AMeans, AVariances, AStdDevs: TDblVector);
function MatColMeans(A: TDblMatrix): TDblVector;
function MatColVector(A: TDblMatrix; AColIndex: Integer): TDblVector;
@ -227,6 +229,22 @@ begin
end;
function VecMean(const AData: TDblVector): Double;
var
i, n: Integer;
begin
Result := 0;
n := Length(AData);
if n > 0 then
begin
for i := 0 to n-1 do
Result := Result + AData[i];
Result := Result / n;
end else
Result := NaN;
end;
procedure VecMeanStdDev(const AData: TDblVector; out AMean, AStdDev: Double);
var
variance: Double;
@ -432,6 +450,23 @@ begin
end;
procedure MatColDelete(A: TDblMatrix; ACol: Integer);
var
n, m, i, j: Integer;
begin
MatSize(A, n,m);
if (ACol < 0) or (ACol >= m) then
raise EMatrix.Create('MatColDelete: illegal column index.');
for i := 0 to n - 1 do begin
for j := 0 to m - 2 do
if j >= ACol then
A[i, j] := A[i, j+1];
SetLength(A[i], m-1);
end;
end;
procedure MatColMeanVarStdDev(A: TDblMatrix; out AMeans, AVariances, AStdDevs: TDblVector);
var
n, m, i, j: Integer;