LazStats: Add tests.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7925 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
parent
7800484f54
commit
21484fc4bd
72
applications/lazstats/tests/beta_test/Project1.lpi
Normal file
72
applications/lazstats/tests/beta_test/Project1.lpi
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LMath"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
66
applications/lazstats/tests/beta_test/Project1.pas
Normal file
66
applications/lazstats/tests/beta_test/Project1.pas
Normal file
@ -0,0 +1,66 @@
|
||||
program Project1;
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
spe,
|
||||
MathUnit;
|
||||
|
||||
|
||||
const
|
||||
w = 15;
|
||||
// Numerical recipes
|
||||
|
||||
function gammln(x: double): Double;
|
||||
{ gibt den Log der vollständigen Gamma-Funktion zurück (x>0).
|
||||
Gamma(x) = integral ( t^(x-1) * exp(-t) dt ) (von 0 bis Unendlich)
|
||||
(Log, um Floating Point Underflow zu vermeiden). }
|
||||
const
|
||||
stp = 2.50662827465;
|
||||
var
|
||||
xx,tmp,ser : extended;
|
||||
begin
|
||||
if x<=0 then
|
||||
raise Exception.Create('Argument für GammaLn ist negativ.');
|
||||
if (x>1) then begin
|
||||
xx := x - 1.0;
|
||||
tmp := xx + 5.5;
|
||||
tmp := (xx+0.5) * ln(tmp) - tmp;
|
||||
ser := 1.0 + 76.18009173 /(xx+1.0) - 86.50532033/(xx+2.0)
|
||||
+ 24.01409822 /(xx+3.0) - 1.231739516/(xx+4.0)
|
||||
+ 0.120858003E-2/(xx+5.0) - 0.536382E-5/(xx+6.0);
|
||||
result := tmp + ln(stp*ser);
|
||||
end else
|
||||
if (x<1) then
|
||||
result := GammaLn(x+1.0) - ln(x)
|
||||
else
|
||||
if (x=1) then
|
||||
result := 0.0;
|
||||
end;
|
||||
|
||||
function Beta(a,b: Double) : Double;
|
||||
begin
|
||||
Result := exp(gammln(a) + gammln(b) - gammln(a+b));
|
||||
end;
|
||||
|
||||
procedure Test(a, b: Double);
|
||||
var
|
||||
y_lazStats, y_numlib, y_numrecip: Double;
|
||||
begin
|
||||
y_numlib := spe.beta(a, b);
|
||||
y_lazstats := mathunit.beta(a, b);
|
||||
y_numrecip := beta(a, b);
|
||||
WriteLn(a:w:5, b:w:5, y_lazstats:w:5, y_numlib:w:5, y_numrecip:w:5);
|
||||
end;
|
||||
|
||||
begin
|
||||
WriteLn('Beta function');
|
||||
WriteLn;
|
||||
WriteLn('a':w, 'b':w, 'y(lazstats)':w, 'y(numlib)':w, 'y(Num.Recip)':w);
|
||||
Test(0.5, 0.5);
|
||||
Test(1.1, 2.3);
|
||||
Test(2.3, 1.1);
|
||||
Test(2.9, 0.1);
|
||||
Test(5.1, 2.5);
|
||||
ReadLn;
|
||||
end.
|
||||
|
72
applications/lazstats/tests/betai_test/Project1.lpi
Normal file
72
applications/lazstats/tests/betai_test/Project1.lpi
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LMath"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
107
applications/lazstats/tests/betai_test/Project1.pas
Normal file
107
applications/lazstats/tests/betai_test/Project1.pas
Normal file
@ -0,0 +1,107 @@
|
||||
program Project1;
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
spe,
|
||||
MathUnit;
|
||||
|
||||
// Numerical recipes
|
||||
|
||||
function BetaCf(a,b,x: Double) : Double;
|
||||
{ Kettenbruch-Entwicklung der unvollständigen Beta-Funktion }
|
||||
const
|
||||
ItMax = 100;
|
||||
EPS = 1E-9;
|
||||
var
|
||||
tem, em, d : Double;
|
||||
qap, qam, qab : Double;
|
||||
bz, bpp, BP, bm : Double;
|
||||
az, app, am, aold, ap : Double;
|
||||
m : integer;
|
||||
begin
|
||||
am := 1.0;
|
||||
bm := 1.0;
|
||||
az := 1.0;
|
||||
qab := a+b;
|
||||
qap := a+1.0;
|
||||
qam := a-1.0;
|
||||
bz := 1.0 - qab*x/qap;
|
||||
for m:=1 to ItMax do begin
|
||||
em := m;
|
||||
tem := em+em;
|
||||
d := em*(b-m)*x/((qam+tem)*(a+tem));
|
||||
ap := az + d*am;
|
||||
BP := bz + d*bm;
|
||||
d := -(a+em)*(qab+em)*x/((a+tem)*(qap+tem));
|
||||
app := ap + d*az;
|
||||
bpp := BP + d*bz;
|
||||
aOld:= az;
|
||||
am := ap/bpp;
|
||||
bm := BP/bpp;
|
||||
az := app/bpp;
|
||||
bz := 1.0;
|
||||
if abs(az-aOld) < EPS*abs(az) then begin
|
||||
result := az;
|
||||
Exit;
|
||||
end;
|
||||
end;
|
||||
raise Exception.Create('Kettenbruchentwicklung der unvollst.Beta-Funktion divergiert.');
|
||||
// a oder b zu groß, oder ItMax zu klein
|
||||
end;
|
||||
|
||||
function BetaI(a,b,x: Double): Double;
|
||||
{ berechnet die Unvollständige Beta-Funktion Ix(a,b) = Bx(a,b)/B(a,b),
|
||||
/x a-1 b-1
|
||||
wobei Bx(a,b) = | t * (1-t) dt
|
||||
/0
|
||||
}
|
||||
var
|
||||
bt : Double;
|
||||
begin
|
||||
if (x<0.0) then
|
||||
raise EMathError.Create('Argument der unvollst.Beta-Funktion ist <0.');
|
||||
if (x>1.0) then
|
||||
raise EMathError.Create('Argument der unvollst.Beta-Funktion ist >1.');
|
||||
if (x=0.0) or (x=1.0) then
|
||||
bt := 0.0
|
||||
else
|
||||
bt := exp(GammaLn(a+b) - GammaLn(a) - GammaLn(b) + a*ln(x) + b*ln(1.0-x));
|
||||
if x < (a+1.0)/(a+b+2.0)
|
||||
then result := bt * BetaCf(a,b,x)/a
|
||||
else result := 1.0 - bt*BetaCf(b,a,1.0-x)/b;
|
||||
end;
|
||||
|
||||
|
||||
const
|
||||
xmin = 0.0;
|
||||
xmax = 1.0;
|
||||
dx = 0.2;
|
||||
|
||||
procedure Test(a, b: Double);
|
||||
var
|
||||
i: Integer;
|
||||
x, y_lazStats, y_numlib, y_numrecip: Double;
|
||||
begin
|
||||
WriteLn('a = ', a:0:3, ' b = ', b:0:3);
|
||||
WriteLn;
|
||||
WriteLn('x':20, 'y(lazstats)':20, 'y(numlib)':20, 'y(Num.Recip)':20);
|
||||
x := xmin;
|
||||
while (x <= xmax) do begin
|
||||
y_numlib := spe.betai(a, b, x);
|
||||
y_lazstats := mathunit.betai(a, b, x);
|
||||
y_numrecip := betai(a, b, x);
|
||||
|
||||
WriteLn(x:20:5, y_lazstats:20:5, y_numlib:20:5, y_numrecip:20:5);
|
||||
x := x + dx;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
WriteLn('incomplete beta function');
|
||||
WriteLn;
|
||||
Test(0.5, 0.5);
|
||||
Test(1.0, 2.0);
|
||||
Test(2.0, 1.0);
|
||||
ReadLn;
|
||||
end.
|
||||
|
72
applications/lazstats/tests/gammaln_test/Project1.lpi
Normal file
72
applications/lazstats/tests/gammaln_test/Project1.lpi
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LMath"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
64
applications/lazstats/tests/gammaln_test/Project1.pas
Normal file
64
applications/lazstats/tests/gammaln_test/Project1.pas
Normal file
@ -0,0 +1,64 @@
|
||||
program Project1;
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
spe,
|
||||
MathUnit;
|
||||
|
||||
// Numerical recipes
|
||||
function GammaLn(x: double): Double;
|
||||
{ gibt den Log der vollständigen Gamma-Funktion zurück (x>0).
|
||||
Gamma(x) = integral ( t^(x-1) * exp(-t) dt ) (von 0 bis Unendlich)
|
||||
(Log, um Floating Point Underflow zu vermeiden). }
|
||||
const
|
||||
stp = 2.50662827465;
|
||||
var
|
||||
xx,tmp,ser : extended;
|
||||
begin
|
||||
if x<=0 then
|
||||
raise Exception.Create('Argument für GammaLn ist negativ.');
|
||||
if (x > 1) then begin
|
||||
xx := x - 1.0;
|
||||
tmp := xx + 5.5;
|
||||
tmp := (xx+0.5) * ln(tmp) - tmp;
|
||||
ser := 1.0 + 76.18009173 /(xx+1.0) - 86.50532033/(xx+2.0)
|
||||
+ 24.01409822 /(xx+3.0) - 1.231739516/(xx+4.0)
|
||||
+ 0.120858003E-2/(xx+5.0) - 0.536382E-5/(xx+6.0);
|
||||
result := tmp + ln(stp*ser);
|
||||
end else
|
||||
if (x < 1) then
|
||||
result := GammaLn(x+1.0) - ln(x)
|
||||
else
|
||||
if (x=1) then
|
||||
result := 0.0;
|
||||
end;
|
||||
|
||||
const
|
||||
xmin = 1e-3;
|
||||
xmax = 5.0;
|
||||
|
||||
procedure Test;
|
||||
var
|
||||
i: Integer;
|
||||
x, y_lazStats, y_numlib, y_numrecip: Double;
|
||||
begin
|
||||
WriteLn('x':20, 'y(lazstats)':20, 'y(numlib)':20, 'y(Num.Recipies)':20);
|
||||
x := xmin;
|
||||
while (x <= xmax) do begin
|
||||
y_numlib := 1.0 - spelga(x);
|
||||
y_lazstats := MathUnit.gammaln(x);
|
||||
y_numrecip := gammaln(x);
|
||||
|
||||
WriteLn(x:20:6, y_lazstats:20:5, y_numlib:20:5, y_numrecip:20:5);
|
||||
x := x*1.25
|
||||
// x := x + dx;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
WriteLn('GammaLn function');
|
||||
WriteLn;
|
||||
Test;
|
||||
ReadLn;
|
||||
end.
|
||||
|
63
applications/lazstats/tests/generate_dists/Distributions.lpi
Normal file
63
applications/lazstats/tests/generate_dists/Distributions.lpi
Normal file
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Distributions"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Distributions.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Distributions"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
25
applications/lazstats/tests/generate_dists/Distributions.pas
Normal file
25
applications/lazstats/tests/generate_dists/Distributions.pas
Normal file
@ -0,0 +1,25 @@
|
||||
program Distributions;
|
||||
|
||||
uses
|
||||
SysUtils, Math;
|
||||
|
||||
const
|
||||
MEAN = 56;
|
||||
STDDEV = 12;
|
||||
N = 5000;
|
||||
var
|
||||
F: TextFile;
|
||||
i: Integer;
|
||||
x: Double;
|
||||
begin
|
||||
AssignFile(F, '../../data/dists.csv');
|
||||
Rewrite(F);
|
||||
WriteLn(F, 'Index,Group,Value');
|
||||
for i := 0 to N-1 do begin
|
||||
x := RandG(MEAN, STDDEV);
|
||||
WriteLn(F, i, ',', i div 5, ',', x:0:6);
|
||||
end;
|
||||
CloseFile(F);
|
||||
|
||||
end.
|
||||
|
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="NormalDist"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="NormalDist.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="NormalDist"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@ -0,0 +1,24 @@
|
||||
program NormalDist;
|
||||
|
||||
uses
|
||||
SysUtils, Math;
|
||||
|
||||
const
|
||||
MEAN = 56;
|
||||
STDDEV = 12;
|
||||
N = 5; //200;
|
||||
var
|
||||
F: TextFile;
|
||||
i: Integer;
|
||||
x: Double;
|
||||
begin
|
||||
AssignFile(F, '../../data/normal_dist_5.csv');
|
||||
Rewrite(F);
|
||||
WriteLn(F, 'Index,Value');
|
||||
for i := 1 to N do begin
|
||||
x := RandG(MEAN, STDDEV);
|
||||
WriteLn(F, i, ',', x:0:6);
|
||||
end;
|
||||
CloseFile(F);
|
||||
end.
|
||||
|
64
applications/lazstats/tests/matrix_test/MatrixTest.lpi
Normal file
64
applications/lazstats/tests/matrix_test/MatrixTest.lpi
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="MatrixTest"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="MatrixTest.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="MatrixTest"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
51
applications/lazstats/tests/matrix_test/MatrixTest.lpr
Normal file
51
applications/lazstats/tests/matrix_test/MatrixTest.lpr
Normal file
@ -0,0 +1,51 @@
|
||||
program MatrixTest;
|
||||
|
||||
uses
|
||||
MatrixUnit;
|
||||
|
||||
var
|
||||
A: TDblMatrix;
|
||||
B: TDblMatrix;
|
||||
|
||||
procedure WriteMatrix(A: TDblMatrix; AName: String);
|
||||
var
|
||||
n, m, i, j: Integer;
|
||||
begin
|
||||
WriteLn(AName, ' = ');
|
||||
MatSize(A, n,m);
|
||||
for i := 0 to n-1 do
|
||||
begin
|
||||
for j := 0 to m-1 do
|
||||
Write(A[i, j]:10:3);
|
||||
WriteLn;
|
||||
end;
|
||||
WriteLn;
|
||||
end;
|
||||
|
||||
begin
|
||||
SetLength(A, 3, 3);
|
||||
A[0, 0] := 1.0; A[0, 1] := 3.0; A[0, 2] := 4.0;
|
||||
A[1, 0] := -1.0; A[1, 1] := 2.0; A[1, 2] := -3.0;
|
||||
A[2, 0] := 0.0; A[2, 1] := -1.0; A[2, 2] := 1.0;
|
||||
WriteMatrix(A, 'A');
|
||||
|
||||
SetLength(B, 3, 3);
|
||||
B[0, 0] := -1.0; B[0, 1] := -3.0; B[0, 2] := 1.0;
|
||||
B[1, 0] := +1.0; B[1, 1] := 2.0; B[1, 2] := -3.0;
|
||||
B[2, 0] := 0.0; B[2, 1] := -2.0; B[2, 2] := 2.0;
|
||||
WriteMatrix(B, 'B');
|
||||
|
||||
WriteMatrix(A*B, 'A*B');
|
||||
|
||||
WriteMatrix(MatInverse(A), 'inv(A)');
|
||||
|
||||
WriteMatrix(A*MatInverse(A), 'A*inv(A)');
|
||||
|
||||
WriteLn('det(A) = ');
|
||||
WriteLn(MatDeterminant(A):10:3);
|
||||
|
||||
WriteLn;
|
||||
WriteLn('Press ENTER to quit...');
|
||||
ReadLn;
|
||||
end.
|
||||
|
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="BasicStats_test"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="BasicStats_test.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="BasicStats_test"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@ -0,0 +1,26 @@
|
||||
program BasicStats_test;
|
||||
|
||||
uses
|
||||
MatrixUnit;
|
||||
|
||||
var
|
||||
v: TDblVector;
|
||||
mu, variance, sig: Double;
|
||||
begin
|
||||
SetLength(v, 5);
|
||||
v[0] := 1.2;
|
||||
v[1] := -4.3;
|
||||
v[2] := 5.9;
|
||||
v[3] := -9.6;
|
||||
v[4] := 5.3;
|
||||
|
||||
VecMeanVarStdDev(v, mu, variance, sig);
|
||||
|
||||
WriteLn('Mean: ', mu:10:3);
|
||||
WriteLn('Variance: ', variance:10:3);
|
||||
WriteLn('Std.Dev.: ', sig:10:3);
|
||||
|
||||
ReadLn;
|
||||
|
||||
end.
|
||||
|
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="multiple_regression"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="multiple_regression.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="multiple_regression"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@ -0,0 +1,100 @@
|
||||
program multiple_regression;
|
||||
|
||||
uses
|
||||
SysUtils, Classes,
|
||||
Globals, MatrixUnit, RegressionUnit;
|
||||
|
||||
var
|
||||
L: TStrings;
|
||||
xCols: IntDyneVec = nil;
|
||||
yCol: Integer;
|
||||
xData: TDblMatrix = nil;
|
||||
yData: TDblVector = nil;
|
||||
i, j: Integer;
|
||||
sa: TStringArray = nil;
|
||||
RegressionRes: TMultipleRegressionResults;
|
||||
Labels: StrDyneVec = nil;
|
||||
|
||||
const
|
||||
W = 20;
|
||||
D = 3;
|
||||
|
||||
procedure WriteMatrix(A: TDblMatrix; RowLabels, ColLabels: StrDyneVec);
|
||||
var
|
||||
i,j: Integer;
|
||||
n, m: Integer;
|
||||
begin
|
||||
MatSize(A, n,m);
|
||||
|
||||
Write('':W);
|
||||
for j := 0 to High(ColLabels) do
|
||||
Write(ColLabels[j]:W);
|
||||
WriteLn;
|
||||
|
||||
for i := 0 to n-1 do
|
||||
begin
|
||||
Write(RowLabels[i]:W);
|
||||
for j := 0 to m-1 do
|
||||
Write(A[i,j]:W:D);
|
||||
WriteLn;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
DefaultFormatSettings.DecimalSeparator := '.';
|
||||
SetLength(xCols, 2);
|
||||
xCols[0] := 0;
|
||||
xCols[1] := 1;
|
||||
|
||||
yCol := 5;
|
||||
|
||||
SetLength(Labels, Length(xCols) + 1);
|
||||
Labels[High(Labels)] := 'Intercept';
|
||||
|
||||
L := TStringList.Create;
|
||||
try
|
||||
L.LoadFromFile('..\..\data\cansas.tab');
|
||||
|
||||
sa := L[0].Split(#9);
|
||||
for j := 0 to High(xCols) do
|
||||
Labels[j] := sa[xCols[j]];
|
||||
|
||||
SetLength(xData, L.Count-1, 2);
|
||||
SetLength(yData, L.Count-1);
|
||||
for i:=1 to L.Count-1 do
|
||||
begin
|
||||
sa := L[i].Split(#9);
|
||||
for j := 0 to High(xCols) do
|
||||
xData[i-1, xCols[j]] := StrToFloat(sa[xCols[j]]);
|
||||
yData[i-1] := StrToFloat(sa[yCol]);
|
||||
end;
|
||||
|
||||
Write('Index':10);
|
||||
for j := 0 to High(xCols) do
|
||||
Write(Labels[j]:10);
|
||||
WriteLn(sa[yCol]:10);
|
||||
|
||||
//WriteLn('Index':10, sa[0]:10, sa[1]:10, sa[yCol]:10);
|
||||
for i := 0 to High(yData) do
|
||||
begin
|
||||
Write(i:10);
|
||||
for j := 0 to High(xCols) do
|
||||
Write(xdata[i, j]:10:3);
|
||||
WriteLn(yData[i]:10:3);
|
||||
end;
|
||||
WriteLn;
|
||||
finally
|
||||
L.Free;
|
||||
end;
|
||||
|
||||
MultipleRegression(xData, yData, 0.95, RegressionRes);
|
||||
|
||||
for i := 0 to High(Labels) do
|
||||
WriteLn('B[' + Labels[i] + '] =':20, RegressionRes.Coeffs[i]:W:D);
|
||||
WriteLn;
|
||||
|
||||
WriteLn('Variance-Covariance Matrix');
|
||||
WriteMatrix(RegressionRes.VarCovar, Labels, Labels);
|
||||
ReadLn;
|
||||
end.
|
||||
|
64
applications/lazstats/tests/normalDist/NormalDist_Test.lpi
Normal file
64
applications/lazstats/tests/normalDist/NormalDist_Test.lpi
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="NormalDist_Test"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="NormalDist_Test.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="NormalDist_Test"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
26
applications/lazstats/tests/normalDist/NormalDist_Test.pas
Normal file
26
applications/lazstats/tests/normalDist/NormalDist_Test.pas
Normal file
@ -0,0 +1,26 @@
|
||||
program NormalDist_Test;
|
||||
|
||||
uses
|
||||
MathUnit;
|
||||
|
||||
const
|
||||
dx = 0.2;
|
||||
Range = 3.0;
|
||||
|
||||
var
|
||||
i: Integer;
|
||||
x, p, z: Double;
|
||||
begin
|
||||
WriteLn('x':20, 'p':20, 'z':20);
|
||||
|
||||
x := -Range;
|
||||
while x <= Range do begin
|
||||
p := NormalDist(x);
|
||||
z := InverseNormaldist(p);
|
||||
WriteLn(x:20:5, p:20:5, z:20:5);
|
||||
x := x + dx;
|
||||
end;
|
||||
|
||||
Readln;
|
||||
end.
|
||||
|
64
applications/lazstats/tests/poisson_test/project1.lpi
Normal file
64
applications/lazstats/tests/poisson_test/project1.lpi
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
50
applications/lazstats/tests/poisson_test/project1.lpr
Normal file
50
applications/lazstats/tests/poisson_test/project1.lpr
Normal file
@ -0,0 +1,50 @@
|
||||
program project1;
|
||||
|
||||
uses
|
||||
Math,
|
||||
MathUnit;
|
||||
|
||||
function Factorial(x: integer): longint; //integer;
|
||||
var
|
||||
decx: longint; // integer;
|
||||
product: longint; //integer;
|
||||
begin
|
||||
decx := x;
|
||||
product := 1;
|
||||
while (decx > 0) do
|
||||
begin
|
||||
product := decx * product;
|
||||
decx := decx - 1;
|
||||
end;
|
||||
result := product;
|
||||
end;
|
||||
|
||||
function PoissonPDF_old(x: integer; a: double): Double;
|
||||
begin
|
||||
if (x < 0) then
|
||||
Result := 0.0
|
||||
else
|
||||
Result := exp(-a) * power(a, x) / factorial(x);
|
||||
end;
|
||||
|
||||
procedure Test(a: Double; delta: Integer);
|
||||
var
|
||||
i, n: Integer;
|
||||
begin
|
||||
WriteLn('a = ', a:0:5);
|
||||
WriteLn;
|
||||
WriteLn(' n Poisson PoissonPDF_old ');
|
||||
WriteLn('---------- ------------------- -------------------');
|
||||
for i := 0 to 20 do begin
|
||||
n := i * delta;
|
||||
WriteLn(n:10, PoissonPDF(n, a):20:5, PoissonPDF_old(n, a):20:5);
|
||||
end;
|
||||
WriteLn;
|
||||
end;
|
||||
|
||||
begin
|
||||
Test(9, 1);
|
||||
ReadLn;
|
||||
|
||||
end.
|
||||
|
72
applications/lazstats/tests/probf_test/Project1.lpi
Normal file
72
applications/lazstats/tests/probf_test/Project1.lpi
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LMath"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
68
applications/lazstats/tests/probf_test/Project1.pas
Normal file
68
applications/lazstats/tests/probf_test/Project1.pas
Normal file
@ -0,0 +1,68 @@
|
||||
program Project1;
|
||||
|
||||
uses
|
||||
spe,
|
||||
MathUnit;
|
||||
|
||||
const
|
||||
xmax = 3.0;
|
||||
dx = 0.5;
|
||||
|
||||
// values calculated by Excel (FDIST(x,df1,df2))
|
||||
VALUES_10_20: array[0..6] of Double = (
|
||||
0, 0.129839626, 0.524499532, 0.789053537, 0.910217285, 0.961096364, 0.982490459
|
||||
);
|
||||
VALUES_20_4: array[0..6] of Double = (
|
||||
0, 0.13334765, 0.430681554, 0.622552784, 0.736037189, 0.806299776, 0.852248272
|
||||
);
|
||||
|
||||
procedure Test(DF1, DF2: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
x, y_lazStats, y_numlib, y_excel: Double;
|
||||
ok: string;
|
||||
excel: Boolean;
|
||||
begin
|
||||
excel := ((DF1 = 20) and (DF2 = 4)) or ((DF1 = 10) and (DF2 = 20));
|
||||
|
||||
WriteLn('F distribution with ', DF1, ' and ', DF2, ' degrees of freedom');
|
||||
WriteLn('---------------------------------------------------------------');
|
||||
Write('x':15, 'y(lazstats)':15, 'y(numlib)':15);
|
||||
if excel then Write('y(Excel)':15);
|
||||
WriteLn('OK':15);
|
||||
|
||||
x := 0.0;
|
||||
i := 0;
|
||||
while (x <= xmax) do begin
|
||||
y_numlib := FDist(x, DF1, DF2);
|
||||
y_lazstats := ProbF(x, DF1, DF2);
|
||||
|
||||
if (DF1 = 20) and (DF2 = 4) then
|
||||
y_Excel := 1.0 - VALUES_20_4[i]
|
||||
else
|
||||
if (DF1 = 10) and (DF2 = 20) then
|
||||
y_Excel := 1.0 - VALUES_10_20[i]
|
||||
else
|
||||
y_Excel := 999.999;
|
||||
|
||||
if abs(y_lazstats - y_numlib) < 1E-6 then
|
||||
ok := 'OK'
|
||||
else
|
||||
ok := 'ERROR';
|
||||
|
||||
Write(x:15:5, y_lazstats:15:5, y_numlib:15:5);
|
||||
if excel then Write(y_Excel:15:5);
|
||||
WriteLn(ok:15);
|
||||
|
||||
x := x + dx;
|
||||
inc(i);
|
||||
end;
|
||||
WriteLn;
|
||||
end;
|
||||
|
||||
begin
|
||||
Test(20, 4);
|
||||
Test(10, 20);
|
||||
ReadLn;
|
||||
end.
|
||||
|
64
applications/lazstats/tests/quicksort_test/project1.lpi
Normal file
64
applications/lazstats/tests/quicksort_test/project1.lpi
Normal file
@ -0,0 +1,64 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="project1.lpr"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
89
applications/lazstats/tests/quicksort_test/project1.lpr
Normal file
89
applications/lazstats/tests/quicksort_test/project1.lpr
Normal file
@ -0,0 +1,89 @@
|
||||
program project1;
|
||||
|
||||
uses
|
||||
math;
|
||||
|
||||
type
|
||||
DblDyneVec = array of double;
|
||||
|
||||
procedure Exchange(var a, b: Double);
|
||||
var
|
||||
tmp: Double;
|
||||
begin
|
||||
tmp := a;
|
||||
a := b;
|
||||
b := tmp;
|
||||
end;
|
||||
|
||||
|
||||
procedure QuickSortOn(X: DblDyneVec; Y: DblDyneVec = nil; Z: DblDyneVec = nil);
|
||||
|
||||
procedure DoQuickSort(L, R: Integer);
|
||||
var
|
||||
I,J: Integer;
|
||||
P: Integer;
|
||||
begin
|
||||
repeat
|
||||
I := L;
|
||||
J := R;
|
||||
P := (L + R) div 2;
|
||||
repeat
|
||||
while CompareValue(X[P], X[I]) > 0 do inc(I);
|
||||
while CompareValue(X[P], X[J]) < 0 do dec(J);
|
||||
if I <= J then begin
|
||||
if I <> J then begin
|
||||
Exchange(X[I], X[J]);
|
||||
if Y <> nil then
|
||||
Exchange(Y[I], Y[J]);
|
||||
if Z <> nil then
|
||||
Exchange(Z[I], Z[J]);
|
||||
end;
|
||||
|
||||
if P = I then
|
||||
P := J
|
||||
else if P = J then
|
||||
P := I;
|
||||
|
||||
inc(I);
|
||||
dec(J);
|
||||
end;
|
||||
until I > J;
|
||||
|
||||
if L < J then
|
||||
DoQuickSort(L, J);
|
||||
|
||||
L := I;
|
||||
until I >= R;
|
||||
end;
|
||||
|
||||
begin
|
||||
DoQuickSort(0, High(X));
|
||||
end;
|
||||
|
||||
|
||||
var
|
||||
x: DblDyneVec;
|
||||
y: DblDyneVec;
|
||||
i: Integer;
|
||||
begin
|
||||
SetLength(x, 10);
|
||||
SetLength(y, 10);
|
||||
|
||||
for i := 0 to High(x) do
|
||||
begin
|
||||
x[i] := Random(100);
|
||||
y[i] := i;
|
||||
end;
|
||||
|
||||
for i := 0 to High(x) do
|
||||
WriteLn('i: x=', x[i]:0:0, ' y=', y[i]:0:0);
|
||||
WriteLn;
|
||||
|
||||
QuickSortOn(X, Y);
|
||||
|
||||
for i := 0 to High(x) do
|
||||
WriteLn(i, ': x=', x[i]:0:0, ' y=', y[i]:0:0);
|
||||
|
||||
ReadLn;
|
||||
end.
|
||||
|
72
applications/lazstats/tests/tdist_test/Project1.lpi
Normal file
72
applications/lazstats/tests/tdist_test/Project1.lpi
Normal file
@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<RequiredPackages>
|
||||
<Item>
|
||||
<PackageName Value="TAChartLazarusPkg"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<PackageName Value="LMath"/>
|
||||
</Item>
|
||||
</RequiredPackages>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<OtherUnitFiles Value="..\..\source\units"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf2Set"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
49
applications/lazstats/tests/tdist_test/Project1.pas
Normal file
49
applications/lazstats/tests/tdist_test/Project1.pas
Normal file
@ -0,0 +1,49 @@
|
||||
program Project1;
|
||||
|
||||
uses
|
||||
spe,
|
||||
MathUnit;
|
||||
|
||||
const
|
||||
xmin = 0.0;
|
||||
xmax = 3.0;
|
||||
dx = 0.5;
|
||||
DF = 10;
|
||||
|
||||
procedure Test(s: Integer);
|
||||
var
|
||||
i: Integer;
|
||||
x, y_lazStats, y_numlib: Double;
|
||||
ok: string;
|
||||
begin
|
||||
WriteLn('Student''s t distribution with ', DF, ' degrees of freedom (', s, '-sided)');
|
||||
WriteLn;
|
||||
WriteLn('x':15, 'y(lazstats)':15, 'y(numlib)':15, 'OK':15);
|
||||
x := xmin;
|
||||
while (x <= xmax) do begin
|
||||
if x < 0 then
|
||||
y_numlib := 1.0 - spe.tDist(-x, DF, s)
|
||||
else
|
||||
y_numlib := spe.tDist(x, DF, s);
|
||||
|
||||
if x < 0 then
|
||||
y_lazstats := 1.0 - mathunit.tDist(-x, DF, s=1)
|
||||
else
|
||||
y_lazstats := mathunit.tDist(x, DF, s=1);
|
||||
|
||||
if abs(y_lazstats - y_numlib) < 1E-6 then
|
||||
ok := 'OK'
|
||||
else
|
||||
ok := 'ERROR';
|
||||
|
||||
WriteLn(x:15:5, y_lazstats:15:5, y_numlib:15:5, ok:15);
|
||||
x := x + dx;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
Test(1);
|
||||
Test(2);
|
||||
ReadLn;
|
||||
end.
|
||||
|
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<CONFIG>
|
||||
<ProjectOptions>
|
||||
<Version Value="12"/>
|
||||
<PathDelim Value="\"/>
|
||||
<General>
|
||||
<Flags>
|
||||
<MainUnitHasCreateFormStatements Value="False"/>
|
||||
<MainUnitHasTitleStatement Value="False"/>
|
||||
<MainUnitHasScaledStatement Value="False"/>
|
||||
</Flags>
|
||||
<SessionStorage Value="InProjectDir"/>
|
||||
<Title Value="Project1"/>
|
||||
<UseAppBundle Value="False"/>
|
||||
<ResourceType Value="res"/>
|
||||
</General>
|
||||
<BuildModes>
|
||||
<Item Name="Default" Default="True"/>
|
||||
</BuildModes>
|
||||
<PublishOptions>
|
||||
<Version Value="2"/>
|
||||
<UseFileFilters Value="True"/>
|
||||
</PublishOptions>
|
||||
<RunParams>
|
||||
<FormatVersion Value="2"/>
|
||||
</RunParams>
|
||||
<Units>
|
||||
<Unit>
|
||||
<Filename Value="Project1.pas"/>
|
||||
<IsPartOfProject Value="True"/>
|
||||
</Unit>
|
||||
</Units>
|
||||
</ProjectOptions>
|
||||
<CompilerOptions>
|
||||
<Version Value="11"/>
|
||||
<PathDelim Value="\"/>
|
||||
<Target>
|
||||
<Filename Value="Project1"/>
|
||||
</Target>
|
||||
<SearchPaths>
|
||||
<IncludeFiles Value="$(ProjOutDir)"/>
|
||||
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
|
||||
</SearchPaths>
|
||||
<Linking>
|
||||
<Debugging>
|
||||
<DebugInfoType Value="dsDwarf3"/>
|
||||
</Debugging>
|
||||
</Linking>
|
||||
</CompilerOptions>
|
||||
<Debugging>
|
||||
<Exceptions>
|
||||
<Item>
|
||||
<Name Value="EAbort"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="ECodetoolError"/>
|
||||
</Item>
|
||||
<Item>
|
||||
<Name Value="EFOpenError"/>
|
||||
</Item>
|
||||
</Exceptions>
|
||||
</Debugging>
|
||||
</CONFIG>
|
@ -0,0 +1,43 @@
|
||||
program Project1;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
uses
|
||||
Math, SysUtils;
|
||||
|
||||
const
|
||||
v1Min = 1.0;
|
||||
v1Max = 3.0;
|
||||
dv1 = 0.5;
|
||||
v2Min = 1.0;
|
||||
v2Max = 5.0;
|
||||
dv2 = 0.5;
|
||||
a = 1.0;
|
||||
b = -2.0;
|
||||
c = 100;
|
||||
EPS = 1E-3;
|
||||
REL_ERROR = 0.02;
|
||||
var
|
||||
v1, v2, res, dres: Double;
|
||||
F: TextFile;
|
||||
begin
|
||||
AssignFile(F, 'linear_regression_2vars.csv');
|
||||
Rewrite(F);
|
||||
WriteLn(F, 'Var1,Var2,Result,Weights');
|
||||
v1 := v1Min;
|
||||
while v1 <= v1Max + EPS do
|
||||
begin
|
||||
v2 := v2min;
|
||||
while v2 <= v2Max + EPS do
|
||||
begin
|
||||
res := a * v1 + b * v2 + c;
|
||||
dres := res * REL_ERROR;
|
||||
res := res + RandG(0, dres);
|
||||
WriteLn(F, v1:0:3, ',', v2:0:3, ',', res:0:3, ',', dres:0:3);
|
||||
v2 := v2 + dv2;
|
||||
end;
|
||||
v1 := v1 + dv1;
|
||||
end;
|
||||
CloseFile(F);
|
||||
end.
|
||||
|
@ -0,0 +1,46 @@
|
||||
Var1,Var2,Result,Weights
|
||||
1.000,1.000,101.303,1.980
|
||||
1.000,1.500,98.948,1.960
|
||||
1.000,2.000,97.581,1.940
|
||||
1.000,2.500,96.294,1.920
|
||||
1.000,3.000,92.779,1.900
|
||||
1.000,3.500,96.929,1.880
|
||||
1.000,4.000,91.985,1.860
|
||||
1.000,4.500,87.666,1.840
|
||||
1.000,5.000,91.985,1.820
|
||||
1.500,1.000,104.830,1.990
|
||||
1.500,1.500,100.972,1.970
|
||||
1.500,2.000,96.430,1.950
|
||||
1.500,2.500,95.186,1.930
|
||||
1.500,3.000,95.242,1.910
|
||||
1.500,3.500,95.213,1.890
|
||||
1.500,4.000,94.267,1.870
|
||||
1.500,4.500,93.557,1.850
|
||||
1.500,5.000,86.453,1.830
|
||||
2.000,1.000,102.153,2.000
|
||||
2.000,1.500,97.784,1.980
|
||||
2.000,2.000,101.588,1.960
|
||||
2.000,2.500,94.775,1.940
|
||||
2.000,3.000,96.103,1.920
|
||||
2.000,3.500,90.236,1.900
|
||||
2.000,4.000,92.888,1.880
|
||||
2.000,4.500,94.597,1.860
|
||||
2.000,5.000,91.581,1.840
|
||||
2.500,1.000,100.905,2.010
|
||||
2.500,1.500,100.197,1.990
|
||||
2.500,2.000,99.556,1.970
|
||||
2.500,2.500,100.463,1.950
|
||||
2.500,3.000,100.175,1.930
|
||||
2.500,3.500,92.495,1.910
|
||||
2.500,4.000,94.235,1.890
|
||||
2.500,4.500,94.055,1.870
|
||||
2.500,5.000,94.926,1.850
|
||||
3.000,1.000,102.017,2.020
|
||||
3.000,1.500,97.621,2.000
|
||||
3.000,2.000,97.911,1.980
|
||||
3.000,2.500,94.880,1.960
|
||||
3.000,3.000,94.850,1.940
|
||||
3.000,3.500,96.151,1.920
|
||||
3.000,4.000,93.255,1.900
|
||||
3.000,4.500,92.598,1.880
|
||||
3.000,5.000,90.753,1.860
|
|
Loading…
Reference in New Issue
Block a user