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