0
|
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
|