From bug-octave-request at bevo dot che dot wisc dot edu Tue Jan 16 01:27:52 2001 Subject: tf2zp/zp2tf problems From: Paul Kienzle To: bug-octave at bevo dot che dot wisc dot edu, pkienzle@kienzle.powernet.co.uk Date: Mon, 15 Jan 2001 13:42:32 +0000 To: bug-octave at bevo dot che dot wisc dot edu Cc: pkienzle Subject: tf2zp/zp2tf problems Bug report for Octave 2.1.31 configured for %OCTAVE_CANONICAL_HOST_TYPE% Description: ----------- zp2tf and tf2zp both give "empty matrix found in matrix list" warnings tf2zp halts with error zp2tf has trouble with repeated roots Repeat-By: --------- octave2.1:57> [b,a] = zp2tf([.3+.2i,.3-.2i],[.2+.9i,.2-.9i],2) warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 b = 2.00000 -1.20000 0.26000 a = 1.00000 -0.40000 0.85000 octave2.1:58> [z, p, g] = tf2zp(b,a) warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 error: element number 2 undefined in return list error: evaluating assignment expression near line 55, column 12 error: called from `zgscal' in file `/usr/share/octave/2.1.31/m/control/util/zgscal.m' error: called from `__zgpbal__' in file `/usr/share/octave/2.1.31/m/control/util/__zgpbal__.m' error: called from `tzero' in file `/usr/share/octave/2.1.31/m/control/base/tzero.m' error: called from `tf2zp' in file `/usr/share/octave/2.1.31/m/control/system/tf2zp.m' octave2.1:25> [b,a]=zp2tf([],[.3i, -.3i, .3i, -.3i]',1) warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 warning: empty matrix found in matrix list near line 48, column 49 error: single index only valid for row or column vector error: evaluating assignment expression near line 43, column 9 error: evaluating if command near line 34, column 3 error: called from `__zp2ssg2__' in file `/usr/share/octave/2.1.31/m/control/system/__zp2ssg2__.m' error: called from `zp2tf' in file `/usr/share/octave/2.1.31/m/control/system/zp2tf.m' Fix: --- I've been using the following simple functions. Perhaps they are less accurate? function [z, p, g] = tf2zp(b, a) if nargin!=2 || nargout!=3, usage("[z, p, g] = tf2zp(b, a)"); endif if isempty(b) || isempty(a) error("tf2zp b or a is empty. Perhaps already in zero-pole form?"); endif g = b(1)/a(1); z = roots(b); p = roots(a); endfunction function [b, a] = zp2tf(z, p, g) if nargin != 3 || nargout != 2 usage("[b, a] = zp2tf(z, p, g)"); endif b = g*real(poly(z)); a = real(poly(p)); endfunction Note that zp2tf doesn't check that imaginary values are paired, so it will produce incorrect output on incorrect input rather than generating an error. Configuration (please do not edit this section): ----------------------------------------------- uname output: Linux kienzle 2.2.17 #1 Sun Sep 10 17:51:52 BST 2000 i586 unknown configure opts: --prefix=/usr --datadir=/usr/share --libdir=/usr/lib --libexecdir=/usr/lib --infodir=/usr/share/info --mandir=/usr/share/man --with-g77 --with-fastblas --enable-dl --enable-shared --enable-lite-kernel --disable-static --host i386-linux Fortran compiler: g77 FFLAGS: -O2 F2C: F2CFLAGS: FLIBS: -lg2c -lm -L/usr/lib/gcc-lib/i386-linux/2.95.2 -lm CPPFLAGS: INCFLAGS: -I. -I. -I./liboctave -I./src -I./libcruft/misc -I./glob -I./glob C compiler: gcc, version 2.95.2 20000220 (Debian GNU/Linux) CFLAGS: -O2 CPICFLAG: -fPIC C++ compiler: c++, version 2.95.2 20000220 (Debian GNU/Linux) CXXFLAGS: -O2 CXXPICFLAG: -fPIC LDFLAGS: -s LIBFLAGS: -L. RLD_FLAG: -Xlinker -rpath -Xlinker /usr/lib/octave-2.1.31 TERMLIBS: -lncurses LIBS: LEXLIB: LIBPLPLOT: LIBDLFCN: LIBGLOB: ./glob/glob.o ./glob/fnmatch.o DEFS: -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_READLINE=1 -D__NO_MATH_INLINES=1 -DCXX_NEW_FRIEND_TEMPLATE_DECL=1 -DHAVE_LIBM=1 -DHAVE_LIBZ=1 -DF77_APPEND_UNDERSCORE=1 -DOCTAVE_LITE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4 -DSIZEOF_LONG_LONG=8 -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DNPOS=std::string::npos -DSTDC_HEADERS=1 -DHAVE_DIRENT_H=1 -DTIME_WITH_SYS_TIME=1 -DHAVE_SYS_WAIT_H=1 -DHAVE_ASSERT_H=1 -DHAVE_CURSES_H=1 -DHAVE_DLFCN_H=1 -DHAVE_FCNTL_H=1 -DHAVE_FLOAT_H=1 -DHAVE_FNMATCH_H=1 -DHAVE_GLOB_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1 -DHAVE_NCURSES_H=1 -DHAVE_POLL_H=1 -DHAVE_PWD_H=1 -DHAVE_SGTTY_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_IOCTL_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_POLL_H=1 -DHAVE_SYS_RESOURCE_H=1 -DHAVE_SYS_SELECT_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE_SYS_TIMES_H=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_UTSNAME_H=1 -DHAVE_TERMCAP_H=1 -DHAVE_TERMIO_H=1 -DHAVE_UNISTD_H=1 -DHAVE_VARARGS_H=1 -DHAVE_ATEXIT=1 -DHAVE_BCOPY=1 -DHAVE_BZERO=1 -DHAVE_DUP2=1 -DHAVE_ENDGRENT=1 -DHAVE_ENDPWENT=1 -DHAVE_EXECVP=1 -DHAVE_FCNTL=1 -DHAVE_FORK=1 -DHAVE_GETCWD=1 -DHAVE_GETEGID=1 -DHAVE_GETEUID=1 -DHAVE_GETGID=1 -DHAVE_GETGRENT=1 -DHAVE_GETGRGID=1 -DHAVE_GETGRNAM=1 -DHAVE_GETHOSTNAME=1 -DHAVE_GETPGRP=1 -DHAVE_GETPID=1 -DHAVE_GETPPID=1 -DHAVE_GETPWENT=1 -DHAVE_GETPWNAM=1 -DHAVE_GETPWUID=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_GETUID=1 -DHAVE_GETWD=1 -DHAVE_LOCALTIME_R=1 -DHAVE_LSTAT=1 -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1 -DHAVE_PIPE=1 -DHAVE_POLL=1 -DHAVE_PUTENV=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1 -DHAVE_RMDIR=1 -DHAVE_SELECT=1 -DHAVE_SETGRENT=1 -DHAVE_SETPWENT=1 -DHAVE_SETVBUF=1 -DHAVE_SIGACTION=1 -DHAVE_SIGPENDING=1 -DHAVE_SIGPROCMASK=1 -DHAVE_SIGSUSPEND=1 -DHAVE_STAT=1 -DHAVE_STRCASECMP=1 -DHAVE_STRDUP=1 -DHAVE_STRERROR=1 -DHAVE_STRFTIME=1 -DHAVE_STRNCASECMP=1 -DHAVE_STRPTIME=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1 -DHAVE_UNLINK=1 -DHAVE_USLEEP=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=1 -DHAVE_VSNPRINTF=1 -DHAVE_WAITPID=1 -DHAVE_LIBDL=1 -DHAVE_DLOPEN=1 -DHAVE_DLSYM=1 -DHAVE_DLERROR=1 -DHAVE_DLCLOSE=1 -DWITH_DL=1 -DWITH_DYNAMIC_LINKING=1 -DHAVE_TIMEVAL=1 -DHAVE_FINITE=1 -DHAVE_ISNAN=1 -DHAVE_ISINF=1 -DHAVE_ACOSH=1 -DHAVE_ASINH=1 -DHAVE_ATANH=1 -DHAVE_ERF=1 -DHAVE_ERFC=1 -DHAVE_ST_BLKSIZE=1 -DHAVE_ST_BLOCKS=1 -DHAVE_ST_RDEV=1 -DHAVE_TM_ZONE=1 -DHAVE_GR_PASSWD=1 -DEXCEPTION_IN_MATH=1 -DRETSIGTYPE=void -DSYS_SIGLIST_DECLARED=1 -DHAVE_SYS_SIGLIST=1 -DHAVE_POSIX_SIGNALS=1 -DHAVE_GETRUSAGE=1 -DHAVE_TIMES=1 -DGNUPLOT_HAS_MULTIPLOT=1 -DGNUPLOT_HAS_FRAMES=1 User-preferences (please do not edit this section): -------------------------------------------------- EDITOR = "vi" EXEC_PATH = ":/scratch/programs/audio/package/pipewave.1.3/bin:/scratch/programs/audio/pitch/POWERpv1.1G/bin:/home/pkienzle/pantome/bin:/home/pkienzle/sfs/bin:/home/pkienzle/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games" IMAGEPATH = ".:/usr/share/octave/2.1.31/imagelib//" INFO_FILE = "/usr/share/info/octave.info" INFO_PROGRAM = "info" LOADPATH = ".:/home/pkienzle/matcompat21//:/home/pkienzle/octave//::" PAGER = "less" PS1 = "\\s:\\#> " PS2 = "> " PS4 = "+ " automatic_replot = 0 beep_on_error = 0 completion_append_char = " " default_eval_print_flag = 1 # default_global_variable_value = default_return_value = [] default_save_format = "ascii" define_all_return_values = 0 do_fortran_indexing = 0 echo_executing_commands = 0 empty_list_elements_ok = "warn" fixed_point_format = 0 gnuplot_binary = "gnuplot" gnuplot_command_end = "\n" gnuplot_command_plot = "pl" gnuplot_command_replot = "rep" gnuplot_command_splot = "sp" gnuplot_command_title = "t" gnuplot_command_using = "u" gnuplot_command_with = "w" gnuplot_has_frames = 1 gnuplot_has_multiplot = 1 history_file = "/home/pkienzle/.octave_hist" history_size = 1024 ignore_function_time_stamp = "system" implicit_num_to_str_ok = 0 implicit_str_to_num_ok = 0 initialize_global_variables = 0 max_recursion_depth = 256 ok_to_lose_imaginary_part = "warn" output_max_field_width = 10 output_precision = 5 page_output_immediately = 0 page_screen_output = 1 prefer_column_vectors = 1 print_answer_id_name = 1 print_empty_dimensions = 1 print_rhs_assign_val = 0 propagate_empty_matrices = 1 resize_on_range_error = 1 return_last_computed_value = 0 save_precision = 15 saving_history = 1 silent_functions = 0 split_long_rows = 1 string_fill_char = " " struct_levels_to_print = 2 suppress_verbose_help_message = 1 treat_neg_dim_as_zero = 0 warn_assign_as_truth_value = 1 warn_divide_by_zero = 1 warn_function_name_clash = 1 warn_future_time_stamp = 1 warn_missing_semicolon = 0 warn_variable_switch_label = 0 whitespace_in_literal_matrix = ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------