I just tried using the Delphi version of the following functions (from the unit elliptic.pas)
function EllipticIntegralK(m : Double):Double;
function EllipticIntegralE(m : Double):Double;
to calculate the complete elliptic integrals of the first and second type respectively. It appears that the functions do not return the correct numerical values. I used the following procedure to compare Alglib output with an alternate iterative solution...
procedure TestElliptic;
var
i : integer;
k, AlglibK, AlglibE, AltK, AltE : real;
begin
Form1.memo1.lines.clear;
Form1.memo1.lines.add('---k-------AlglibK---------AlglibE-----------AltK-----------AltE');
for i := 1 to 19 do
begin
k := i/20.0;
AlglibK := EllipticIntegralK(k);
AlglibE := EllipticIntegralE(k);
AltK := AltEllipticIntegralK(k);
AltE := AltEllipticIntegralE(k);
Form1.memo1.lines.add(Format('%5.2f : %12.9f %12.9f : %12.9f %12.9f',
[k,AlglibK,AlglibE,AltK,AltE]));
end;
end;
...I get the following results:
---k-------AlglibK---------AlglibE-----------AltK-----------AltE
0.05 : 1.591003454 1.550973352 : 1.571779457 1.569814118
0.10 : 1.612441349 1.530757637 : 1.574745562 1.566861942
0.15 : 1.635256732 1.510121832 : 1.579745661 1.561922968
0.20 : 1.659623599 1.489035058 : 1.586867847 1.554968546
0.25 : 1.685750355 1.467462209 : 1.596242222 1.545957256
0.30 : 1.713889448 1.445363064 : 1.608048620 1.534833465
0.35 : 1.744350597 1.422691133 : 1.622528103 1.521525269
0.40 : 1.777519371 1.399392139 : 1.639999866 1.505941612
0.45 : 1.813883937 1.375401972 : 1.660886238 1.487968272
0.50 : 1.854074677 1.350643881 : 1.685750355 1.467462209
0.55 : 1.898924910 1.325024498 : 1.715354496 1.444243488
0.60 : 1.949567750 1.298428035 : 1.750753803 1.418083394
0.65 : 2.007598398 1.270707480 : 1.793454100 1.388686356
0.70 : 2.075363135 1.241670568 : 1.845693998 1.355661136
0.75 : 2.156515647 1.211056028 : 1.910989781 1.318472108
0.80 : 2.257205327 1.178489924 : 1.995302778 1.276349943
0.85 : 2.389016486 1.143395792 : 2.109935468 1.228108314
0.90 : 2.578092113 1.104774733 : 2.280549138 1.171697053
0.95 : 2.908337248 1.060473728 : 2.590011231 1.102721648
Comparison of Alglib output with an alternate algorithm plus published tables and other resources (for example the calculator at
http://keisan.casio.com/has10/SpecExec.cgi) suggests that the Alglib results (on the left of the table) are incorrect.
Mike