view scripts/control/polyout.m @ 3346:8dd4718801fd

[project @ 1999-11-09 18:18:12 by jwe]
author jwe
date Tue, 09 Nov 1999 18:18:37 +0000
parents f7e4a95916f2
children 69b167451491
line wrap: on
line source

# Copyright (C) 1995,1998 Auburn University.  All Rights Reserved.
#
# This file is part of Octave.
#
# Octave is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# Octave is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with Octave; see the file COPYING.  If not, write to the Free
# Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA.

## -*- texinfo -*-
## @deftypefn {Function File } { @var{y} =} polyout ( @var{c}@{, @var{x}@})
## write formatted polynomial 
## @example
##    c(x) = c(1) * x^n + ... + c(n) x + c(n+1)
## @end example
##  to string @var{y} or to the screen (if @var{y} is omitted)
##  @var{x} defaults to the string @code{"s"}
## @end deftypefn

##  See also: polyval, polyvalm, poly, roots, conv, deconv, residue, 
##	filter, polyderiv, polyinteg

function y = polyout(c,x)

# Written by A. Scottedward Hodel (scotte@eng.auburn.edu) May 1995)
# Nov 1998: Correctly handles complex coefficients
  
  if (nargin < 1 ) || (nargin > 2) || (nargout < 0 ) || (nargout > 1)
    usage("[y = ] polyout(c,[x])");
  endif

  if (!is_vector(c))
    error("polyout: first argument must be a vector");
  endif
  
  if (nargin == 1)
    x = 's';
  elseif( ! isstr(x) )
    error("polyout: second argument must be a string");
  endif

  n = length(c);
  if(n > 0)
    n1 = n+1;

    if( imag(c(1)) )     tmp = com2str(c(1))
    else                 tmp = num2str(c(1));       endif

    for ii=2:n
      if(real(c(ii)) < 0)     ns = ' - ';    c(ii) = -c(ii);
      else                    ns = ' + ';                      endif

      if( imag(c(ii)) )       nstr = sprintf("(%s)",com2str(c(ii)) );
      else                    nstr = num2str(c(ii));           endif

      tmp = sprintf("%s*%s^%d%s%s",tmp,x,n1-ii,ns,nstr);
      
    endfor
  else
    tmp = " ";
  endif

  if(nargout == 0)
    disp(tmp)
  else
    y = tmp;
  endif

endfunction