Mercurial > octave-nkf
diff doc/interpreter/poly.txi @ 3294:bfe1573bd2ae
[project @ 1999-10-19 10:06:07 by jwe]
author | jwe |
---|---|
date | Tue, 19 Oct 1999 10:08:42 +0000 |
parents | |
children | a4cd1e9d9962 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/interpreter/poly.txi Tue Oct 19 10:08:42 1999 +0000 @@ -0,0 +1,259 @@ +@c Copyright (C) 1996, 1997 John W. Eaton +@c This is part of the Octave manual. +@c For copying conditions, see the file gpl.texi. + +@node Polynomial Manipulations, Control Theory, Sets, Top +@chapter Polynomial Manipulations + +In Octave, a polynomial is represented by its coefficients (arranged +in descending order). For example, a vector +@iftex +@end iftex +@ifinfo + $c$ +@end ifinfo +of length +@iftex +@tex + $N+1$ +@end tex +@ifinfo + @var{N+1} +@end ifinfo + corresponds to the following polynomial of order +@iftex +@tex + $N$ +$$ + p (x) = c_1 x^N + ... + c_N x + c_{N+1}. +$$ +@end tex +@end iftex +@ifinfo + @var{N} + +@example +p(x) = @var{c}(1) x^@var{N} + ... + @var{c}(@var{N}) x + @var{c}(@var{N}+1). +@end example +@end ifinfo + +@deftypefn {Function File} {} compan (@var{c}) +Compute the companion matrix corresponding to polynomial coefficient +vector @var{c}. + +The companion matrix is +@iftex +@tex +$$ +A = \left[\matrix{ + -c_2/c_1 & -c_3/c_1 & \cdots & -c_N/c_1 & -c_{N+1}/c_1\cr + 1 & 0 & \cdots & 0 & 0 \cr + 0 & 1 & \cdots & 0 & 0 \cr + \vdots & \vdots & \ddots & \vdots & \vdots \cr + 0 & 0 & \cdots & 1 & 0}\right]. +$$ +@end tex +@end iftex +@ifinfo + +@smallexample + _ _ + | -c(2)/c(1) -c(3)/c(1) ... -c(N)/c(1) -c(N+1)/c(1) | + | 1 0 ... 0 0 | + | 0 1 ... 0 0 | +A = | . . . . . | + | . . . . . | + | . . . . . | + |_ 0 0 ... 1 0 _| +@end smallexample +@end ifinfo + +The eigenvalues of the companion matrix are equal to the roots of the +polynomial. +@end deftypefn + +@deftypefn {Function File} {} conv (@var{a}, @var{b}) +Convolve two vectors. + +@code{y = conv (a, b)} returns a vector of length equal to +@code{length (a) + length (b) - 1}. +If @var{a} and @var{b} are polynomial coefficient vectors, @code{conv} +returns the coefficients of the product polynomial. +@end deftypefn + +@deftypefn {Function File} {} deconv (@var{y}, @var{a}) +Deconvolve two vectors. + +@code{[b, r] = deconv (y, a)} solves for @var{b} and @var{r} such that +@code{y = conv (a, b) + r}. + +If @var{y} and @var{a} are polynomial coefficient vectors, @var{b} will +contain the coefficients of the polynomial quotient and @var{r} will be +a remander polynomial of lowest order. +@end deftypefn + +@deftypefn {Function File} {} poly (@var{a}) +If @var{a} is a square @var{N}-by-@var{N} matrix, @code{poly (@var{a})} +is the row vector of the coefficients of @code{det (z * eye (N) - a)}, +the characteristic polynomial of @var{a}. If @var{x} is a vector, +@code{poly (@var{x})} is a vector of coefficients of the polynomial +whose roots are the elements of @var{x}. +@end deftypefn + +@deftypefn {Function File} {} polyderiv (@var{c}) +Return the coefficients of the derivative of the polynomial whose +coefficients are given by vector @var{c}. +@end deftypefn + +@deftypefn {Function File} {[@var{p}, @var{yf}] =} polyfit (@var{x}, @var{y}, @var{n}) +Return the coefficients of a polynomial @var{p}(@var{x}) of degree +@var{n} that minimizes +@iftex +@tex +$$ +\sum_{i=1}^N (p(x_i) - y_i)^2 +$$ +@end tex +@end iftex +@ifinfo +@code{sumsq (p(x(i)) - y(i))}, +@end ifinfo + to best fit the data in the least squares sense. +@end deftypefn + +If two output arguments are requested, the second contains the values of +the polynomial for each value of @var{x}. + +@deftypefn {Function File} {} polyinteg (@var{c}) +Return the coefficients of the integral of the polynomial whose +coefficients are represented by the vector @var{c}. + +The constant of integration is set to zero. +@end deftypefn + +@deftypefn {Function File} {} polyreduce (@var{c}) +Reduces a polynomial coefficient vector to a minimum number of terms by +stripping off any leading zeros. +@end deftypefn + +@deftypefn {Function File} {} polyval (@var{c}, @var{x}) +Evaluate a polynomial. + +@code{polyval (@var{c}, @var{x})} will evaluate the polynomial at the +specified value of @var{x}. + +If @var{x} is a vector or matrix, the polynomial is evaluated at each of +the elements of @var{x}. +@end deftypefn + +@deftypefn {Function File} {} polyvalm (@var{c}, @var{x}) +Evaluate a polynomial in the matrix sense. + +@code{polyvalm (@var{c}, @var{x})} will evaluate the polynomial in the +matrix sense, i.e. matrix multiplication is used instead of element by +element multiplication as is used in polyval. + +The argument @var{x} must be a square matrix. +@end deftypefn + +@deftypefn {Function File} {} residue (@var{b}, @var{a}, @var{tol}) +If @var{b} and @var{a} are vectors of polynomial coefficients, then +residue calculates the partial fraction expansion corresponding to the +ratio of the two polynomials. +@cindex partial fraction expansion + +The function @code{residue} returns @var{r}, @var{p}, @var{k}, and +@var{e}, where the vector @var{r} contains the residue terms, @var{p} +contains the pole values, @var{k} contains the coefficients of a direct +polynomial term (if it exists) and @var{e} is a vector containing the +powers of the denominators in the partial fraction terms. + +Assuming @var{b} and @var{a} represent polynomials +@iftex +@tex +$P(s)$ and $Q(s)$ +@end tex +@end iftex +@ifinfo + P (s) and Q(s) +@end ifinfo + we have: +@iftex +@tex +$$ +{P(s)\over Q(s)} = \sum_{m=1}^M {r_m\over (s-p_m)^e_m} + + \sum_{i=1}^N k_i s^{N-i}. +$$ +@end tex +@end iftex +@ifinfo + +@example + P(s) M r(m) N + ---- = SUM ------------- + SUM k(i)*s^(N-i) + Q(s) m=1 (s-p(m))^e(m) i=1 +@end example +@end ifinfo + +@noindent +where @var{M} is the number of poles (the length of the @var{r}, +@var{p}, and @var{e} vectors) and @var{N} is the length of the @var{k} +vector. + +The argument @var{tol} is optional, and if not specified, a default +value of 0.001 is assumed. The tolerance value is used to determine +whether poles with small imaginary components are declared real. It is +also used to determine if two poles are distinct. If the ratio of the +imaginary part of a pole to the real part is less than @var{tol}, the +imaginary part is discarded. If two poles are farther apart than +@var{tol} they are distinct. For example, + +@example +@group + b = [1, 1, 1]; + a = [1, -5, 8, -4]; + [r, p, k, e] = residue (b, a); + @result{} r = [-2, 7, 3] + @result{} p = [2, 2, 1] + @result{} k = [](0x0) + @result{} e = [1, 2, 1] +@end group +@end example + +@noindent +which implies the following partial fraction expansion +@iftex +@tex +$$ +{s^2+s+1\over s^3-5s^2+8s-4} = {-2\over s-2} + {7\over (s-2)^2} + {3\over s-1} +$$ +@end tex +@end iftex +@ifinfo + +@example + s^2 + s + 1 -2 7 3 + ------------------- = ----- + ------- + ----- + s^3 - 5s^2 + 8s - 4 (s-2) (s-2)^2 (s-1) +@end example +@end ifinfo +@end deftypefn + +@deftypefn {Function File} {} roots (@var{v}) + +For a vector @var{v} with @var{N} components, return +the roots of the polynomial +@iftex +@tex +$$ +v_1 z^{N-1} + \cdots + v_{N-1} z + v_N. +$$ +@end tex +@end iftex +@ifinfo + +@example +v(1) * z^(N-1) + ... + v(N-1) * z + v(N). +@end example +@end ifinfo +@end deftypefn