minv/recursion.py
changeset 0 0efde00f9229
equal deleted inserted replaced
-1:000000000000 0:0efde00f9229
       
     1 #!/usr/bin/env python
       
     2 # 11.1
       
     3 import os, sys
       
     4 sys.path += [os.getcwdu() + os.sep + ".." + os.sep + "python"]
       
     5 
       
     6 import pylab as pl
       
     7 from polyfuncs import poladd
       
     8 
       
     9 def recursion(A, dA, C, dC, j):
       
    10     Fo, dFo = C, dC
       
    11     Eo, dEo = 1, 0
       
    12     A_z = A[1:dA+1]
       
    13     dA_z = dA-1
       
    14     zi, dzi = 1, 0
       
    15     for i in range(j-1):
       
    16         if dFo == 0:
       
    17             Fn1 = 0
       
    18         else:
       
    19             Fn1 = Fo[1:dFo+1]
       
    20         dFn1 = max(dFo-1, 0)
       
    21         Fn2 = -Fo[0]*A_z
       
    22         dFn2 = dA-1
       
    23         Fn, dFn = poladd(Fn1, dFn1, Fn2, dFn2)
       
    24         Fn = Fn.squeeze()
       
    25         zi = pl.convolve(zi,[0,1])
       
    26         dzi += 1
       
    27         En2 = Fn[0]*zi
       
    28         dEn2 = dzi
       
    29         En, dEn = poladd(Eo, dEo, En2, dEn2)
       
    30         En = En.squeeze()
       
    31         Eo, dEo = En, dEn
       
    32         Fo, dFo = Fn, dFn
       
    33 
       
    34     if dFo == 0:
       
    35         Fn1 = 0
       
    36     else:
       
    37         Fn1 = Fo[1:dFo+1]
       
    38 
       
    39     dFn1 = max(dFo-1, 0)
       
    40     Fn2 = -Fo[0]*A_z
       
    41     dFn2 = dA-1
       
    42     Fn, dFn = poladd(Fn1, dFn1, Fn2, dFn2)
       
    43     Fn = Fn.squeeze()
       
    44     Ej, dEj = Eo, dEo
       
    45     Fj, dFj = Fn, dFn
       
    46 
       
    47 
       
    48     return Fj, dFj, Ej, dEj