comparison pages/NEWS-3.4.md @ 215:dedb85c54245

Reorganize homepage.
author Kai T. Ohlhus <k.ohlhus@gmail.com>
date Thu, 10 Sep 2020 17:47:36 +0900
parents
children c8126c010d67
comparison
equal deleted inserted replaced
214:fe5dcb23372a 215:dedb85c54245
1 ---
2 layout: page
3 title: GNU Octave Version 3.4
4 menu: false
5 permalink: NEWS-3.4.html
6 ---
7
8 ## Summary of important user-visible changes
9
10 February 8, 2011
11
12 {% include release_news_select.md %}
13
14 <pre>
15 ** IMPORTANT note about binary incompatibility in this release:
16
17 Binary compatibility for all 3.4.x releases was originally planned,
18 but this is impossible for the 3.4.1 release due to a bug in the way
19 shared libraries were built in Octave 3.4.0. Because of this bug,
20 .oct files built for Octave 3.4.0 must be recompiled before they
21 will work with Octave 3.4.1.
22
23 Given that there would be binary incompatibilities with shared
24 libraries going from Octave 3.4.0 to 3.4.1, the following
25 incompatible changes were also made in this release:
26
27 * The Perl Compatible Regular Expression (PCRE) library is now
28 required to build Octave.
29
30 * Octave's libraries and .oct files are now installed in
31 subdirectories of $libdir instead of $libexecdir.
32
33 Any future Octave 3.4.x release versions should remain binary
34 compatible with Octave 3.4.1 as proper library versioning is now
35 being used as recommended by the libtool manual.
36
37 ** The following functions have been deprecated in Octave 3.4.1 and will
38 be removed from Octave 3.8 (or whatever version is the second major
39 release after 3.4):
40
41 cquad is_duplicate_entry perror strerror
42
43 ** The following functions are new in 3.4.1:
44
45 colstyle gmres iscolumn isrow mgorth nproc rectangle
46
47 ** The get_forge_pkg function is now private.
48
49 ** The rectangle_lw, rectangle_sw, triangle_lw, and triangle_sw
50 functions are now private.
51
52 ** The logistic_regression_derivatives and logistic_regression_likelihood
53 functions are now private.
54
55 ** ChangeLog files in the Octave sources are no longer maintained
56 by hand. Instead, there is a single ChangeLog file generated from
57 the Mercurial version control commit messages. Older ChangeLog
58 information can be found in the etc/OLD-ChangeLogs directory in the
59 source distribution.
60
61 Summary of important user-visible changes for version 3.4:
62 ---------------------------------------------------------
63
64 ** BLAS and LAPACK libraries are now required to build Octave. The
65 subset of the reference BLAS and LAPACK libraries has been removed
66 from the Octave sources.
67
68 ** The `lookup' function was extended to be more useful for
69 general-purpose binary searching. Using this improvement, the
70 ismember function was rewritten for significantly better
71 performance.
72
73 ** Real, integer and logical matrices, when used in indexing, will now
74 cache the internal index_vector value (zero-based indices) when
75 successfully used as indices, eliminating the conversion penalty for
76 subsequent indexing by the same matrix. In particular, this means it
77 is no longer needed to avoid repeated indexing by logical arrays
78 using find for performance reasons.
79
80 ** Logical matrices are now treated more efficiently when used as
81 indices. Octave will keep the index as a logical mask unless the
82 ratio of true elements is small enough, using a specialized
83 code. Previously, all logical matrices were always first converted
84 to index vectors. This results in savings in both memory and
85 computing time.
86
87 ** The `sub2ind' and `ind2sub' functions were reimplemented as compiled
88 functions for better performance. These functions are now faster,
89 can deliver more economized results for ranges, and can reuse the
90 index cache mechanism described in previous paragraph.
91
92 ** The built-in function equivalents to associative operators (`plus',
93 `times', `mtimes', `and', and `or') have been extended to accept
94 multiple arguments. This is especially useful for summing
95 (multiplying, etc.) lists of objects (of possibly distinct types):
96
97 matrix_sum = plus (matrix_list{:});
98
99 ** An FTP object type based on libcurl has been implemented. These
100 objects allow ftp connections, downloads and uploads to be
101 managed. For example,
102
103 fp = ftp ("ftp.octave.org);
104 cd (fp, "gnu/octave");
105 mget (fp, "octave-3.2.3.tar.bz2");
106 close (fp);
107
108 ** The default behavior of `assert (observed, expected)' has been
109 relaxed to employ less strict checking that does not require the
110 internals of the values to match. This avoids previously valid
111 tests from breaking due to new internal classes introduced in future
112 Octave versions.
113
114 For instance, all of these assertions were true in Octave 3.0.x
115 but false in 3.2.x due to new optimizations and improvements:
116
117 assert (2*linspace (1, 5, 5), 2*(1:5))
118 assert (zeros (0, 0), [])
119 assert (2*ones (1, 5), (2) (ones (1,5)))
120
121 ** The behavior of library functions `ismatrix', `issquare', and
122 `issymmetric' has been changed for better consistency.
123
124 * The `ismatrix' function now returns true for all numeric,
125 logical and character 2-D or N-D matrices. Previously, `ismatrix'
126 returned false if the first or second dimension was zero.
127 Hence, `ismatrix ([])' was false,
128 while `ismatrix (zeros (1,2,0))' was true.
129
130 * The `issquare' function now returns a logical scalar, and is
131 equivalent to the expression
132
133 ismatrix (x) && ndims (x) == 2 && rows (x) == columns (x)
134
135 The dimension is no longer returned. As a result, `issquare ([])'
136 now yields true.
137
138 * The `issymmetric' function now checks for symmetry instead of
139 Hermitianness. For the latter, ishermitian was created. Also,
140 logical scalar is returned rather than the dimension, so
141 `issymmetric ([])' is now true.
142
143 ** Function handles are now aware of overloaded functions. If a
144 function is overloaded, the handle determines at the time of its
145 reference which function to call. A non-overloaded version does not
146 need to exist.
147
148 ** Overloading functions for built-in classes (double, int8, cell,
149 etc.) is now compatible with Matlab.
150
151 ** Function handles can now be compared with the == and != operators,
152 as well as the `isequal' function.
153
154 ** Performance of concatenation (using []) and the functions `cat',
155 `horzcat', and `vertcat' has been improved for multidimensional
156 arrays.
157
158 ** The operation-assignment operators +=, -=, *= and /= now behave more
159 efficiently in certain cases. For instance, if M is a matrix and S a
160 scalar, then the statement
161
162 M += S;
163
164 will operate on M's data in-place if it is not shared by another
165 variable, usually increasing both time and memory efficiency.
166
167 Only selected common combinations are affected, namely:
168
169 matrix += matrix
170 matrix -= matrix
171 matrix .*= matrix
172 matrix ./= matrix
173
174 matrix += scalar
175 matrix -= scalar
176 matrix *= scalar
177 matrix /= scalar
178
179 logical matrix |= logical matrix
180 logical matrix &= logical matrix
181
182 where matrix and scalar belong to the same class. The left-hand
183 side must be a simple variable reference.
184
185 Moreover, when unary operators occur in expressions, Octave will
186 also try to do the operation in-place if it's argument is a
187 temporary expresssion.
188
189 ** The effect of comparison operators (<, >, <=, and >=) applied to
190 complex numbers has changed to be consistent with the strict
191 ordering defined by the `max', `min', and `sort' functions. More
192 specifically, complex numbers are compared by lexicographical
193 comparison of the pairs `[abs(z), arg(z)]'. Previously, only real
194 parts were compared; this can be trivially achieved by wrapping the
195 operands in real().
196
197 ** The automatic simplification of complex computation results has
198 changed. Octave will now simplify any complex number with a zero
199 imaginary part or any complex matrix with all elements having zero
200 imaginary part to a real value. Previously, this was done only for
201 positive zeros. Note that the behavior of the complex function is
202 unchanged and it still produces a complex value even if the
203 imaginary part is zero.
204
205 ** As a side effect of code refactoring in liboctave, the binary
206 logical operations are now more easily amenable to compiler
207 optimizations and are thus significantly faster.
208
209 ** Octave now allows user-defined `subsasgn' methods to optimize out
210 redundant copies. For more information, see the manual.
211
212 ** More efficient matrix division handling. Octave is now able to
213 handle the expressions
214
215 M' \ V
216 M.' \ V
217 V / M
218
219 (M is a matrix and V is a vector) more efficiently in certain cases.
220 In particular, if M is triangular, all three expressions will be
221 handled by a single call to xTRTRS (from LAPACK), with appropriate
222 flags. Previously, all three expressions required a physical
223 transpose of M.
224
225 ** More efficient handling of certain mixed real-complex matrix
226 operations. For instance, if RM is a real matrix and CM a complex
227 matrix,
228
229 RM * CM
230
231 can now be evaluated either as
232
233 complex (RM * real (CM), RM * imag (CM))
234
235 or as
236
237 complex (RM) * CM,
238
239 depending on the dimensions. The first form requires more
240 temporaries and copying, but halves the FLOP count, which normally
241 brings better performance if RM has enough rows. Previously, the
242 second form was always used.
243
244 Matrix division is similarly affected.
245
246 ** More efficient handling of triangular matrix factors returned from
247 factorizations. The functions for computing QR, LU and Cholesky
248 factorizations will now automatically return the triangular matrix
249 factors with proper internal matrix_type set, so that it won't need
250 to be computed when the matrix is used for division.
251
252 ** The built-in `sum' function now handles the non-native summation
253 (i.e., double precision sum of single or integer inputs) more
254 efficiently, avoiding a temporary conversion of the whole input
255 array to doubles. Further, `sum' can now accept an extra option
256 argument, using a compensated summation algorithm rather than a
257 straightforward sum, which significantly improves precision if lots
258 of cancellation occurs in the summation.
259
260 ** The built-in `bsxfun' function now uses optimized code for certain
261 cases where built-in operator handles are passed in. Namely, the
262 optimizations concern the operators `plus', `minus', `times',
263 `ldivide', `rdivide', `power', `and', `or' (for logical arrays),
264 the relational operators `eq', `ne', `lt', `le', `gt', `ge', and the
265 functions `min' and `max'. Optimizations only apply when both
266 operands are of the same built-in class. Mixed real/complex and
267 single/double operations will first convert both operands to a
268 common type.
269
270 ** The `strfind' and `strrep' functions now have compiled
271 implementations, facilitating significantly more efficient searching
272 and replacing in strings, especially with longer patterns. The code
273 of `strcat' has been vectorized and is now much more efficient when
274 many strings are concatenated. The `strcmpi' and `strncmpi'
275 functions are now built-in functions, providing better performance.
276
277 ** Matlab-style ignoring input and output function arguments using
278 tilde (~) is now supported. Ignored output arguments may be
279 detected from a function using the built-in function `isargout'.
280 For more details, consult the manual.
281
282 ** The list datatype, deprecated since the introduction of cells, has
283 been removed.
284
285 ** The accumarray function has been optimized and is now significantly
286 faster in certain important cases.
287
288 ** The behavior of isreal and isnumeric functions was changed to be more
289 Matlab-compatible.
290
291 ** The integer math & conversion warnings (Octave:int-convert-nan,
292 Octave:int-convert-non-int-val, Octave:int-convert-overflow,
293 Octave:int-math-overflow) have been removed.
294
295 ** rem and mod are now built-in functions. They also handle integer
296 types efficiently using integer arithmetic.
297
298 ** Sparse indexing and indexed assignment has been mostly rewritten.
299 Since Octave uses compressed column storage for sparse matrices,
300 major attention is devoted to operations manipulating whole columns.
301 Such operations are now significantly faster, as well as some other
302 important cases.
303
304 Further, it is now possible to pre-allocate a sparse matrix and
305 subsequently fill it by assignments, provided they meet certain
306 conditions. For more information, consult the `spalloc' function,
307 which is no longer a mere dummy. Consequently, nzmax and nnz are no
308 longer always equal in Octave. Octave may also produce a matrix
309 with nnz < nzmax as a result of other operations, so you should
310 consistently use nnz unless you really want to use nzmax (i.e. the
311 space allocated for nonzero elements).
312
313 Sparse concatenation is also affected, and concatenating sparse
314 matrices, especially larger collections, is now significantly more
315 efficient. This applies to both the [] operator and the
316 cat/vertcat/horzcat functions.
317
318 ** It is now possible to optionally employ the xGESDD LAPACK drivers
319 for computing the singular value decomposition using svd(), instead
320 of the default xGESVD, using the configuration pseudo-variable
321 svd_driver. The xGESDD driver can be up to 6x times faster when
322 singular vectors are requested, but is reported to be somewhat less
323 robust on highly ill-conditioned matrices.
324
325 ** Configuration pseudo-variables, such as page_screen_output or
326 confirm_recursive_rmdir (or the above mentioned svd_driver), now
327 accept a "local" option as second argument, requesting the change
328 to be undone when the current function returns:
329
330 function [status, msg] = rm_rf (dir)
331 confirm_recursive_rmdir (false, "local");
332 [status, msg] = rmdir (dir, "s");
333 ...
334 endfunction
335
336 Upon return, confirm_recursive_rmdir will be restored to the value
337 it had on entry to the function, even if there were subsequent
338 changes to the variable in function rm_rf or any of the functions
339 it calls.
340
341 ** pkg now accepts a -forge option for downloading and installing
342 packages from Octave Forge automatically. For example,
343
344 pkg install -forge general
345
346 will automatically download the latest release of the general
347 package and attempt to install it. No automatic resolving of
348 dependencies is provided. Further,
349
350 pkg list -forge
351
352 can be used to list all available packages.
353
354 ** The internal data representation of structs has been completely
355 rewritten to make certain optimizations feasible. The field data
356 can now be shared between structs with equal keys but different
357 dimensions or values, making operations that preserve the fields
358 faster. Economized storage is now used for scalar structs (just
359 like most other scalars), making their usage more
360 memory-efficient. Certain array-like operations on structs
361 (concatenation, uniform cellfun, num2cell) have gained a
362 significant speed-up. Additionally, the octave_scalar_map class
363 now provides a simpler interface to work with scalar structs within
364 a C++ DLD function.
365
366 ** Two new formats are available for displaying numbers:
367
368 format short eng
369 format long eng
370
371 Both display numbers in engineering notation, i.e., mantissa +
372 exponent where the exponent is a multiple of 3.
373
374 ** The following functions are new in Octave 3.4:
375
376 accumdim erfcx nfields pqpnonneg uigetdir
377 bitpack fileread nth_element quadcc uigetfile
378 bitunpack fminbnd onCleanup randi uiputfile
379 blkmm fskipl pbaspect repelems uimenu
380 cbrt ifelse pie3 reset whitebg
381 curl ishermitian powerset rsf2csf
382 chop isindex ppder saveas
383 daspect luupdate ppint strread
384 divergence merge ppjumps textread
385
386 ** Using the image function to view images with external programs such
387 as display, xv, and xloadimage is no longer supported. The
388 image_viewer function has also been removed.
389
390 ** The behavior of struct assignments to non-struct values has been
391 changed. Previously, it was possible to overwrite an arbitrary
392 value:
393
394 a = 1;
395 a.x = 2;
396
397 This is no longer possible unless a is an empty matrix or cell
398 array.
399
400 ** The dlmread function has been extended to allow specifying a custom
401 value for empty fields.
402
403 ** The dlmread and dlmwrite functions have been modified to accept
404 file IDs (as returned by fopen) in addition to file names.
405
406 ** Octave can now optimize away the interpreter overhead of an
407 anonymous function handle, if the function simply calls another
408 function or handle with some of its parameters bound to certain
409 values. Example:
410
411 f = @(x) sum (x, 1);
412
413 When f is called, the call is forwarded to @sum with the constant 1
414 appended, and the anonymous function call does not occur on the
415 call stack.
416
417 ** Deprecated functions.
418
419 The following functions were deprecated in Octave 3.0 and have been
420 removed from Octave 3.4.
421
422 beta_cdf geometric_pdf pascal_pdf
423 beta_inv geometric_rnd pascal_rnd
424 beta_pdf hypergeometric_cdf poisson_cdf
425 beta_rnd hypergeometric_inv poisson_inv
426 binomial_cdf hypergeometric_pdf poisson_pdf
427 binomial_inv hypergeometric_rnd poisson_rnd
428 binomial_pdf intersection polyinteg
429 binomial_rnd is_bool setstr
430 chisquare_cdf is_complex struct_contains
431 chisquare_inv is_list struct_elements
432 chisquare_pdf is_matrix t_cdf
433 chisquare_rnd is_scalar t_inv
434 clearplot is_square t_pdf
435 clg is_stream t_rnd
436 com2str is_struct uniform_cdf
437 exponential_cdf is_symmetric uniform_inv
438 exponential_inv is_vector uniform_pdf
439 exponential_pdf isstr uniform_rnd
440 exponential_rnd lognormal_cdf weibcdf
441 f_cdf lognormal_inv weibinv
442 f_inv lognormal_pdf weibpdf
443 f_pdf lognormal_rnd weibrnd
444 f_rnd meshdom weibull_cdf
445 gamma_cdf normal_cdf weibull_inv
446 gamma_inv normal_inv weibull_pdf
447 gamma_pdf normal_pdf weibull_rnd
448 gamma_rnd normal_rnd wiener_rnd
449 geometric_cdf pascal_cdf
450 geometric_inv pascal_inv
451
452 The following functions were deprecated in Octave 3.2 and will
453 be removed from Octave 3.6 (or whatever version is the second major
454 release after 3.2):
455
456 create_set spcholinv splu
457 dmult spcumprod spmax
458 iscommand spcumsum spmin
459 israwcommand spdet spprod
460 lchol spdiag spqr
461 loadimage spfind spsum
462 mark_as_command sphcat spsumsq
463 mark_as_rawcommand spinv spvcat
464 spatan2 spkron str2mat
465 spchol splchol unmark_command
466 spchol2inv split unmark_rawcommand
467
468 The following functions have been deprecated in Octave 3.4 and will
469 be removed from Octave 3.8 (or whatever version is the second major
470 release after 3.4):
471
472 autocor cellidx gammai krylovb values
473 autocov dispatch glpkmex replot
474 betai fstat is_global saveimage
475
476 * For compatibility with Matlab, mu2lin (x) is now equivalent to
477 mu2lin (x, 0).
478
479 * The ARPACK library is now distributed with Octave so it no longer
480 needs to be available as an external dependency when building
481 Octave.
482 </pre>