summaryrefslogtreecommitdiff
path: root/modules/signal_processing/macros/%k.sci
blob: 6cc05a10174fe54e846c3bb0fab46a17b711a9b3 (plain)
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
// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
// Copyright (C) INRIA - F.D
//
// This file must be used under the terms of the CeCILL.
// This source file is licensed as described in the file COPYING, which
// you should have received as part of this distribution.  The terms
// are also available at
// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt

function [K]=%k(m)
    //K=%k(m)
    //Calculates Jacobi's complete elliptic integral
    //of the first kind:
    //  K = integral from 0 to 1 of
    //      [(1-t**2)(1-m*t**2)]**(-1/2)
    //m is allowed to be a vector
    //Ref :Abramowitz and Stegun page 598
    //  m :Parameter used in calculating the elliptic
    //    :integral where 0<m<1.
    //  K :Value of the elliptic integral from 0 to 1
    //    :on the real axis.
    //
    //!

    [n1,n2]=size(m);
    un=ones(n1,n2);
    a=un;
    b=sqrt(un-m);
    c=sqrt(m);
    while max(abs(c)) > %eps,
        an=0.5*(a+b);
        bn=sqrt(a.*b);
        cn=0.5*(a-b);
        a=an;
        b=bn;
        c=cn;
    end,
    K=%pi*un./(2*a);
endfunction