assignment expresion

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

assignment expresion

Andreas Weingessel
To: [hidden email]
Subject: assignment expresion

Bug report for Octave 1.94 configured for i586-pc-linux-gnu

Description:
-----------

A matrix assignment of the form
        A(:,1) = some_colum_vector
does not work, when A has not been defined before. This kind of
assignment was possible in previous versions.

Repeat-By:
---------

octave:1> a(:,1)=rand(3,1)
error: A(I, J) = X: X must be a scalar or the number of elements in I must
error: match the number of rows in X and the number of elements in J must
error: match the number of columns in X
error: evaluating assignment expression near line 1, column 7



Configuration (please do not edit this section):
-----------------------------------------------

uname output:     Linux elendil 2.0.13 #1 Wed Aug 28 14:31:14 MET DST 1996 i586
configure opts:   --datadir=/usr/local/lib --libexecdir=/usr/local/lib
Fortran compiler: g77
FFLAGS:           -O
F2C:              
F2CFLAGS:        
FLIBS:            -lf2c -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lgcc
CPPFLAGS:        
INCFLAGS:         -I/usr/local/include -I/usr/local/include/octave-1.94
C compiler:       gcc, version 2.7.2
CFLAGS:           -DHAVE_CONFIG_H -mieee-fp -O
CPICFLAG:         -fPIC
C++ compiler:     c++, version 2.7.2
CXXFLAGS:         -DHAVE_CONFIG_H  -fno-implicit-templates -mieee-fp -O
CXXPICFLAG:       -fPIC
LDFLAGS:          -s
LIBFLAGS:         -L/usr/local/lib
RLD_FLAG:         -Xlinker -rpath -Xlinker /usr/local/lib
CXXLIBS:          -lstdc++ -lm -L/usr/lib/gcc-lib/i486-linux/2.7.2 -lstdc++ -lm -lgcc -lc -lgcc
TERMLIBS:         -lncurses
LIBS:            
LEXLIB:          
LIBPLPLOT:        
LIBDLFCN:        
DEFS:

  -DOCTAVE_SOURCE=1 -DSEPCHAR=':' -DSEPCHAR_STR=":" -DUSE_GNU_INFO=1
  -DUSE_READLINE=1 -DSIZEOF_SHORT=2 -DSIZEOF_INT=4 -DSIZEOF_LONG=4
  -DHAVE_ALLOCA_H=1 -DHAVE_ALLOCA=1 -DF77_APPEND_UNDERSCORE=1
  -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_FCNTL_H=1
  -DHAVE_FLOAT_H=1 -DHAVE_GRP_H=1 -DHAVE_LIMITS_H=1 -DHAVE_MEMORY_H=1
  -DHAVE_NAN_H=1 -DHAVE_NCURSES_H=1 -DHAVE_PWD_H=1 -DHAVE_STDLIB_H=1
  -DHAVE_STRING_H=1 -DHAVE_SYS_PARAM_H=1 -DHAVE_SYS_RESOURCE_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_TERMIOS_H=1 -DHAVE_UNISTD_H=1 -DHAVE_VARARGS_H=1
  -DNPSOL_MISSING=1 -DQPSOL_MISSING=1 -DFSQP_MISSING=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_GETUID=1 -DHAVE_LSTAT=1
  -DHAVE_MEMMOVE=1 -DHAVE_MKDIR=1 -DHAVE_MKFIFO=1 -DHAVE_ON_EXIT=1
  -DHAVE_PIPE=1 -DHAVE_PUTENV=1 -DHAVE_RENAME=1 -DHAVE_RINDEX=1
  -DHAVE_RMDIR=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_STRNCASECMP=1 -DHAVE_TEMPNAM=1 -DHAVE_UMASK=1
  -DHAVE_UNLINK=1 -DHAVE_VFPRINTF=1 -DHAVE_VSPRINTF=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_LIBM=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_TZNAME=1
  -DHAVE_GR_PASSWD=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"
  IMAGEPATH = ".:/usr/local/lib/octave/1.94/imagelib//"
  INFO_FILE = "/usr/local/info/octave.info"
  LOADPATH = ".:~/lib/octave/m//:~/Work/octave/m//.:/usr/local/lib/octave/site/oct/i586-pc-linux-gnu//:/usr/local/lib/octave/site/m//:/usr/local/lib/octave/1.94/oct/i586-pc-linux-gnu//:/usr/local/lib/octave/1.94/m//"
  OCTAVE_VERSION = "1.94"
  PAGER = "less"
  PS1 = "\\s:\\#> "
  PS2 = "> "
  automatic_replot = 0
  whitespace_in_literal_matrix = 0
  default_save_format = "mat-binary"
  do_fortran_indexing = 1
  empty_list_elements_ok = 1
  eps = 2.22045e-16
  gnuplot_binary = "gnuplot"
  ignore_function_time_stamp = "system"
  implicit_str_to_num_ok = 1
  ok_to_lose_imaginary_part = 1
  output_max_field_width = 10
  output_precision = 5
  page_screen_output = 1
  prefer_column_vectors = 0
  prefer_zero_one_indexing = 1
  print_answer_id_name = 1
  print_empty_dimensions = 0
  propagate_empty_matrices = 1
  resize_on_range_error = 1
  return_last_computed_value = 0
  save_precision = 4
  silent_functions = 0
  split_long_rows = 1
  treat_neg_dim_as_zero = 1
  warn_assign_as_truth_value = 1
  warn_comma_in_global_decl = 1
  warn_divide_by_zero = 1

Reply | Threaded
Open this post in threaded view
|

assignment expresion

John W. Eaton-6
On  9-Dec-1996, Andreas Weingessel <[hidden email]> wrote:

: A matrix assignment of the form
: A(:,1) = some_colum_vector
: does not work, when A has not been defined before. This kind of
: assignment was possible in previous versions.

I goofed when trying to make this kind of assignment

  a = zeros (4, 5);
  a(:, 1) = 1;

actually fill the column instead of just assigning one element.

Here is a patch:

Index: Array2-idx.h
===================================================================
RCS file: /home/jwe/src/master/octave/liboctave/Array2-idx.h,v
retrieving revision 1.7
diff -c -r1.7 Array2-idx.h
*** Array2-idx.h 1996/12/06 21:12:30 1.7
--- Array2-idx.h 1996/12/07 05:42:23
***************
*** 365,374 ****
        int idx_j_is_colon = idx_j.is_colon ();
 
        if (idx_i_is_colon)
! n = lhs_nr;
 
        if (idx_j_is_colon)
! m = lhs_nc;
 
        if (idx_i && idx_j)
  {
--- 365,374 ----
        int idx_j_is_colon = idx_j.is_colon ();
 
        if (idx_i_is_colon)
! n = lhs_nr > 0 ? lhs_nr : rhs_nr;
 
        if (idx_j_is_colon)
! m = lhs_nc > 0 ? lhs_nc : rhs_nc;
 
        if (idx_i && idx_j)
  {



Thanks,

jwe