1Summary of important user-visible changes for version 3.8 (2013-12-27): 2---------------------------------------------------------------------- 3 4 ** One of the biggest new features for Octave 3.8 is a graphical user 5 interface. It is the one thing that users have requested most 6 often over the last few years and now it is almost ready. But 7 because it is not quite as polished as we would like, we have 8 decided to wait until the 4.0.x release series before making the 9 GUI the default interface (until then, you can use the --force-gui 10 option to start the GUI). 11 12 Given the length of time and the number of bug fixes and 13 improvements since the last major release Octave, we also decided 14 against delaying the release of all these new improvements any 15 longer just to perfect the GUI. So please enjoy the 3.8 release of 16 Octave and the preview of the new GUI. We believe it is working 17 reasonably well, but we also know that there are some obvious rough 18 spots and many things that could be improved. 19 20 WE NEED YOUR HELP. There are many ways that you can help us fix 21 the remaining problems, complete the GUI, and improve the overall 22 user experience for both novices and experts alike: 23 24 * If you are a skilled software developer, you can help by 25 contributing your time to help with Octave's development. See 26 http://octave.org/get-involved.html for more information. 27 28 * If Octave does not work properly, you are encouraged 29 report the problems you find. See http://octave.org/bugs.html 30 for more information about how to report problems. 31 32 * Whether you are a user or developer, you can help to fund the 33 project. Octave development takes a lot of time and expertise. 34 Your contributions help to ensure that Octave will continue to 35 improve. See http://octave.org/donate.html for more details. 36 37 We hope you find Octave to be useful. Please help us make it even 38 better for the future! 39 40 ** Octave now uses OpenGL graphics by default with FLTK widgets. If 41 OpenGL libraries or FLTK widgets are not available when Octave is 42 built, gnuplot is used. You may also choose to use gnuplot for 43 graphics by executing the command 44 45 graphics_toolkit ("gnuplot") 46 47 Adding this command to your ~/.octaverc file will set the default 48 for each session. 49 50 ** Printing or saving figures with OpenGL graphics requires the 51 gl2ps library which is no longer distributed with Octave. The 52 software is widely available in most package managers. If a 53 pre-compiled package does not exist for your system, you can find 54 the current sources at http://www.geuz.org/gl2ps/. 55 56 ** Octave now supports nested functions with scoping rules that are 57 compatible with Matlab. A nested function is one declared and defined 58 within the body of another function. The nested function is only 59 accessible from within the enclosing function which makes it one 60 method for making private functions whose names do not conflict with those 61 in the global namespace (See also subfunctions and private functions). 62 In addition, variables in the enclosing function are visible within the 63 nested function. This makes it possible to have a pseudo-global variable 64 which can be seen by a group of functions, but which is not visible in 65 the global namespace. 66 67 Example: 68 function outerfunc (...) 69 ... 70 function nested1 (...) 71 ... 72 function nested2 (...) 73 ... 74 endfunction 75 endfunction 76 77 function nested3 (...) 78 ... 79 endfunction 80 endfunction 81 82 ** Line continuations inside character strings have changed. 83 84 The sequence '...' is no longer recognized as a line continuation 85 inside a character string. A backslash '\' followed by a newline 86 character is no longer recognized as a line continuation inside 87 single-quoted character strings. Inside double-quoted character 88 strings, a backslash followed by a newline character is still 89 recognized as a line continuation, but the backslash character must 90 be followed *immediately* by the newline character. No whitespace or 91 end-of-line comment may appear between them. 92 93 ** Backslash as a continuation marker outside of double-quoted strings 94 is now deprecated. 95 96 Using '\' as a continuation marker outside of double quoted strings 97 is now deprecated and will be removed from a future version of 98 Octave. When that is done, the behavior of 99 100 (a \ 101 b) 102 103 will be consistent with other binary operators. 104 105 ** Redundant terminal comma accepted by parser 106 107 A redundant terminal comma is now accepted in matrix 108 definitions which allows writing code such as 109 110 [a,... 111 b,... 112 c,... 113 ] = deal (1,2,3) 114 115 ** Octave now has limited support for named exceptions 116 117 The following syntax is now accepted: 118 119 try 120 statements 121 catch exception-id 122 statements 123 end 124 125 The exception-id is a structure with the fields "message" and 126 "identifier". For example 127 128 try 129 error ("Octave:error-id", "error message"); 130 catch myerr 131 printf ("identifier: %s\n", myerr.identifier); 132 printf ("message: %s\n", myerr.message); 133 end_try_catch 134 135 When classdef-style classes are added to Octave, the exception-id 136 will become an MException object. 137 138 ** Warning states may now be set temporarily, until the end of the 139 current function, using the syntax 140 141 warning STATE ID "local" 142 143 in which STATE may be "on", "off", or "error". Changes to warning 144 states that are set locally affect the current function and all 145 functions called from the current scope. The previous warning state 146 is restored on return from the current function. The "local" 147 option is ignored if used in the top-level workspace. 148 149 ** Warning IDs renamed: 150 151 Octave:array-as-scalar => Octave:array-to-scalar 152 Octave:array-as-vector => Octave:array-to-vector 153 154 ** 'emptymatch', 'noemptymatch' options added to regular expressions. 155 156 With this addition Octave now accepts the entire set of Matlab options 157 for regular expressions. 'noemptymatch' is the default, but 'emptymatch' 158 has certain uses where you need to match an assertion rather than actual 159 characters. For example, 160 161 regexprep ('World', '^', 'Hello ', 'emptymatch') 162 => Hello World 163 164 where the pattern is actually the assertion '^' or start-of-line. 165 166 ** For compatibility with Matlab, the regexp, regexpi, and regexprep 167 functions now process backslash escape sequences in single-quoted pattern 168 strings. In addition, the regexprep function now processes backslash 169 escapes in single-quoted replacement strings. For example, 170 171 regexprep (str, '\t', '\n') 172 173 would search the variable str for a TAB character (escape sequence \t) 174 and replace it with a NEWLINE (escape sequence \n). Previously the 175 expression would have searched for a literal '\' followed by 't' and 176 replaced the two characters with the sequence '\', 'n'. 177 178 ** A TeX parser has been implemented for the FLTK toolkit and is the default 179 for any text object including titles and axis labels. The TeX parser is 180 supported only for display on a monitor, not for printing. 181 182 A quick summary of features: 183 184 Code Feature Example Comment 185 ----------------------------------------------------------------- 186 _ subscript H_2O formula for water 187 ^ exponent y=x^2 formula for parabola 188 \char symbol \beta Greek symbol beta 189 \fontname font \fontname{Arial} set Arial font 190 \fontsize fontsize \fontsize{16} set fontsize 16 191 \color[rgb] fontcolor \color[rgb]{1 0 1} set magenta color 192 \bf bold \bfBold Text bold font 193 \it italic \itItalic Text italic font 194 \sl slanted \slOblique Text slanted font 195 \rm normal \bfBold\rmNormal normal font 196 {} group {\bf Bold}Normal group objects 197 e^{i*\pi} = -1 group objects 198 199 ** The m-files in the plot directory have been overhauled. 200 201 The plot functions now produce output that is nearly visually compatible 202 with Matlab. Plot performance has also increased, dramatically for some 203 functions such as comet and waitbar. Finally, the documentation for most 204 functions has been updated so it should be clearer both how to use a 205 function and when a function is appropriate. 206 207 ** The m-files in the image directory have been overhauled. 208 209 The principal benefit is that Octave will now no longer automatically 210 convert images stored with integers to doubles. Storing images as uint8 211 or uint16 requires only 1/8 or 1/4 the memory of an image stored using 212 doubles. For certain operations, such as fft2, the image must still be 213 converted to double in order to work. 214 215 Other changes include fixes to the way indexed images are read from a 216 colormap depending on the image class (integer images have a -1 offset to 217 the colormap row number). 218 219 ** The imread and imwrite functions have been completely rewritten. 220 221 The main changes relate to the alpha channel, support for reading and 222 writing of floating point images, implemented writing of indexed images, 223 and appending images to multipage image files. 224 225 The issues that may arise due to backwards incompatibility are: 226 227 * imwrite no longer interprets a length of 2 or 4 in the third dimension 228 as grayscale or RGB with alpha channel (a length of 4 will be saved 229 as a CMYK image). Alpha channel must be passed as separate argument. 230 231 * imread will always return the colormap indexes when reading an indexed 232 image, even if the colormap is not requested as output. 233 234 * transparency values are now inverted from previous Octave versions 235 (0 is for completely transparent instead of completely opaque). 236 237 In addition, the function imformats has been implemented to expand 238 reading and writing of images of different formats through imread 239 and imwrite. 240 241 ** The colormap function now provides new options--"list", "register", 242 and "unregister"--to list all available colormap functions, and to 243 add or remove a function name from the list of known colormap 244 functions. Packages that implement extra colormaps should use these 245 commands with PKG_ADD and PKG_DEL statements. 246 247 ** strsplit has been modified to be compatible with Matlab. There 248 are two instances where backward compatibility is broken. 249 250 (1) Delimiters are now string vectors, not scalars. 251 252 Octave's legacy behavior 253 254 strsplit ("1 2, 3", ", ") 255 ans = 256 { 257 [1,1] = 1 258 [1,2] = 2 259 [1,3] = 260 [1,4] = 3 261 } 262 263 Matlab compatible behavior 264 265 strsplit ("1 2, 3", ", ") 266 ans = 267 { 268 [1,1] = 1 2 269 [1,2] = 3 270 } 271 272 (2) By default, Matlab treats consecutive delimiters as a single 273 delimiter. By default, Octave's legacy behavior was to return an 274 empty string for the part between the delmiters. 275 276 Where legacy behavior is desired, the call to strsplit() may be 277 replaced by ostrsplit(), which is Octave's original implementation of 278 strsplit(). 279 280 ** The datevec function has been extended for better Matlab compatibility. 281 It now accepts string inputs in the following numerical formats: 12, 21, 282 22, 26, 29, 31. This is undocumented, but verifiable, Matlab behavior. 283 In addition, the default for formats which do not specify a date is 284 January 1st of the current year. The previous default was the current day, 285 month, and year. This may produce changes in existing scripts. 286 287 ** The error function and its derivatives has been extended to accept complex 288 arguments. The following functions now accept complex inputs: 289 290 erf erfc erfcx 291 292 In addition two new error functions erfi (imaginary error function) and 293 dawson (scaled imaginary error function) have been added. 294 295 ** The glpk function has been modified to reflect changes in the GLPK 296 library. The "round" and "itcnt" options have been removed. The 297 "relax" option has been replaced by the "rtest" option. The numeric 298 values of error codes and of some options have also changed. 299 300 ** The kurtosis function has changed definition to be compatible with 301 Matlab. It now returns the base kurtosis instead of the "excess kurtosis". 302 The old behavior can be had by changing scripts to normalize with -3. 303 304 "excess kurtosis" = kurtosis (x) - 3 305 306 ** The moment function has changed definition to be compatible with 307 Matlab. It now returns the central moment instead of the raw moment. 308 The old behavior can be had by passing the type argument "r" for raw. 309 310 ** The default name of the Octave crash dump file is now 311 "octave-workspace" instead of "octave-core". The exact name can 312 always be customized with the octave_core_file_name function. 313 314 ** A citation command has been added to display information on how to 315 cite Octave and packages in publications. The package system will 316 look for and install CITATION files from packages. 317 318 ** The java package from Octave Forge is now part of core Octave. The 319 following new functions are available for interacting with Java 320 directly from Octave: 321 322 debug_java java_matrix_autoconversion 323 isjava java_unsigned_autoconversion 324 java2mat javaaddpath 325 javaArray javaclasspath 326 javaMethod javamem 327 javaObject javarmpath 328 usejava 329 330 In addition, the following functions that use the Java interface 331 are now available (provided that Octave is compiled with support for 332 Java enabled): 333 334 helpdlg listdlg questdlg 335 inputdlg msgbox warndlg 336 337 ** Other new functions added in 3.8.0: 338 339 atan2d erfi lines 340 base64_decode expint linsolve 341 base64_encode findfigs missing_component_hook 342 betaincinv flintmax polyeig 343 built_in_docstrings_file fminsearch prefdir 344 cmpermute gallery preferences 345 cmunique gco readline_re_read_init_file 346 colorcube hdl2struct readline_read_init_file 347 copyobj history_save rgbplot 348 dawson imformats save_default_options 349 dblist importdata shrinkfaces 350 desktop isaxes splinefit 351 doc_cache_create iscolormap stemleaf 352 ellipj isequaln strjoin 353 ellipke jit_debug struct2hdl 354 erfcinv jit_enable tetramesh 355 jit_startcnt waterfall 356 357 ** Deprecated functions. 358 359 The following functions were deprecated in Octave 3.4 and have been 360 removed from Octave 3.8. 361 362 autocor dispatch is_global setstr 363 autocov fstat krylovb strerror 364 betai gammai perror values 365 cellidx glpkmex replot 366 cquad is_duplicate_entry saveimage 367 368 The following functions have been deprecated in Octave 3.8 and will 369 be removed from Octave 3.12 (or whatever version is the second major 370 release after 3.8): 371 372 default_save_options java_new 373 gen_doc_cache java_set 374 interp1q java_unsigned_conversion 375 isequalwithequalnans javafields 376 java_convert_matrix javamethods 377 java_debug re_read_readline_init_file 378 java_get read_readline_init_file 379 java_invoke saving_history 380 381 382 The following keywords have been deprecated in Octave 3.8 and will 383 be removed from Octave 3.12 (or whatever version is the second major 384 release after 3.8): 385 386 static 387 388 The following configuration variables have been deprecated in Octave 389 3.8 and will be removed from Octave 3.12 (or whatever version is the 390 second major release after 3.8): 391 392 CC_VERSION (now GCC_VERSION) 393 CXX_VERSION (now GXX_VERSION) 394 395 The internal class <Octave_map> has been deprecated in Octave 3.8 and will 396 be removed from Octave 3.12 (or whatever version is the second major 397 release after 3.8). Replacement classes are <octave_map> (struct array) 398 or <octave_scalar_map> for a single structure. 399 400Summary of important user-visible changes for version 3.6 (2012-01-15): 401---------------------------------------------------------------------- 402 403 ** The PCRE library is now required to build Octave. If a pre-compiled 404 package does not exist for your system, you can find PCRE sources 405 at http://www.pcre.org 406 407 ** The ARPACK library is no longer distributed with Octave. 408 If you need the eigs or svds functions you must provide an 409 external ARPACK through a package manager or by compiling it 410 yourself. If a pre-compiled package does not exist for your system, 411 you can find the current ARPACK sources at 412 http://forge.scilab.org/index.php/p/arpack-ng 413 414 ** Many of Octave's binary operators (.*, .^, +, -, ...) now perform 415 automatic broadcasting for array operations which allows you to use 416 operator notation instead of calling bsxfun or expanding arrays (and 417 unnecessarily wasting memory) with repmat or similar idioms. For 418 example, to scale the columns of a matrix by the elements of a row 419 vector, you may now write 420 421 rv .* M 422 423 In this expression, the number of elements of rv must match the 424 number of columns of M. The following operators are affected: 425 426 plus + .+ 427 minus - .- 428 times .* 429 rdivide ./ 430 ldivide .\ 431 power .^ .** 432 lt < 433 le <= 434 eq == 435 gt > 436 ge >= 437 ne != ~= 438 and & 439 or | 440 atan2 441 hypot 442 max 443 min 444 mod 445 rem 446 xor 447 448 additionally, since the A op= B assignment operators are equivalent 449 to A = A op B, the following operators are also affected: 450 451 += -= .+= .-= .*= ./= .\= .^= .**= &= |= 452 453 See the "Broadcasting" section in the new "Vectorization and Faster 454 Code Execution" chapter of the manual for more details. 455 456 ** Octave now features a profiler, thanks to the work of Daniel Kraft 457 under the Google Summer of Code mentorship program. The manual has 458 been updated to reflect this addition. The new user-visible 459 functions are profile, profshow, and profexplore. 460 461 ** Overhaul of statistical distribution functions 462 463 Functions now return "single" outputs for inputs of class "single". 464 465 75% reduction in memory usage through use of logical indexing. 466 467 Random sample functions now use the same syntax as rand and accept 468 a comma separated list of dimensions or a dimension vector. 469 470 Functions have been made Matlab-compatible with regard to special 471 cases (probability on boundaries, probabilities for values outside 472 distribution, etc.). This may cause subtle changes to existing 473 scripts. 474 475 negative binomial function has been extended to real, non-integer 476 inputs. The discrete_inv function now returns v(1) for 0 instead of 477 NaN. The nbincdf function has been recoded to use a closed form 478 solution with betainc. 479 480 ** strread, textscan, and textread have been completely revamped. 481 482 They now support nearly all Matlab functionality including: 483 484 * Matlab-compatible whitespace and delimiter defaults 485 486 * Matlab-compatible options: 'whitespace', treatasempty', format 487 string repeat count, user-specified comment style, uneven-length 488 output arrays, %n and %u conversion specifiers (provisionally) 489 490 ** All .m string functions have been modified for better performance or 491 greater Matlab compatibility. Performance gains of 15X-30X have 492 been demonstrated. Operations on cell array of strings no longer pay 493 quite as high a penalty as those on 2-D character arrays. 494 495 deblank: Now requires character or cellstr input. 496 497 strtrim: Now requires character or cellstr input. 498 No longer trims nulls ("\0") from string for Matlab 499 compatibility. 500 501 strmatch: Follows documentation precisely and ignores trailing spaces 502 in pattern and in string. Note that this is documented 503 Matlab behavior but the implementation apparently does 504 not always follow it. 505 506 substr: Now possible to specify a negative LEN option which 507 extracts to within LEN of the end of the string. 508 509 strtok: Now accepts cellstr input. 510 511 base2dec, bin2dec, hex2dec: 512 Now accept cellstr inputs. 513 514 dec2base, dec2bin, dec2hex: 515 Now accept cellstr inputs. 516 517 index, rindex: 518 Now accept 2-D character array input. 519 520 strsplit: Now accepts 2-D character array input. 521 522 ** Geometry functions derived from Qhull (convhull, delaunay, voronoi) 523 have been revamped. The options passed to the underlying qhull 524 command have been changed for better results or for Matlab 525 compatibility. 526 527 convhull: Default options are "Qt" for 2D, 3D, 4D inputs 528 Default options are "Qt Qx" for 5D and higher 529 530 delaunay: Default options are "Qt Qbb Qc Qz" for 2D and 3D inputs 531 Default options are "Qt Qbb Qc Qx" for 4D and higher 532 533 voronoi: No default arguments 534 535 ** Date/Time functions updated. Millisecond support with FFF format 536 string now supported. 537 538 datestr: Numerical formats 21, 22, 29 changed to match Matlab. 539 Now accepts cellstr input. 540 541 ** The following warning IDs have been removed: 542 543 Octave:associativity-change 544 Octave:complex-cmp-ops 545 Octave:empty-list-elements 546 Octave:fortran-indexing 547 Octave:precedence-change 548 549 ** The warning ID Octave:string-concat has been renamed to 550 Octave:mixed-string-concat. 551 552 ** Octave now includes the following Matlab-compatible preference 553 functions: 554 555 addpref getpref ispref rmpref setpref 556 557 ** The following Matlab-compatible handle graphics functions have been 558 added: 559 560 guidata uipanel uitoolbar 561 guihandles uipushtool uiwait 562 uicontextmenu uiresume waitfor 563 uicontrol uitoggletool 564 565 The uiXXX functions above are experimental. 566 567 Except for uiwait and uiresume, the uiXXX functions are not 568 supported with the FLTK+OpenGL graphics toolkit. 569 570 The gnuplot graphics toolkit does not support any of the uiXXX 571 functions nor the waitfor function. 572 573 ** New keyword parfor (parallel for loop) is now recognized as a valid 574 keyword. Implementation, however, is still mapped to an ordinary 575 for loop. 576 577 ** Other new functions added in 3.6.0: 578 579 bicg nthargout usejava 580 is_dq_string narginchk waitbar 581 is_sq_string python zscore 582 is_function_handle register_graphics_toolkit 583 loaded_graphics_toolkits recycle 584 585 ** Deprecated functions. 586 587 The following functions were deprecated in Octave 3.2 and have been 588 removed from Octave 3.6. 589 590 create_set spcholinv splu 591 dmult spcumprod spmax 592 iscommand spcumsum spmin 593 israwcommand spdet spprod 594 lchol spdiag spqr 595 loadimage spfind spsum 596 mark_as_command sphcat spsumsq 597 mark_as_rawcommand spinv spvcat 598 spatan2 spkron str2mat 599 spchol splchol unmark_command 600 spchol2inv split unmark_rawcommand 601 602 The following functions have been deprecated in Octave 3.6 and will 603 be removed from Octave 3.10 (or whatever version is the second major 604 release after 3.6): 605 606 cut polyderiv 607 cor shell_cmd 608 corrcoef studentize 609 __error_text__ sylvester_matrix 610 error_text 611 612 ** The following functions have been modified for Matlab compatibility: 613 614 randperm 615 616Summary of important user-visible changes for version 3.4.3 (2011-10-10): 617------------------------------------------------------------------------ 618 619 ** Octave 3.4.3 is a bug fixing release. 620 621Summary of important user-visible changes for version 3.4.2 (2011-06-24): 622------------------------------------------------------------------------ 623 624 ** Octave 3.4.2 fixes some minor installation problems that affected 625 version 3.4.1. 626 627Summary of important user-visible changes for version 3.4.1 (2011-06-15): 628------------------------------------------------------------------------ 629 630 ** Octave 3.4.1 is primarily a bug fixing release. 631 632 ** IMPORTANT note about binary incompatibility in this release: 633 634 Binary compatibility for all 3.4.x releases was originally planned, 635 but this is impossible for the 3.4.1 release due to a bug in the way 636 shared libraries were built in Octave 3.4.0. Because of this bug, 637 .oct files built for Octave 3.4.0 must be recompiled before they 638 will work with Octave 3.4.1. 639 640 Given that there would be binary incompatibilities with shared 641 libraries going from Octave 3.4.0 to 3.4.1, the following 642 incompatible changes were also made in this release: 643 644 * The Perl Compatible Regular Expression (PCRE) library is now 645 required to build Octave. 646 647 * Octave's libraries and .oct files are now installed in 648 subdirectories of $libdir instead of $libexecdir. 649 650 Any future Octave 3.4.x release versions should remain binary 651 compatible with Octave 3.4.1 as proper library versioning is now 652 being used as recommended by the libtool manual. 653 654 ** The following functions have been deprecated in Octave 3.4.1 and will 655 be removed from Octave 3.8 (or whatever version is the second major 656 release after 3.4): 657 658 cquad is_duplicate_entry perror strerror 659 660 ** The following functions are new in 3.4.1: 661 662 colstyle gmres iscolumn isrow mgorth nproc rectangle 663 664 ** The get_forge_pkg function is now private. 665 666 ** The rectangle_lw, rectangle_sw, triangle_lw, and triangle_sw 667 functions are now private. 668 669 ** The logistic_regression_derivatives and logistic_regression_likelihood 670 functions are now private. 671 672 ** ChangeLog files in the Octave sources are no longer maintained 673 by hand. Instead, there is a single ChangeLog file generated from 674 the Mercurial version control commit messages. Older ChangeLog 675 information can be found in the etc/OLD-ChangeLogs directory in the 676 source distribution. 677 678Summary of important user-visible changes for version 3.4 (2011-02-08): 679---------------------------------------------------------------------- 680 681 ** BLAS and LAPACK libraries are now required to build Octave. The 682 subset of the reference BLAS and LAPACK libraries has been removed 683 from the Octave sources. 684 685 ** The ARPACK library is now distributed with Octave so it no longer 686 needs to be available as an external dependency when building 687 Octave. 688 689 ** The `lookup' function was extended to be more useful for 690 general-purpose binary searching. Using this improvement, the 691 ismember function was rewritten for significantly better 692 performance. 693 694 ** Real, integer and logical matrices, when used in indexing, will now 695 cache the internal index_vector value (zero-based indices) when 696 successfully used as indices, eliminating the conversion penalty for 697 subsequent indexing by the same matrix. In particular, this means it 698 is no longer needed to avoid repeated indexing by logical arrays 699 using find for performance reasons. 700 701 ** Logical matrices are now treated more efficiently when used as 702 indices. Octave will keep the index as a logical mask unless the 703 ratio of true elements is small enough, using a specialized 704 code. Previously, all logical matrices were always first converted 705 to index vectors. This results in savings in both memory and 706 computing time. 707 708 ** The `sub2ind' and `ind2sub' functions were reimplemented as compiled 709 functions for better performance. These functions are now faster, 710 can deliver more economized results for ranges, and can reuse the 711 index cache mechanism described in previous paragraph. 712 713 ** The built-in function equivalents to associative operators (`plus', 714 `times', `mtimes', `and', and `or') have been extended to accept 715 multiple arguments. This is especially useful for summing 716 (multiplying, etc.) lists of objects (of possibly distinct types): 717 718 matrix_sum = plus (matrix_list{:}); 719 720 ** An FTP object type based on libcurl has been implemented. These 721 objects allow ftp connections, downloads and uploads to be 722 managed. For example, 723 724 fp = ftp ("ftp.octave.org); 725 cd (fp, "gnu/octave"); 726 mget (fp, "octave-3.2.3.tar.bz2"); 727 close (fp); 728 729 ** The default behavior of `assert (observed, expected)' has been 730 relaxed to employ less strict checking that does not require the 731 internals of the values to match. This avoids previously valid 732 tests from breaking due to new internal classes introduced in future 733 Octave versions. 734 735 For instance, all of these assertions were true in Octave 3.0.x 736 but false in 3.2.x due to new optimizations and improvements: 737 738 assert (2*linspace (1, 5, 5), 2*(1:5)) 739 assert (zeros (0, 0), []) 740 assert (2*ones (1, 5), (2) (ones (1,5))) 741 742 ** The behavior of library functions `ismatrix', `issquare', and 743 `issymmetric' has been changed for better consistency. 744 745 * The `ismatrix' function now returns true for all numeric, 746 logical and character 2-D or N-D matrices. Previously, `ismatrix' 747 returned false if the first or second dimension was zero. 748 Hence, `ismatrix ([])' was false, 749 while `ismatrix (zeros (1,2,0))' was true. 750 751 * The `issquare' function now returns a logical scalar, and is 752 equivalent to the expression 753 754 ismatrix (x) && ndims (x) == 2 && rows (x) == columns (x) 755 756 The dimension is no longer returned. As a result, `issquare ([])' 757 now yields true. 758 759 * The `issymmetric' function now checks for symmetry instead of 760 Hermitianness. For the latter, ishermitian was created. Also, 761 logical scalar is returned rather than the dimension, so 762 `issymmetric ([])' is now true. 763 764 ** Function handles are now aware of overloaded functions. If a 765 function is overloaded, the handle determines at the time of its 766 reference which function to call. A non-overloaded version does not 767 need to exist. 768 769 ** Overloading functions for built-in classes (double, int8, cell, 770 etc.) is now compatible with Matlab. 771 772 ** Function handles can now be compared with the == and != operators, 773 as well as the `isequal' function. 774 775 ** Performance of concatenation (using []) and the functions `cat', 776 `horzcat', and `vertcat' has been improved for multidimensional 777 arrays. 778 779 ** The operation-assignment operators +=, -=, *= and /= now behave more 780 efficiently in certain cases. For instance, if M is a matrix and S a 781 scalar, then the statement 782 783 M += S; 784 785 will operate on M's data in-place if it is not shared by another 786 variable, usually increasing both time and memory efficiency. 787 788 Only selected common combinations are affected, namely: 789 790 matrix += matrix 791 matrix -= matrix 792 matrix .*= matrix 793 matrix ./= matrix 794 795 matrix += scalar 796 matrix -= scalar 797 matrix *= scalar 798 matrix /= scalar 799 800 logical matrix |= logical matrix 801 logical matrix &= logical matrix 802 803 where matrix and scalar belong to the same class. The left-hand 804 side must be a simple variable reference. 805 806 Moreover, when unary operators occur in expressions, Octave will 807 also try to do the operation in-place if it's argument is a 808 temporary expression. 809 810 ** The effect of comparison operators (<, >, <=, and >=) applied to 811 complex numbers has changed to be consistent with the strict 812 ordering defined by the `max', `min', and `sort' functions. More 813 specifically, complex numbers are compared by lexicographical 814 comparison of the pairs `[abs(z), arg(z)]'. Previously, only real 815 parts were compared; this can be trivially achieved by converting 816 the operands to real values with the `real' function. 817 818 ** The automatic simplification of complex computation results has 819 changed. Octave will now simplify any complex number with a zero 820 imaginary part or any complex matrix with all elements having zero 821 imaginary part to a real value. Previously, this was done only for 822 positive zeros. Note that the behavior of the complex function is 823 unchanged and it still produces a complex value even if the 824 imaginary part is zero. 825 826 ** As a side effect of code refactoring in liboctave, the binary 827 logical operations are now more easily amenable to compiler 828 optimizations and are thus significantly faster. 829 830 ** Octave now allows user-defined `subsasgn' methods to optimize out 831 redundant copies. For more information, see the manual. 832 833 ** More efficient matrix division handling. Octave is now able to 834 handle the expressions 835 836 M' \ V 837 M.' \ V 838 V / M 839 840 (M is a matrix and V is a vector) more efficiently in certain cases. 841 In particular, if M is triangular, all three expressions will be 842 handled by a single call to xTRTRS (from LAPACK), with appropriate 843 flags. Previously, all three expressions required a physical 844 transpose of M. 845 846 ** More efficient handling of certain mixed real-complex matrix 847 operations. For instance, if RM is a real matrix and CM a complex 848 matrix, 849 850 RM * CM 851 852 can now be evaluated either as 853 854 complex (RM * real (CM), RM * imag (CM)) 855 856 or as 857 858 complex (RM) * CM, 859 860 depending on the dimensions. The first form requires more 861 temporaries and copying, but halves the FLOP count, which normally 862 brings better performance if RM has enough rows. Previously, the 863 second form was always used. 864 865 Matrix division is similarly affected. 866 867 ** More efficient handling of triangular matrix factors returned from 868 factorizations. The functions for computing QR, LU and Cholesky 869 factorizations will now automatically return the triangular matrix 870 factors with proper internal matrix_type set, so that it won't need 871 to be computed when the matrix is used for division. 872 873 ** The built-in `sum' function now handles the non-native summation 874 (i.e., double precision sum of single or integer inputs) more 875 efficiently, avoiding a temporary conversion of the whole input 876 array to doubles. Further, `sum' can now accept an extra option 877 argument, using a compensated summation algorithm rather than a 878 straightforward sum, which significantly improves precision if lots 879 of cancellation occurs in the summation. 880 881 ** The built-in `bsxfun' function now uses optimized code for certain 882 cases where built-in operator handles are passed in. Namely, the 883 optimizations concern the operators `plus', `minus', `times', 884 `ldivide', `rdivide', `power', `and', `or' (for logical arrays), 885 the relational operators `eq', `ne', `lt', `le', `gt', `ge', and the 886 functions `min' and `max'. Optimizations only apply when both 887 operands are of the same built-in class. Mixed real/complex and 888 single/double operations will first convert both operands to a 889 common type. 890 891 ** The `strfind' and `strrep' functions now have compiled 892 implementations, facilitating significantly more efficient searching 893 and replacing in strings, especially with longer patterns. The code 894 of `strcat' has been vectorized and is now much more efficient when 895 many strings are concatenated. The `strcmpi' and `strncmpi' 896 functions are now built-in functions, providing better performance. 897 898 ** 'str2double' now has a compiled implementation and the API conforms 899 to Matlab. The additional Octave-specific features of returning a 900 boolean matrix indicating which elements were successfully converted 901 has been removed. 902 903 ** Matlab-style ignoring input and output function arguments using 904 tilde (~) is now supported. Ignored output arguments may be 905 detected from a function using the built-in function `isargout'. 906 For more details, consult the manual. 907 908 ** The list datatype, deprecated since the introduction of cells, has 909 been removed. 910 911 ** The accumarray function has been optimized and is now significantly 912 faster in certain important cases. 913 914 ** The behavior of isreal and isnumeric functions was changed to be more 915 Matlab-compatible. 916 917 ** The integer math & conversion warnings (Octave:int-convert-nan, 918 Octave:int-convert-non-int-val, Octave:int-convert-overflow, 919 Octave:int-math-overflow) have been removed. 920 921 ** rem and mod are now built-in functions. They also handle integer 922 types efficiently using integer arithmetic. 923 924 ** Sparse indexing and indexed assignment has been mostly rewritten. 925 Since Octave uses compressed column storage for sparse matrices, 926 major attention is devoted to operations manipulating whole columns. 927 Such operations are now significantly faster, as well as some other 928 important cases. 929 930 Further, it is now possible to pre-allocate a sparse matrix and 931 subsequently fill it by assignments, provided they meet certain 932 conditions. For more information, consult the `spalloc' function, 933 which is no longer a mere dummy. Consequently, nzmax and nnz are no 934 longer always equal in Octave. Octave may also produce a matrix 935 with nnz < nzmax as a result of other operations, so you should 936 consistently use nnz unless you really want to use nzmax (i.e., the 937 space allocated for nonzero elements). 938 939 Sparse concatenation is also affected, and concatenating sparse 940 matrices, especially larger collections, is now significantly more 941 efficient. This applies to both the [] operator and the 942 cat/vertcat/horzcat functions. 943 944 ** It is now possible to optionally employ the xGESDD LAPACK drivers 945 for computing the singular value decomposition using svd, instead 946 of the default xGESVD, using the configuration pseudo-variable 947 svd_driver. The xGESDD driver can be up to 6x times faster when 948 singular vectors are requested, but is reported to be somewhat less 949 robust on highly ill-conditioned matrices. 950 951 ** Configuration pseudo-variables, such as page_screen_output or 952 confirm_recursive_rmdir (or the above mentioned svd_driver), now 953 accept a "local" option as second argument, requesting the change 954 to be undone when the current function returns: 955 956 function [status, msg] = rm_rf (dir) 957 confirm_recursive_rmdir (false, "local"); 958 [status, msg] = rmdir (dir, "s"); 959 ... 960 endfunction 961 962 Upon return, confirm_recursive_rmdir will be restored to the value 963 it had on entry to the function, even if there were subsequent 964 changes to the variable in function rm_rf or any of the functions 965 it calls. 966 967 ** pkg now accepts a -forge option for downloading and installing 968 packages from Octave Forge automatically. For example, 969 970 pkg install -forge general 971 972 will automatically download the latest release of the general 973 package and attempt to install it. No automatic resolving of 974 dependencies is provided. Further, 975 976 pkg list -forge 977 978 can be used to list all available packages. 979 980 ** The internal data representation of structs has been completely 981 rewritten to make certain optimizations feasible. The field data 982 can now be shared between structs with equal keys but different 983 dimensions or values, making operations that preserve the fields 984 faster. Economized storage is now used for scalar structs (just 985 like most other scalars), making their usage more 986 memory-efficient. Certain array-like operations on structs 987 (concatenation, uniform cellfun, num2cell) have gained a 988 significant speed-up. Additionally, the octave_scalar_map class 989 now provides a simpler interface to work with scalar structs within 990 a C++ DLD function. 991 992 ** Two new formats are available for displaying numbers: 993 994 format short eng 995 format long eng 996 997 Both display numbers in engineering notation, i.e., mantissa + 998 exponent where the exponent is a multiple of 3. 999 1000 ** The following functions are new in Octave 3.4: 1001 accumdim erfcx nfields pqpnonneg uigetdir 1002 bitpack fileread nth_element quadcc uigetfile 1003 bitunpack fminbnd onCleanup randi uiputfile 1004 blkmm fskipl pbaspect repelems uimenu 1005 cbrt ifelse pie3 reset whitebg 1006 curl ishermitian powerset rsf2csf 1007 chop isindex ppder saveas 1008 daspect luupdate ppint strread 1009 divergence merge ppjumps textread 1010 1011 ** Using the image function to view images with external programs such 1012 as display, xv, and xloadimage is no longer supported. The 1013 image_viewer function has also been removed. 1014 1015 ** The behavior of struct assignments to non-struct values has been 1016 changed. Previously, it was possible to overwrite an arbitrary 1017 value: 1018 1019 a = 1; 1020 a.x = 2; 1021 1022 This is no longer possible unless a is an empty matrix or cell 1023 array. 1024 1025 ** The dlmread function has been extended to allow specifying a custom 1026 value for empty fields. 1027 1028 ** The dlmread and dlmwrite functions have been modified to accept 1029 file IDs (as returned by fopen) in addition to file names. 1030 1031 ** Octave can now optimize away the interpreter overhead of an 1032 anonymous function handle, if the function simply calls another 1033 function or handle with some of its parameters bound to certain 1034 values. Example: 1035 1036 f = @(x) sum (x, 1); 1037 1038 When f is called, the call is forwarded to @sum with the constant 1 1039 appended, and the anonymous function call does not occur on the 1040 call stack. 1041 1042 ** For compatibility with Matlab, mu2lin (x) is now equivalent to 1043 mu2lin (x, 0). 1044 1045 ** The new function `history_control' may be used to control the way 1046 command lines are added to the history list when Octave is using 1047 readline for command-line editing. For example 1048 1049 history_control ("ignoredups") 1050 1051 tells Octave to avoid adding duplicate lines to the history list. 1052 1053 ** Octave now uses the gnulib library for improved portability and to 1054 avoid bugs in operating system functions. 1055 1056 ** Deprecated functions. 1057 1058 The following functions were deprecated in Octave 3.0 and have been 1059 removed from Octave 3.4. 1060 1061 beta_cdf geometric_pdf pascal_pdf 1062 beta_inv geometric_rnd pascal_rnd 1063 beta_pdf hypergeometric_cdf poisson_cdf 1064 beta_rnd hypergeometric_inv poisson_inv 1065 binomial_cdf hypergeometric_pdf poisson_pdf 1066 binomial_inv hypergeometric_rnd poisson_rnd 1067 binomial_pdf intersection polyinteg 1068 binomial_rnd is_bool setstr 1069 chisquare_cdf is_complex struct_contains 1070 chisquare_inv is_list struct_elements 1071 chisquare_pdf is_matrix t_cdf 1072 chisquare_rnd is_scalar t_inv 1073 clearplot is_square t_pdf 1074 clg is_stream t_rnd 1075 com2str is_struct uniform_cdf 1076 exponential_cdf is_symmetric uniform_inv 1077 exponential_inv is_vector uniform_pdf 1078 exponential_pdf isstr uniform_rnd 1079 exponential_rnd lognormal_cdf weibcdf 1080 f_cdf lognormal_inv weibinv 1081 f_inv lognormal_pdf weibpdf 1082 f_pdf lognormal_rnd weibrnd 1083 f_rnd meshdom weibull_cdf 1084 gamma_cdf normal_cdf weibull_inv 1085 gamma_inv normal_inv weibull_pdf 1086 gamma_pdf normal_pdf weibull_rnd 1087 gamma_rnd normal_rnd wiener_rnd 1088 geometric_cdf pascal_cdf 1089 geometric_inv pascal_inv 1090 1091 The following functions were deprecated in Octave 3.2 and will 1092 be removed from Octave 3.6 (or whatever version is the second major 1093 release after 3.2): 1094 1095 create_set spcholinv splu 1096 dmult spcumprod spmax 1097 iscommand spcumsum spmin 1098 israwcommand spdet spprod 1099 lchol spdiag spqr 1100 loadimage spfind spsum 1101 mark_as_command sphcat spsumsq 1102 mark_as_rawcommand spinv spvcat 1103 spatan2 spkron str2mat 1104 spchol splchol unmark_command 1105 spchol2inv split unmark_rawcommand 1106 1107 The following functions have been deprecated in Octave 3.4 and will 1108 be removed from Octave 3.8 (or whatever version is the second major 1109 release after 3.4): 1110 1111 autocor cellidx gammai is_global replot values 1112 autocov dispatch glpkmex krylovb saveimage 1113 betai fstat intwarning perror strerror 1114 1115Summary of important user-visible changes for version 3.2 (2009-06-05): 1116---------------------------------------------------------------------- 1117 1118 ** Compatibility with Matlab graphics has been improved. 1119 1120 The hggroup object and associated listener callback functions have 1121 been added allowing the inclusion of group objects. Data sources 1122 have been added to these group objects such that 1123 1124 x = 0:0.1:10; 1125 y = sin (x); 1126 plot (x, y, "ydatasource", "y"); 1127 for i = 1 : 100 1128 pause(0.1) 1129 y = sin (x + 0.1 * i); 1130 refreshdata (); 1131 endfor 1132 1133 works as expected. This capability has be used to introduce 1134 stem-series, bar-series, etc., objects for better Matlab 1135 compatibility. 1136 1137 ** New graphics functions: 1138 1139 addlistener ezcontour gcbo refresh 1140 addproperty ezcontourf ginput refreshdata 1141 allchild ezmesh gtext specular 1142 available_graphics_toolkits ezmeshc intwarning surfl 1143 graphics_toolkit ezplot ishghandle trisurf 1144 cla ezplot3 isocolors waitforbuttonpress 1145 clabel ezpolar isonormals 1146 comet ezsurf isosurface 1147 dellistener findall linkprop 1148 diffuse gcbf plotmatrix 1149 1150 ** New experimental OpenGL/FLTK based plotting system. 1151 1152 An experimental plotting system based on OpenGL and the FLTK 1153 toolkit is now part of Octave. This graphics toolkit is disabled by 1154 default. You can switch to using it with the command 1155 1156 graphics_toolkit ("fltk") 1157 1158 for all future figures or for a particular figure with the command 1159 1160 graphics_toolkit (h, "fltk") 1161 1162 where "h" is a valid figure handle. 1163 1164 ** Functions providing direct access to gnuplot have been removed. 1165 1166 The functions __gnuplot_plot__, __gnuplot_set__, __gnuplot_raw__, 1167 __gnuplot_show__, __gnuplot_replot__, __gnuplot_splot__, 1168 __gnuplot_save_data__ and __gnuplot_send_inline_data__ have been 1169 removed from Octave. These function were incompatible with the 1170 high level graphics handle code. 1171 1172 ** The Control, Finance and Quaternion functions have been removed. 1173 1174 These functions are now available as separate packages from 1175 1176 http://octave.sourceforge.net/packages.html 1177 1178 and can be reinstalled using the Octave package manager (see 1179 the pkg function). 1180 1181 ** Specific sparse matrix functions removed. 1182 1183 The following functions, which handled only sparse matrices have 1184 been removed. Instead of calling these functions directly, you 1185 should use the corresponding function without the "sp" prefix. 1186 1187 spatan2 spcumsum spkron spprod 1188 spchol spdet splchol spqr 1189 spchol2inv spdiag splu spsum 1190 spcholinv spfind spmax spsumsqk 1191 spcumprod spinv spmin 1192 1193 ** Improvements to the debugger. 1194 1195 The interactive debugging features have been improved. Stopping 1196 on statements with dbstop should work correctly now. Stepping 1197 into and over functions, and stepping one statement at a time 1198 (with dbstep) now works. Moving up and down the call stack with 1199 dbup and dbdown now works. The dbstack function is now available 1200 to print the current function call stack. The new dbquit function 1201 is available to exit the debugging mode. 1202 1203 ** Improved traceback error messages. 1204 1205 Traceback error messages are much more concise and easier to 1206 understand. They now display information about the function call 1207 stack instead of the stack of all statements that were active at 1208 the point of the error. 1209 1210 ** Object Oriented Programming. 1211 1212 Octave now includes OOP features and the user can create their own 1213 class objects and overloaded functions and operators. For 1214 example, all methods of a class called "myclass" will be found in 1215 a directory "@myclass" on the users path. The class specific 1216 versions of functions and operators take precedence over the 1217 generic versions of these functions. 1218 1219 New functions related to OOP include 1220 1221 class inferiorto isobject loadobj methods superiorto 1222 1223 See the Octave manual for more details. 1224 1225 ** Parsing of Command-style Functions. 1226 1227 Octave now parses command-style functions without needing to first 1228 declare them with "mark_as_command". The rules for recognizing a 1229 command-style function calls are 1230 1231 * A command must appear as the first word in a statement, 1232 followed by a space. 1233 1234 * The first character after the space must not be '=' or '(' 1235 1236 * The next token after the space must not look like a binary 1237 operator. 1238 1239 These rules should be mostly compatible with the way Matlab parses 1240 command-style function calls and allow users to define commands in 1241 .m files without having to mark them as commands. 1242 1243 Note that previous versions of Octave allowed expressions like 1244 1245 x = load -text foo.dat 1246 1247 but an expression like this will now generate a parse error. In 1248 order to assign the value returned by a function to a variable, 1249 you must use the normal function call syntax: 1250 1251 x = load ("-text", "foo.dat"); 1252 1253 ** Block comments. 1254 1255 Commented code can be between matching "#{" and "#}" or "%{" and 1256 "%}" markers, even if the commented code spans several line. This 1257 allows blocks code to be commented, without needing to comment 1258 each line. For example, 1259 1260 function [s, t] = func (x, y) 1261 s = 2 * x; 1262 #{ 1263 s *= y; 1264 t = y + x; 1265 #} 1266 endfunction 1267 1268 the lines "s *= y;" and "t = y + x" will not be executed. 1269 1270 ** If any subfunction in a file ends with "end" or "endfunction", then 1271 they all must end that way. Previously, Octave accepted 1272 1273 function main () 1274 ... 1275 # no endfunction here. 1276 function sub () 1277 ... 1278 endfunction 1279 1280 but this is no longer allowed. 1281 1282 ** Special treatment in the parser of expressions like "a' * b". 1283 1284 In these cases the transpose is no longer explicitly formed and 1285 BLAS libraries are called with the transpose flagged, 1286 significantly improving performance for these kinds of 1287 operations. 1288 1289 ** Single Precision data type. 1290 1291 Octave now includes a single precision data type. Single 1292 precision variables can be created with the "single" command, or 1293 from functions like ones, eye, etc. For example, 1294 1295 single (1) 1296 ones (2, 2, "single") 1297 zeros (2, 2, "single") 1298 eye (2, 2, "single") 1299 Inf (2, 2, "single") 1300 NaN (2, 2, "single") 1301 NA (2, 2, "single") 1302 1303 all create single precision variables. For compatibility with 1304 Matlab, mixed double/single precision operators and functions 1305 return single precision types. 1306 1307 As a consequence of this addition to Octave the internal 1308 representation of the double precision NA value has changed, and 1309 so users that make use of data generated by Octave with R or 1310 visa-versa are warned that compatibility might not be assured. 1311 1312 ** Improved array indexing. 1313 1314 The underlying code used for indexing of arrays has been 1315 completely rewritten and indexing is now significantly faster. 1316 1317 ** Improved memory management. 1318 1319 Octave will now attempt to share data in some cases where previously 1320 a copy would be made, such as certain array slicing operations or 1321 conversions between cells, structs and cs-lists. This usually reduces 1322 both time and memory consumption. 1323 Also, Octave will now attempt to detect and optimize usage of a vector 1324 as a stack, when elements are being repeatedly inserted at/removed from 1325 the end of the vector. 1326 1327 ** Improved performance for reduction operations. 1328 1329 The performance of the sum, prod, sumsq, cumsum, cumprod, any, all, 1330 max and min functions has been significantly improved. 1331 1332 ** Sorting and searching. 1333 1334 The performance of sort has been improved, especially when sorting 1335 indices are requested. An efficient built-in issorted 1336 implementation was added. The sortrows function now uses a more 1337 efficient algorithm, especially in the homogeneous case. The lookup 1338 function is now a built-in function performing a binary search, 1339 optimized for long runs of close elements. Lookup also works with 1340 cell arrays of strings. 1341 1342 ** Range arithmetics 1343 1344 For some operations on ranges, Octave will attempt to keep the 1345 result as a range. These include negation, adding a scalar, 1346 subtracting a scalar, and multiplying by a scalar. Ranges with zero 1347 increment are allowed and can be constructed using the built-in 1348 function `ones'. 1349 1350 ** Various performance improvements. 1351 1352 Performance of a number of other built-in operations and functions 1353 was improved, including: 1354 1355 * logical operations 1356 * comparison operators 1357 * element-wise power 1358 * accumarray 1359 * cellfun 1360 * isnan 1361 * isinf 1362 * isfinite 1363 * nchoosek 1364 * repmat 1365 * strcmp 1366 1367 ** 64-bit integer arithmetic. 1368 1369 Arithmetic with 64-bit integers (int64 and uint64 types) is fully 1370 supported, with saturation semantics like the other integer types. 1371 Performance of most integer arithmetic operations has been 1372 improved by using integer arithmetic directly. Previously, Octave 1373 performed integer math with saturation semantics by converting the 1374 operands to double precision, performing the operation, and then 1375 converting the result back to an integer value, truncating if 1376 necessary. 1377 1378 ** Diagonal and permutation matrices. 1379 1380 The interpreter can now treat diagonal and permutation matrices as 1381 special objects that store only the non-zero elements, rather than 1382 general full matrices. Therefore, it is now possible to construct 1383 and use these matrices in linear algebra without suffering a 1384 performance penalty due to storing large numbers of zero elements. 1385 1386 ** Improvements to fsolve. 1387 1388 The fsolve function now accepts an option structure argument (see 1389 also the optimset function). The INFO values returned from fsolve 1390 have changed to be compatible with Matlab's fsolve function. 1391 Additionally, fsolve is now able to solve overdetermined systems, 1392 complex-differentiable complex systems, systems with a sparse 1393 jacobian and can work in single precision if given single precision 1394 inputs. It can also be called recursively. 1395 1396 ** Improvements to the norm function. 1397 1398 The norm function is now able to compute row or column norms of a 1399 matrix in a single call, as well as general matrix p-norms. 1400 1401 ** New functions for computing some eigenvalues or singular values. 1402 1403 The eigs and svds functions have been included in Octave. These 1404 functions require the ARPACK library (now distributed under a 1405 GPL-compatible license). 1406 1407 ** New QR and Cholesky factorization updating functions. 1408 1409 choldelete cholshift qrdelete qrshift 1410 cholinsert cholupdate qrinsert qrupdate 1411 1412 ** New quadrature functions. 1413 1414 dblquad quadgk quadv triplequad 1415 1416 ** New functions for reading and writing images. 1417 1418 The imwrite and imread functions have been included in Octave. 1419 These functions require the GraphicsMagick library. The new 1420 function imfinfo provides information about an image file (size, 1421 type, colors, etc.) 1422 1423 ** The input_event_hook function has been replaced by the pair of 1424 functions add_input_event_hook and remove_input_event_hook so that 1425 more than one hook function may be installed at a time. 1426 1427 ** Other miscellaneous new functions. 1428 1429 addtodate hypot reallog 1430 bicgstab idivide realpow 1431 cellslices info realsqrt 1432 cgs interp1q rectint 1433 command_line_path isdebugmode regexptranslate 1434 contrast isfloat restoredefaultpath 1435 convn isstrprop roundb 1436 cummin log1p rundemos 1437 cummax lsqnonneg runlength 1438 datetick matlabroot saveobj 1439 display namelengthmax spaugment 1440 expm1 nargoutchk strchr 1441 filemarker pathdef strvcat 1442 fstat perl subspace 1443 full prctile symvar 1444 fzero quantile treelayout 1445 genvarname re_read_readline_init_file validatestring 1446 histc 1447 1448 ** Changes to strcat. 1449 1450 The strcat function is now compatible with Matlab's strcat 1451 function, which removes trailing whitespace when concatenating 1452 character strings. For example 1453 1454 strcat ('foo ', 'bar') 1455 ==> 'foobar' 1456 1457 The new function cstrcat provides the previous behavior of 1458 Octave's strcat. 1459 1460 ** Improvements to the help functions. 1461 1462 The help system has been mostly re-implemented in .m files to make 1463 it easier to modify. Performance of the lookfor function has been 1464 greatly improved by caching the help text from all functions that 1465 are distributed with Octave. The pkg function has been modified 1466 to generate cache files for external packages when they are 1467 installed. 1468 1469 ** Deprecated functions. 1470 1471 The following functions were deprecated in Octave 3.0 and will be 1472 removed from Octave 3.4 (or whatever version is the second major 1473 release after 3.0): 1474 1475 beta_cdf geometric_pdf pascal_pdf 1476 beta_inv geometric_rnd pascal_rnd 1477 beta_pdf hypergeometric_cdf poisson_cdf 1478 beta_rnd hypergeometric_inv poisson_inv 1479 binomial_cdf hypergeometric_pdf poisson_pdf 1480 binomial_inv hypergeometric_rnd poisson_rnd 1481 binomial_pdf intersection polyinteg 1482 binomial_rnd is_bool setstr 1483 chisquare_cdf is_complex struct_contains 1484 chisquare_inv is_list struct_elements 1485 chisquare_pdf is_matrix t_cdf 1486 chisquare_rnd is_scalar t_inv 1487 clearplot is_square t_pdf 1488 clg is_stream t_rnd 1489 com2str is_struct uniform_cdf 1490 exponential_cdf is_symmetric uniform_inv 1491 exponential_inv is_vector uniform_pdf 1492 exponential_pdf isstr uniform_rnd 1493 exponential_rnd lognormal_cdf weibcdf 1494 f_cdf lognormal_inv weibinv 1495 f_inv lognormal_pdf weibpdf 1496 f_pdf lognormal_rnd weibrnd 1497 f_rnd meshdom weibull_cdf 1498 gamma_cdf normal_cdf weibull_inv 1499 gamma_inv normal_inv weibull_pdf 1500 gamma_pdf normal_pdf weibull_rnd 1501 gamma_rnd normal_rnd wiener_rnd 1502 geometric_cdf pascal_cdf 1503 geometric_inv pascal_inv 1504 1505 The following functions are now deprecated in Octave 3.2 and will 1506 be removed from Octave 3.6 (or whatever version is the second major 1507 release after 3.2): 1508 1509 create_set spcholinv spmax 1510 dmult spcumprod spmin 1511 iscommand spcumsum spprod 1512 israwcommand spdet spqr 1513 lchol spdiag spsum 1514 loadimage spfind spsumsq 1515 mark_as_command spinv str2mat 1516 mark_as_rawcommand spkron unmark_command 1517 spatan2 splchol unmark_rawcommand 1518 spchol split 1519 spchol2inv splu 1520 1521Summary of important user-visible changes for version 3.0 (2007-12-21): 1522---------------------------------------------------------------------- 1523 1524 ** Compatibility with Matlab graphics is much better now. We now 1525 have some graphics features that work like Matlab's Handle 1526 Graphics (tm): 1527 1528 + You can make a subplot and then use the print function to 1529 generate a file with the plot. 1530 1531 + RGB line colors are supported if you use gnuplot 4.2. Octave 1532 can still use gnuplot 4.0, but there is no way to set arbitrary 1533 line colors with it when using the Matlab-style plot functions. 1534 There never was any way to do this reliably with older versions 1535 of gnuplot (whether run from Octave or not) since it only 1536 provided a limited set to choose from, and they were terminal 1537 dependent, so choosing color 1 with the X11 terminal would be 1538 different from color 1 with the PostScript terminal. Valid RGB 1539 colors for gnuplot 4.0 are the eight possible combinations of 0 1540 and 1 for the R, G and B values. Invalid values are all mapped 1541 to the same color. 1542 1543 This also affects patch objects used in the bar, contour, meshc 1544 and surfc functions, where the bars and contours will be 1545 monochrome. A workaround for this is to type "colormap gmap40" 1546 that loads a colormap that in many cases will be adequate for 1547 simple bar and contour plots. 1548 1549 + You can control the width of lines using (for example): 1550 1551 line (x, y, "linewidth", 4, "color", [1, 0, 0.5]); 1552 1553 (this also shows the color feature). 1554 1555 + With gnuplot 4.2, image data is plotted with gnuplot and may be 1556 combined with other 2-d plot data. 1557 1558 + Lines for contour plots are generated with an Octave function, so 1559 contour plots are now 2-d plots instead of special 3-d plots, and 1560 this allows you to plot additional 2-d data on top of a contour 1561 plot. 1562 1563 + With the gnuplot "extended" terminals the TeX interpreter is 1564 emulated. However, this means that the TeX interpreter is only 1565 supported on the postscript terminals with gnuplot 4.0. Under 1566 gnuplot 4.2 the terminals aqua, dumb, png, jpeg, gif, pm, windows, 1567 wxt, svg and x11 are supported as well. 1568 1569 + The following plot commands are now considered obsolete and will 1570 be removed from a future version of Octave: 1571 1572 __gnuplot_set__ 1573 __gnuplot_show__ 1574 __gnuplot_plot__ 1575 __gnuplot_splot__ 1576 __gnuplot_replot__ 1577 1578 Additionally, these functions no longer have any effect on plots 1579 created with the Matlab-style plot commands (plot, line, mesh, 1580 semilogx, etc.). 1581 1582 + Plot property values are not extensively checked. Specifying 1583 invalid property values may produce unpredictable results. 1584 1585 + Octave now sends data over the same pipe that is used to send 1586 commands to gnuplot. While this avoids the problem of 1587 cluttering /tmp with data files, it is no longer possible to use 1588 the mouse to zoom in on plots. This is a limitation of gnuplot, 1589 which is unable to zoom when the data it plots is not stored in 1590 a file. Some work has been done to fix this problem in newer 1591 versions of gnuplot (> 4.2.2). See for example, this thread 1592 1593 http://www.nabble.com/zooming-of-inline-data-tf4357017.html#a12416496 1594 1595 on the gnuplot development list. 1596 1597 1598 ** The way Octave handles search paths has changed. Instead of 1599 setting the built-in variable LOADPATH, you must use addpath, 1600 rmpath, or path to manipulate the function search path. These 1601 functions will maintain "." at the head of the path, for 1602 compatibility with Matlab. 1603 1604 Leading, trailing or doubled colons are no longer special. 1605 Now, all elements of the search path are explicitly included in 1606 the path when Octave starts. To display the path, use the path 1607 function. 1608 1609 Path elements that end in // are no longer searched recursively. 1610 Instead, you may use addpath and the genpath function to add an 1611 entire directory tree to the path. For example, 1612 1613 addpath (genpath ("~/octave")); 1614 1615 will add ~/octave and all directories below it to the head of the 1616 path. 1617 1618 1619 ** Previous versions of Octave had a number of built-in variables to 1620 control warnings (for example, warn_divide_by_zero). These 1621 variables have been replaced by warning identifiers that are used 1622 with the warning function to control the state of warnings. 1623 1624 For example, instead of writing 1625 1626 warn_divide_by_zero = false; 1627 1628 to disable divide-by-zero warnings, you should write 1629 1630 warning ("off", "Octave:divide-by-zero"); 1631 1632 You may use the same technique in your own code to control 1633 warnings. For example, you can use 1634 1635 warning ("My-package:phase-of-the-moon", 1636 "the phase of the moon could cause trouble today"); 1637 1638 to allow users to control this warning using the 1639 "My-package:phase-of-the-moon" warning identifier. 1640 1641 You may also enable or disable all warnings, or turn them into 1642 errors: 1643 1644 warning ("on", "all"); 1645 warning ("off", "all"); 1646 warning ("error", "Octave:divide-by-zero"); 1647 warning ("error", "all"); 1648 1649 You can query the state of current warnings using 1650 1651 warning ("query", ID) 1652 warning ("query") 1653 1654 (only those warning IDs which have been explicitly set are 1655 returned). 1656 1657 A partial list and description of warning identifiers is available 1658 using 1659 1660 help warning_ids 1661 1662 1663 ** All built-in variables have been converted to functions. This 1664 change simplifies the interpreter and allows a consistent 1665 interface to internal variables for user-defined packages and the 1666 core functions distributed with Octave. In most cases, code that 1667 simply accesses internal variables does not need to change. Code 1668 that sets internal variables will change. For example, instead of 1669 writing 1670 1671 PS1 = ">> "; 1672 1673 you will need to write 1674 1675 PS1 (">> "); 1676 1677 If you need write code that will run in both old and new versions 1678 of Octave, you can use something like 1679 1680 if (exist ("OCTAVE_VERSION") == 5) 1681 ## New: 1682 PS1 (">> "); 1683 else 1684 ## Old: 1685 PS1 = ">> "; 1686 endif 1687 1688 1689 ** For compatibility with Matlab, the output order of Octave's 1690 "system" function has changed from 1691 1692 [output, status] = system (cmd); 1693 1694 to 1695 1696 [status, output] = system (cmd); 1697 1698 1699 ** For compatibility with Matlab, the output of Octave's fsolve 1700 function has been changed from 1701 1702 [x, info, msg] = fsolve (...); 1703 1704 to 1705 1706 [x, fval, info] = fsolve (...); 1707 1708 1709 ** For compatibility with Matlab, normcdf, norminv, normpdf, and 1710 normrnd have been modified to compute distributions using the 1711 standard deviation instead of the variance. 1712 1713 1714 ** For compatibility with Matlab, gamcdf, gaminv, gampdf, gamrnd, 1715 expcdf, expinv, exppdf and exprnd have been modified to compute 1716 the distributions using the standard scale factor rather than 1717 one over the scale factor. 1718 1719--------------------------------------------------------- 1720 1721See NEWS.2 for old news. 1722