annotate scripts/polynomial/conv-tuwien.m @ 2121:bc6ecd8f1175

[project @ 1996-05-12 06:45:55 by jwe]
author jwe
date Sun, 12 May 1996 06:45:55 +0000
parents 4fcd2e68dd3b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
558
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
1 function c=conv(a,b)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
2 #
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
3 # usage: conv(a,b)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
4 #
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
5 # Returns the convolution of vectors a and b. The resulting vector
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
6 # is of length(a)+length(b)-1. If a and b are polynomial coefficients
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
7 # conv(a,b) is equivalent to polynomial multiplication.
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
8
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
9 # written by Gerhard Kircher on Aug 27, 1993
786
4fcd2e68dd3b [project @ 1994-10-10 19:51:37 by jwe]
jwe
parents: 558
diff changeset
10 # modified by KH (Kurt.Hornik@ci.tuwien.ac.at) on Dec 23, 1993.
558
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
11
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
12 l_a = length(a);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
13 l_b = length(b);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
14 return_row = 0;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
15 if (l_a > l_b)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
16 if (rows(a) == 1)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
17 return_row = 1;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
18 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
19 else
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
20 if (rows(b) == 1)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
21 return_row = 1;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
22 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
23 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
24 a = reshape(a, l_a, 1);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
25 b = reshape(b, l_b, 1);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
26 if (l_a == 1 || l_b == 1)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
27 c = a * b;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
28 else
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
29 l_c = l_a + l_b - 1;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
30 a(l_c) = 0;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
31 b(l_c) = 0;
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
32 c = ifft(fft(a) .* fft(b));
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
33 if !( any(imag(a)) || any(imag(b)) )
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
34 c = real(c);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
35 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
36 if !( any(a-round(a)) || any(b-round(b)) )
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
37 c = round(c);
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
38 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
39 endif
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
40 if (return_row == 1)
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
41 c = c';
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
42 end
faf108b99d21 [project @ 1994-07-25 20:38:45 by jwe]
jwe
parents:
diff changeset
43 endfunction