Mercurial > hg > octave-nkf
annotate scripts/polynomial/conv.m @ 15063:36cbcc37fdb8
Refactor configure.ac to make it more understandable.
Use common syntax for messages in config.h
Correct typos, refer to libraries in all caps, use two spaces after period.
Follow Autoconf guidelines and place general tests before specific tests.
* configure.ac, m4/acinclude.m4: Use common syntax for messages in config.h
Correct typos, refer to libraries in all caps, use two spaces after period.
Follow Autoconf guidelines and place general tests before specific tests.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 31 Jul 2012 10:28:51 -0700 |
parents | f3d52523cde1 |
children | bc924baa2c4e |
rev | line source |
---|---|
14138
72c96de7a403
maint: update copyright notices for 2012
John W. Eaton <jwe@octave.org>
parents:
14104
diff
changeset
|
1 ## Copyright (C) 1994-2012 John W. Eaton |
2313 | 2 ## |
3 ## This file is part of Octave. | |
4 ## | |
5 ## Octave is free software; you can redistribute it and/or modify it | |
6 ## under the terms of the GNU General Public License as published by | |
7016 | 7 ## the Free Software Foundation; either version 3 of the License, or (at |
8 ## your option) any later version. | |
2313 | 9 ## |
10 ## Octave is distributed in the hope that it will be useful, but | |
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 ## General Public License for more details. | |
14 ## | |
15 ## You should have received a copy of the GNU General Public License | |
7016 | 16 ## along with Octave; see the file COPYING. If not, see |
17 ## <http://www.gnu.org/licenses/>. | |
1025 | 18 |
3368 | 19 ## -*- texinfo -*- |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
20 ## @deftypefn {Function File} {} conv (@var{a}, @var{b}) |
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
21 ## @deftypefnx {Function File} {} conv (@var{a}, @var{b}, @var{shape}) |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
22 ## Convolve two vectors @var{a} and @var{b}. |
3426 | 23 ## |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
24 ## The output convolution is a vector with length equal to |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
25 ## @code{length (@var{a}) + length (@var{b}) - 1}. |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
26 ## When @var{a} and @var{b} are the coefficient vectors of two polynomials, the |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
27 ## convolution represents the coefficient vector of the product polynomial. |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
28 ## |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
29 ## The optional @var{shape} argument may be |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
30 ## |
11084 | 31 ## @table @asis |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
32 ## @item @var{shape} = "full" |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
33 ## Return the full convolution. (default) |
11084 | 34 ## |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
35 ## @item @var{shape} = "same" |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
36 ## Return the central part of the convolution with the same size as @var{a}. |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
37 ## @end table |
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
38 ## |
14104
614505385171
doc: Overhaul docstrings for polynomial functions.
Rik <octave@nomad.inbox5.com>
parents:
13295
diff
changeset
|
39 ## @seealso{deconv, conv2, convn, fftconv} |
3368 | 40 ## @end deftypefn |
2311 | 41 |
3202 | 42 ## Author: Tony Richardson <arichard@stark.cc.oh.us> |
2312 | 43 ## Created: June 1994 |
44 ## Adapted-By: jwe | |
45 | |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
46 function y = conv (a, b, shape = "full") |
2325 | 47 |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
48 if (nargin < 2 || nargin > 3) |
6046 | 49 print_usage (); |
787 | 50 endif |
51 | |
4030 | 52 if (! (isvector (a) && isvector (b))) |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
53 error ("conv: both arguments A and B must be vectors"); |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
54 elseif (nargin == 3 && ! any (strcmpi (shape, {"full", "same", "valid"}))) |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
55 error ('conv: SHAPE argument must be "full", "same", or "valid"'); |
787 | 56 endif |
57 | |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
58 la = la_orig = length (a); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
59 lb = lb_orig = length (b); |
787 | 60 |
61 ly = la + lb - 1; | |
62 | |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
63 if (ly == 0) |
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
64 y = zeros (1, 0); |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
65 return; |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
66 endif |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
67 |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
68 ## Use shortest vector as the coefficent vector to filter. |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
69 if (la > lb) |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
70 [a, b] = deal (b, a); # Swap vectors |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
71 lb = la; |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
72 endif |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
73 x = b; |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
74 |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
75 ## Pad longer vector to convolution length. |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
76 if (ly > lb) |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
77 x(end+1:end+ly-lb) = 0; |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
78 endif |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
79 |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
80 y = filter (a, 1, x); |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
81 |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
82 if (strcmpi (shape, "same")) |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
83 idx = ceil ((ly - la) / 2); |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
84 y = y(idx+1:idx+la); |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
85 elseif (strcmpi (shape, "valid")) |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
86 len = la_orig - lb_orig; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
87 y = y(lb_orig:lb_orig+len); |
787 | 88 endif |
89 | |
90 endfunction | |
7411 | 91 |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
92 |
9433
38a0f9dc0ab4
conv.m: fix Matlab incompatibility; new tests
Robert T. Short <octave@phaselockedsystems.com>
parents:
8920
diff
changeset
|
93 %!test |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
94 %! x = ones (3,1); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
95 %! y = ones (1,3); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
96 %! b = 2; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
97 %! c = 3; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
98 %! assert (conv (x, x), [1; 2; 3; 2; 1]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
99 %! assert (conv (y, y), [1, 2, 3, 2, 1]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
100 %! assert (conv (x, y), [1, 2, 3, 2, 1]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
101 %! assert (conv (y, x), [1; 2; 3; 2; 1]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
102 %! assert (conv (c, x), [3; 3; 3]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
103 %! assert (conv (c, y), [3, 3, 3]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
104 %! assert (conv (x, c), [3; 3; 3]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
105 %! assert (conv (y, c), [3, 3, 3]); |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
106 %! assert (conv (b, c), 6); |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
107 |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
108 %!shared a,b |
8158
15e4a450bf84
conv.m: Correct row/col orientation of output
Ben Abbott <bpabbott@mac.com>
parents:
7411
diff
changeset
|
109 %!test |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
110 %! a = 1:10; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
111 %! b = 1:3; |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
112 %!assert (size (conv (a,b)), [1, numel(a)+numel(b)-1]) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
113 %!assert (size (conv (b,a)), [1, numel(a)+numel(b)-1]) |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
114 |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
115 %!test |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
116 %! a = (1:10).'; |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
117 %!assert (size (conv (a,b)), [numel(a)+numel(b)-1, 1]) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
118 %!assert (size (conv (b,a)), [numel(a)+numel(b)-1, 1]) |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
119 |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
120 %!test |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
121 %! a = 1:10; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
122 %! b = (1:3).'; |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
123 %!assert (size (conv (a,b)), [1, numel(a)+numel(b)-1]) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
124 %!assert (size (conv (b,a)), [1, numel(a)+numel(b)-1]) |
9433
38a0f9dc0ab4
conv.m: fix Matlab incompatibility; new tests
Robert T. Short <octave@phaselockedsystems.com>
parents:
8920
diff
changeset
|
125 |
8158
15e4a450bf84
conv.m: Correct row/col orientation of output
Ben Abbott <bpabbott@mac.com>
parents:
7411
diff
changeset
|
126 %!test |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
127 %! a = 1:10; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
128 %! b = 1:3; |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
129 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
130 %!assert (conv (a,b,"full"), conv (a,b)) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
131 %!assert (conv (b,a,"full"), conv (b,a)) |
11124 | 132 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
133 %!assert (conv (a,b,"same"), [4, 10, 16, 22, 28, 34, 40, 46, 52, 47]) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
134 %!assert (conv (b,a,"same"), [28, 34, 40]) |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
135 |
14363
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
136 %!assert (conv (a,b,"valid"), [10, 16, 22, 28, 34, 40, 46, 52]) |
f3d52523cde1
Use Octave coding conventions in all m-file %!test blocks
Rik <octave@nomad.inbox5.com>
parents:
14352
diff
changeset
|
137 %!assert (conv (b,a,"valid"), zeros (1,0)) |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
138 |
11082
4558aad4c41d
conv.m: handle "same" shape argument
John W. Eaton <jwe@octave.org>
parents:
10224
diff
changeset
|
139 |
11085
2beacd515e09
Update docstrings for convolution family of functions (conv, conv2, fftconv)
Rik <octave@nomad.inbox5.com>
parents:
11084
diff
changeset
|
140 %% Test input validation |
13295
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
141 %!error conv (1) |
96c7143304d9
conv.m: Simplify algorithm and add more input validation and tests
Rik <octave@nomad.inbox5.com>
parents:
11523
diff
changeset
|
142 %!error conv (1,2,3,4) |
14347
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
143 %!error <A and B must be vectors> conv ([1, 2; 3, 4], 3) |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
144 %!error <A and B must be vectors> conv (3, [1, 2; 3, 4]) |
12c70d00c04e
conv.m: Add "valid" as possible SHAPE parameter (Bug #34893)
Rik <octave@nomad.inbox5.com>
parents:
14138
diff
changeset
|
145 %!error <SHAPE argument must be> conv (2, 3, "INVALID_SHAPE") |
11124 | 146 |