diff scripts/polynomial/conv.m @ 787:c5d35bb139b6

[project @ 1994-10-11 00:34:13 by jwe] Initial revision
author jwe
date Tue, 11 Oct 1994 00:34:39 +0000
parents
children 3470f1e25a79
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/scripts/polynomial/conv.m
@@ -0,0 +1,55 @@
+function y = conv (a, b)
+  
+  # Convolve two vectors.
+  # y = conv (a, b) returns a vector of length equal to length (a) +
+  # length (b) -1.
+  # If a and b are polynomial coefficient vectors, conv returns the
+  # coefficients of the product polynomial.
+  #
+  # SEE ALSO: deconv, poly, roots, residue, polyval, polyderiv,
+  # polyinteg 
+
+  # Author:
+  #  Tony Richardson
+  #  amr@mpl.ucsd.edu
+  #  June 1994
+
+  if (nargin != 2)
+    error ("usage:  conv(a,b)");
+  endif
+
+  if (is_matrix(a) || is_matrix(b))
+    error("conv: both arguments must be vectors");
+  endif
+
+  la = length (a);
+  lb = length (b);
+
+  ly = la + lb - 1;
+
+  # Ensure that both vectors are row vectors.
+  if (rows (a) > 1)
+    a = reshape (a, 1, la);
+  endif
+  if (rows (b) > 1)
+    b = reshape (b, 1, lb);
+  endif
+
+  # Use the shortest vector as the coefficent vector to filter.
+  if (la < lb)
+    if (ly > lb)
+      x = [b zeros (1, ly - lb)];
+    else
+      x = b;
+    endif
+    y = filter (a, 1, x);
+  else
+    if(ly > la)
+      x = [a zeros (1, ly - la)];
+    else
+      x = a;
+    endif
+    y = filter (b, 1, x);
+  endif
+
+endfunction