equal
deleted
inserted
replaced
|
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 |