```⍝ Function power limit (fixpoint):

⎕pp←5 ⋄ ⎕io←1 ⋄ 1
1
enlist← {1↓↑,/'·',,,¨⍵}limit    ⍝ Expensive alternative to primitive: ∊.
enlist ,∘⊂/⍳5
1 2 3 4 5

0.5∘× limit 2                   ⍝ Fixpoint of halving function.
0

⍝   Fix this test so that it works for both complex and vanilla interpreters:
⍝
⍝      ⍝ Note that a function can have more than one fixpoint:
⍝
⍝      *∘(÷3) limit¨¯2 2            ⍝ Two fixpoints of cube root function.
⍝¯1 1
⍝ Operator: <nr> returns the next term in a Newton-Raphson approximation:

nr←{⍺←⎕CT           ⍝ Newton-Raphson.
y ∆y←⍺⍺¨0 ⍺+⊂⍵  ⍝ f(x), f(x+∆)
⍵+(⍺×y)÷y-∆y    ⍝ next estimate.
}

1∘○ nr limit 3 6 9              ⍝ Roots of Sin(x) near x=3, x=6, x=9.
3.1416 6.2832 9.4248

⍝ Gianluigi Quario suggests the following example for finding the Arithmetic-
⍝ Geometric Mean (AGM).
⍝
⍝ The arithmetic-geometric mean of two numbers M and N is defined by starting
⍝ with a(0)←M  and  g(0)←N, then iterating:
⍝
⍝   a(n+1) ← arithmetic mean of a(n) and g(n)
⍝   g(n+1) ← geometric  mean of a(n) and g(n)
⍝       until
⍝   a(n)=g(n)

AM←{(+/⍵)×÷⍴,⍵}                 ⍝ Arithmetic mean.
GM←{(×/⍵)*÷⍴,⍵}                 ⍝ Geometric  mean.
AGM←{⍬⍴{(AM ⍵),GM ⍵}limit ⍵}    ⍝ Arithmetic-geometric mean.

AM 1 2 3 4 5
3
GM 1 2 3 4 5
2.6052
AGM 1 2 3 4 5
2.7991
÷AGM 1 2*÷2                     ⍝ Gauss's constant.
0.83463

⍝ Gianluigi's second example calculates ArcTan by similar means. (Acton, F.S.
⍝ "The Arctangent." In Numerical Methods that Work, upd. and rev. Washington,DC:
⍝ Math. Assoc. Amer., pp. 6-10, 1990.)

ArcTan←{
⍝ Inverse trigonometric tangent - gqr 19-11-2002.
⍝ For scalar ⍵: (ArcTan ⍵)≡¯3○⍵
⍝
⍝ Limit's operand function returns a 2-vector. Repeated application
⍝ of the function produces two sequences, both of which converge and
⍝ have the same limit:
⍝
⍝    A≡ {a(0),a(1), ... , a(n), ...   }
⍝    G≡ {g(0),g(1), ... , g(n), ...   }
⍝
⍝  Starting with arguments:
⍝       a(0)←(1+⍵*2)*-÷2  and  g(0)←1
⍝  the iteration produces:
⍝       a(n+1)← arithmetic mean of a(n)   and g(n)
⍝       g(n+1)← geometric  mean of a(n+1) and g(n)
⍝  until:
⍝   a(n+1)=a(n) and g(n+1)=g(n) and a(n+1)=g(n+1)

next←{                          ⍝ next term in sequence.
AM←{(+/⍵)×÷⍴⍵}              ⍝ arithmetic mean.
GM←{(×/⍵)*÷⍴⍵}              ⍝ geometric  mean.
(AM ⍵),GM(AM ⍵),1↓⍵
}
start←⍬⍴(1+⍵*2)*-÷2
finish←⍬⍴next limit start,1     ⍝ calculated limit
⍬⍴⍵×start÷finish
}

ArcTan 0.5                      ⍝ method using limit ...
0.46365

¯3○0.5                          ⍝ ... agrees with primitive function.
0.46365

⍬⍴{⍵×2-¯1↑⍵} limit 20 0.3       ⍝ Univac division algorithm.
66.667

Back to: code

Back to: Workspaces
```