1 GNU Octave Interval Package 2 Summary of important user-visible changes 3 4Version 3.2.0 2018-07-01 5======================== 6 7 • Fixed a regression where decorated intervals could no longer be 8 used in Octave 4.4 (bug #53331). 9 • intervaltotext: A change in Octave 4.4 has removed the possibility 10 to increase Octave’s output precision beyond 16 decimal digits (bug 11 #53456), which has made it impossible to output intervals with a 12 higher accuracy. The function ‘intervaltotext’ has been 13 reimplemented with several new format options to customize the 14 format and accuracy of the interval literal. All recommended 15 conversion specifiers from IEEE Std 1788-2015 are now supported, 16 e. g., intervals can be printed in uncertain form. 17 • printf, fprintf, sprintf: New functions to produce formatted output 18 with interval literals. 19 • numel: Added support for additional arguments to compute the number 20 of elements after indexing an interval array. This allows combined 21 indexing expressions of the form ‘x(1:2).inf’. 22 • Fixed several warnings during package installation. 23 24Version 3.1.0 2017-12-21 25======================== 26 27This minor release introduces two new functions and fixes severe bugs. 28 29 • mod, rem: Two new interval arithmetic functions to compute the 30 remainder of a floored division or truncated division respectively. 31 32 • plot: Fixed a regression with plotting 2D rectangles in the 33 upcoming Octave 4.4. 34 35 • The internal function ‘__print_mesa__’ for off-screen mesa 36 rendering has been removed, because the upstream mesa project no 37 longer supports off-screen and on-screen rendering in a single 38 executable (Debian bug #877149). It is recommended to use Octave’s 39 ‘print’ function instead, which has greatly been improved in 40 Octave 4.2 regarding the output of rectangles and boxes. 41 42 • A package installation error on 32-bit systems could be fixed 43 (bug #51857). 44 45 • During package installation, FPU control has not be activated on 46 x86-32 platforms. Thus, the crlibm library could not disable 47 80-bit floating-point arithmetic and produced wrong results. This 48 has been detected by the interval package, which fell back on the 49 slower mpfr library instead (Debian bug #874135). After fixing 50 compiler options, x86-32 platforms can now use crlibm 51 correctly—even without 64-bit SSE registers. 52 53 • Source code for interval arithmetic tests from the ITF1788 project 54 have been removed from this package, since the loadable test data 55 ‘itl.mat’ can be edited and processed with Octave easily. If unit 56 test code for other interval arithmetic libraries shall be 57 generated, find the project at <https://github.com/oheim/ITF1788>. 58 59 • Thanks to Olaf Till, this package obtains a configure script (patch 60 #9518). It checks for available libraries during package 61 installation and can help to identify missing dependencies. 62 63Version 3.0.0 2017-08-19 64======================== 65 66This major release introduces support for N-dimensional arrays of 67intervals. With previous versions, interval objects have been limited 68to two dimensions. Only scalar values, vectors, and matrices could be 69created. Now, interval objects can be used with three or more 70dimensions as well. Binary and ternary operations support broadcasting 71of singleton dimensions, which can be expanded to produce higher 72dimensional results. 73 74 Most work for this version has been accomplished by Joel Dahne during 75his Google Summer of Code project. The project involved thorough 76maintenance of all interval functions, which led to improvements and 77bugfixes beyond the original goal. 78 79 • Support for N-dimensional arrays of intervals. 80 81 • Removed interval implementation of ‘meshgrid’, it now falls back on 82 the standard implementation which can output a 3-d grid properly. 83 This no longer automatically converts all input to intervals. For 84 example, it is possible to create a grid for interval X values and 85 non-interval Y values. 86 87 • dot, prod, sum: Altered how empty input is handled. They are more 88 consistent with the standard sum and prod functions (return 89 zero/one for 0×0 input along the first dimension). For the dot 90 function it is slightly different from how the Octave core function 91 handles it at the moment (bug #51333). 92 93 • Output of interval matrices may be customized with ‘format compact’ 94 to display more data per page. 95 96 • nthroot, pownrev: Now supports vectorization of N (for nthroot) and 97 P (for pownrev), broadcasting is fully supported. 98 99 • Indexing expressions on intervals can now use the ‘end’ keyword and 100 the special operator ‘:’ to select all entries. This affects 101 selection of entries and assignment of entries (bug #49592, bug 102 #50626). 103 104 • Adjustments to ITF1788 test suite: 105 • Several further unit tests have been derived from libieeep1788 106 together with the latest version of the interval testing 107 framework. That is, tests with NaN values, NaI values, IEEE 108 1788 exceptions, and tests for the following functions: 109 numsToInterval, textToInterval, intervalPart, newDev, setDec, 110 decorationPart, and reduction operations. 111 • Unit tests have been reorganized: The source code of test 112 cases has been moved to /src/test/. 113 • The test suite is no longer compiled as separate Octave test 114 files (*.tst). Instead, any interval test library files 115 (*.itl) are stored as loadable test data (itl.mat). The test 116 data is then used by built-in self-tests of the functions. 117 This simplifies testing of functions and saves storage space 118 after package installation. For example, ‘test @infsup/plus’ 119 will run any arithmetic tests on the interval plus function. 120 121 • Adjustments to the package documentation: 122 • Information about how to create N-dimensional arrays of 123 intervals. 124 • To improve privacy and page loading times, the package manual 125 no longer uses external references for CSS and web fonts. 126 • The package URL has been updated (after Octave Forge has 127 switched to HTTPS). 128 • HTML fonts have been changed and fallback fonts for Windows 129 have been introduced. 130 • Adjustments to code examples to support the latest versions of 131 the doctest package and symbolic package. 132 133 Bugfixes 134 • Processor support for SSE2 is automatically detected during package 135 installation. This fixes installation problems on devices without 136 SSE2, for example the usual Android phones and tablets (bug 137 #51758). 138 • wid, mig, mag: Fixed wrong return value for NaI (not an interval) 139 values. The functions failed to return NaN (not a number). 140 • diag: With more than one argument the function no longer fails with 141 an error. 142 • dot: Fixed error in identification of dimensions when broadcasting: 143 When the optional dimension argument is missing, the first 144 non-singleton dimension of both arguments is used (before 145 broadcasting applies). 146 • infsupdec: Now creates a warning if the ‘[NaI]’ literal is combined 147 with decoration, e. g. ‘[NaI]_ill’. 148 • infsupdec: No longer produces warnings for mixed parameters with 149 strings and numerics. 150 • verlinineqnn: No longer produces warnings for unverified solutions. 151 • pow: Fixed error when called with vector arguments. The result was 152 only guaranteed to be sharp in the first entry, e. g. ‘pow ([0 0], 153 infsup (0, 1))’ produced the interval [0, 1] for the second entry. 154 • pow2rev: Fixed errors when called with non-scalar arguments in two 155 cases, which could produce wrong results. 156 • ctc_intersect, ctc_union: Fixed runtime errors when the combined 157 contractor function is called with less than two output arguments. 158 • sin: Fixed possible interval representation error, where the upper 159 boundary of the result could become a signed zero (bug #51283). 160 • factorial: Improved result decoration for integer input, since the 161 function is continuous (bug #51783). 162 163Version 2.1.0 2016-12-28 164======================== 165 166 • The speed of some arithmetic operations has been greatly improved. 167 They have previously been computed by multi-precision arithmetic 168 which simulates binary64 floating-point arithmetic (MPFR library). 169 Now, a specialized correctly rounded mathematical library (crlibm) 170 computes identical results 30–100 times faster. There is no 171 accuracy drawback, arithmetic operations will compute tight 172 interval enclosures as before. The following functions benefit 173 from this: acos, asin, atan, cos, cosh, exp, expm1, log, log10, 174 log1p, log2, sin, sinh, tan. 175 176 Bugfixes 177 • Fixed indexing expression in interval constructor for illegal 178 intervals of the form ‘[-inf, -inf]’ or ‘[inf, inf]’ 179 • polyval: Fixed unnecessary warnings when evaluated on empty 180 intervals 181 • Fixed compilation errors on FreeBSD 9.3 182 183Version 2.0.0 2016-11-20 184======================== 185 186This major release contains fundamental changes to the interval 187constructors. After a discussion on the P1788 mailing list, it has been 188revealed that this interval package didn’t implement exceptions from the 189standard for interval arithmetic correctly: Operations from IEEE Std 1901788-2015 which trigger an “exception” shall return a value nonetheless. 191Conformance has been improved in this new version, but may break 192compatibility with previous versions. 193 194 A second big news is that the interval package comprises functions 195from VERSOFT, a verification software package by Jiří Rohn, who has 196generously published his work as free software this year. 197Unfortunately, some of VERSOFT’s functions are encrypted and could not 198be included yet. 199 200 • nai: With additional arguments, matrices of NaI (not an interval) 201 values can be constructed. Previously, NaI has been restricted to 202 be of scalar value. 203 204 • infsup: The bare interval constructor merely triggers a warning 205 instead of an error on illegal input, which creates empty 206 intervals. If input contains legitimate as well as illegal input, 207 only entries with illegal input will carry empty intervals. 208 209 • infsupdec: The decorated interval constructor may create interval 210 matrices which have NaI (not an interval) as entries. If input 211 contains legitimate as well as illegal input, only entries with 212 illegal input will carry NaI values. 213 214 • Warning and error identifiers of the constructors have been 215 revised. 216 217 The warning identifier ‘interval:NaI’ has been removed. Illegal 218 input signals an ‘interval:UndefinedOperation’ warning. If the 219 input is of an illegal data type or of illegal size, the 220 constructors signal an ‘interval:InvalidOperand’ warning. 221 222 The warning identifier ‘interval:PossiblyUndefinedOperation’ has 223 been renamed to ‘interval:PossiblyUndefined’ to better match the 224 wording in the standard document. Also, previous versions failed 225 to trigger this warning in cases where there is a floating point 226 number between boundaries U < L, which has been fixed. 227 228 • It is no longer valid to call ‘infsup (+inf, -inf)’ to create an 229 empty interval and the constructor will signal a warning in these 230 cases. This change has been made to better conform to the 231 ‘numsToInterval’ function from the interval standard. 232 233 You may create empty intervals with either ‘infsup ()’ or 234 ‘infsupdec ()’ or ‘empty ()’. 235 236 • inf, sup: If the input is NaI (not an interval), these functions 237 return NaN (not a number) values instead of an error. 238 239 • Output of intervals in hexadecimal form discriminates between 240 subnormal boundaries and normal boundaries. Subnormal numbers 241 start with “0x0.” whereas normal numbers start with “0x1.”. 242 243 Also, hexadecimal form has been changed to lower case. 244 245 • resize: New interval elements are initialized with zero instead of 246 empty intervals to better match the corresponding Octave function. 247 248 • Interval constructors may broadcast column and row vectors. 249 250 • Performance improvements: factorial on large arguments; plot and 251 plot3 on input that is plotted as a line. 252 253 • New interval functions: tril, triu, qr 254 255 • New functions which have been ported from Jiří Rohn’s VERSOFT: 256 chol, vereigback, vereigvec, verintlinineqs, verinvnonneg, 257 verlinineqnn, verlinprog 258 259 • recip, sqr: The functions have been removed, after they have been 260 deprecated in version 1.4.0. 261 262 • plot3: Fixed plotting with gnuplot and fixed an issue where the 263 figure did not switch from 2D to 3D after plotting. 264 265 • expm1: Fixed documentation, the function computes exp (X) - 1 266 instead of exp (X - 1). 267 268 • norm: Fixed an error where the Hamming norm of empty intervals was 269 non-empty. 270 271Version 1.5.0 2016-05-31 272======================== 273 274 • norm: Added subordinate matrix norms and the max norm 275 • strictsubset: New interval comparison function 276 • Package documentation: Added new example (Cameleon problem), and 277 the growing list of examples has been split into several web pages. 278 • Package documentation: Updated recommendations to install and load 279 the package. The autoload feature will be removed in Octave 4.2.0. 280 (patch #8981, thanks to juanpi) 281 • Support package installation in Octave 4.1.0+ (bug #47288) 282 283Version 1.4.1 2016-02-13 284======================== 285 286 • Fixed a compile error for 32-bit systems during package 287 installation (bug #47100) 288 289Version 1.4.0 2016-02-09 290======================== 291 292 • mpower: Improved accuracy and speed. The interval matrix square 293 can now be computed without dependency errors and with tightest 294 accuracy. 295 • factorial: New interval arithmetic operation 296 • expm, norm: New interval matrix operations 297 • The functions recip and sqr have been deprecated and will be 298 removed in a future release. Please use ‘1 ./ X’ and ‘X .^ 2’ 299 instead. 300 301Bugfixes 302 • bitunpack, interval_bitpack: The order of inf/sup/dec parts has 303 been fixed. The function documentation describes how the functions 304 behave on little-endian and big-endian systems. 305 306Version 1.3.0 2015-12-22 307======================== 308 309 • postpad, prepad, subsasgn: Implicit new elements during subscript 310 assignment and padding have been initialized with empty intervals 311 before this release. This behavior has changed. Now, the implicit 312 new element are initialized with zero to make a correct interval 313 extension of the corresponding built-in function. 314 • fsolve: New function to solve (systems of) equations and compute 315 the inverse of a set under a function 316 • ctc_intersect, ctc_union: Utility functions for contractors and the 317 fsolve function 318 • det, prod, recip: New interval arithmetic functions 319 • diag: New utility function to create diagonal matrices or extract 320 vectors from diagonals of matrices 321 • decorationpart: Choose between different return types with a second 322 parameter 323 • For several functions it is now possible to broadcast row vectors 324 against column vectors or vectors against matrices. 325 • The user manual has been restructured for better accessibility by 326 new users. A bunch of usage examples demonstrates the package’s 327 capabilities. 328 329Bugfixes 330 • sum, sumabs, sumsq: Fixed result for matrices of size zero 331 • powrev1, powrev2: Fixed indexing for vectors 332 333Version 1.2.0 2015-10-01 334======================== 335 336 • The output format for intervals has been changed. The number of 337 decimal places now respects what has been set by the user with the 338 ‘format short’ or ‘format long’ command, and is much shorter by 339 default. Also it is possible to use ‘format hex’. The old format 340 can be accessed with the ‘intervaltotext’ function. 341 • fminsearch: New optimizer function for finding the minimum value of 342 a function over interval constraints using the Skelboe-Moore 343 algorithm 344 • fzero: Changed function parameters to support optimset options 345 • power: Improved speed of the general interval power function and 346 monomials with the notation x .^ n 347 • plot, plot3: Added support for colormaps 348 349Bugfixes 350 • mldivide: Fixed algorithm to handle more matrices without error 351 • bisect: Fixed an error during bisection of singleton intervals 352 (thanks to Helmut for finding this during OctConf 2015) 353 354Version 1.1.0 2015-08-03 355======================== 356 357 • meshgrid, mince: New utility functions to help plotting of interval 358 functions 359 • linspace: New interval arithmetic function 360 • intersect, max, min, union: Allow evaluation as aggregate functions 361 within an interval matrix along a common dimension 362 • Improvements to the documentation 363 • Added cross-references between package documentation and 364 function reference 365 • Extended information about interval arithmetic in general 366 • Extended information about implemented IEEE Std 1788-2015 367 functions and fixed references to the standard document 368 • Added information about plotting intervals 369 • Simplified package description 370 • Graphics with higher resolutions, demo of interval sombrero 371 function plot on first page, and minor style fixes 372 373Bugfixes 374 • plot3: Fixed plotting of interval edges when plotting several 375 intervals at once using matrices 376 377Version 1.0.0 2015-06-13 378======================== 379 380 • IEEE Std 1788-2015, IEEE standard for interval arithmetic, was 381 approved on June 11. To mark the occasion, the major version 382 number has been raised. 383 • All interval constructors have been extended to create interval 384 matrices from a single string. Commas or spaces may be used as a 385 column separator (consecutive separators are trimmed). Semicolon 386 and new line characters can be used as a row separator. 387 • hdist, idist, sdist, smig: New interval numeric functions 388 • User manual: Relicensed under GPL, added examples from the former 389 Octave SIMP package, and various minor improvements. 390 391Bugfixes 392 • mtimes: Fixed matrix-vector multiplication of decorated intervals 393 • Fixed a linking error in mkoctfile that could prevent package 394 installation (bug #45280) 395 396Version 0.2.1 2015-05-30 397======================== 398 399 • plot, plot3: New interval plotting functions. Pay attention to the 400 included examples, which can be executed with ‘demo @infsup/plot’ 401 and ‘demo @infsup/plot3’ respectively. 402 • polyval: New interval arithmetic algorithm 403 • bisect: New set operation for bisecting algorithms 404 • sinrev, cosrev, tanrev, atan2rev1, atan2rev2: Now allow non-scalar 405 arguments 406 • Simplified licensing: Relicensed parts of the software that were 407 not under GPL 408 • Updated information for citation of the package 409 410Bugfixes 411 • Fixed generation of the manual in PDF format 412 • subsasgn: Fixed cases where decoration could be lost (bug #42735) 413 414Version 0.2.0 2015-05-03 415======================== 416 417 • User manual included in the package, see doc/manual.texinfo 418 • New utility functions: cat, postpad, prepad, reshape, resize 419 • and, or: Removed deprecated functions 420 • Improved display output for cell arrays and new function: disp 421 • Minor performance improvements (all decorated interval functions, 422 horzcat, vertcat) 423 424Bugfixes 425 • issquare, isrow, iscolumn: Fixed compatibility issues with GNU 426 Octave 4.0 427 • cbrt: Allow negative values as parameter 428 • cot: Fixed accuracy for x = 0 429 • cos, csc, sec, sin: Fixed correctness in certain cases 430 • Prevent multibyte characters in Microsoft Windows console 431 432Version 0.1.5 2015-04-06 433======================== 434 435 • Implicit decoration of bare intervals triggers a warning now and 436 can be allowed or forbidden by the user. Implicit decoration of 437 bare interval literals is not affected. 438 • newdec: New operation for explicit promotion of bare intervals into 439 decorated intervals (without warning). 440 • Decorated interval literals with illegal decoration are no longer 441 allowed and produce NaIs. 442 • hull: In contrast to the union function, the interval constructor 443 is no longer considered a set operation and can create intervals 444 with a non-trivial decoration. 445 • setdiff, setxor: New set operations 446 • intersect, union: Renamed set operations; the old function names 447 (and, or) are hereby deprecated and are going to be removed in the 448 next release. 449 • intervaltotext, intervaltoexact: Decimal fractions no longer omit 450 zero before the point, and unnecessary trailing decimal places can 451 be omitted more consistently and in more cases than before (also 452 affects console output). Improved accuracy and performance with 453 support for interval matrices. 454 455Bugfixes 456 • mtimes, mldivide: Support for broadcasting of scalar parameters 457 • nextout: Support for decorated intervals 458 • An error in GNU Octave core, which could lead to lost or wrong 459 interval decorations, no longer affects decorated intervals 460 (bug #42735) 461 • Some errors in the function documentation have been fixed (thanks 462 to doctest-for-matlab and Colin’s texinfo compatibility patches) 463 • Fixed interval field access on Windows 464 465Version 0.1.4 2015-03-15 466======================== 467 468 • New interval constructors: hull, midrad 469 • New interval arithmetic functions: cbrt, cot, coth, csc, csch, 470 dilog, ei, erf, erfc, gamma, gammaln, psi, rsqrt, sec, sech 471 • mtimes: Support for fast, less accurate evaluation using BLAS 472 routines 473 • mldivide, mrdivide, inv: Improved performance by using faster 474 mtimes 475 • infsup, infsupdec: Enabled broadcasting of scalar boundaries 476 • rad: May compute mid and rad simultaneously 477 • subsref: Access to interval properties using field syntax: x.inf 478 and x.sup 479 480Version 0.1.3 2015-02-24 481======================== 482 483 • Fixed a compile error that could possibly occur during package 484 installation 485 486Version 0.1.2 2015-02-22 487======================== 488 489 • New interval arithmetic functions: nthroot, hypot, log1p, expm1 490 • lu: New operation for LU(P) decomposition of interval matrices 491 • nai: New decorated interval constant 492 • mldivide, mrdivide, inv: Greatly improved accuracy and performance 493 of the linear solver 494 • Improved accuracy of vector sums, dot products, pownrev, and 495 powrev2 496 • powrev1, powrev2, pownrev, mulrev: Now allow non-scalar arguments 497 • overlap: Renamed one overlapping state from equal to equals 498 • mulrevtopair: No longer available, use mulrev with two output 499 parameters for two-output division 500 • setdec: No longer available, use infsupdec instead 501 • Small performance improvements 502 503Bugfixes 504 • Compatibility with GNU Octave 4.0 (bug #43925) 505 • Build problems during package installation with environment 506 variables 507 • iscommoninterval: The decorated variant must return true for common 508 intervals without com decoration 509 • eq: The decorated variant must not consider the decoration value 510 • Several decorated functions: When evaluated on a subset of the 511 function’s domain, the result’s decoration must be dac if the 512 function’s restriction to that subset is continuous 513 • Decorated boolean functions: Must return false when evaluated on 514 NaI input 515 • Interval constructors: A PossibleUndefined warning must be issued 516 if an interval is created from two very close decimal numbers 517 (which can not be separated in the floating-point context) where 518 the lower boundary is greater than the upper boundary when compared 519 with infinite precision 520 • Interval constructors: NaNs must produce empty intervals 521 • Decorated interval constructor: Illegal decorations for empty 522 intervals must be adjusted to trv, and illegal decoration com for 523 unbounded intervals must be adjusted to dac. 524 • cancelminus/cancelplus: The functions returned wrong results if the 525 interval widths could not be compared in double-precision 526 • cos: Accuracy for x = [0] improved 527 • pow, powrev1, powrev2: The function must be defined for x = 0 and 528 y > 0 529 • All reverse operations: Must return a trivial decoration 530 information at best (the only exception is mulrev) 531 532Version 0.1.1 2015-02-01 533======================== 534 535 • Increased speed of computation for large matrices 536 • Improved performance for fma and dot 537 • mpfr_vector_dot_d: Changed syntax for faster computation on 538 intervals 539 • Decorated versions of mtimes, mldivide, mpower, inv and reduction 540 operations sum, dot, subabs, subsquare 541 • Renamed function sumsquare to sumsq in accordance with GNU Octave 542 function names 543 • New function: fzero for finding all roots of an interval arithmetic 544 function 545 546Bugfixes 547 • nextout: Function returned wrong results 548 • exacttointerval: Now produces bare intervals instead of decorated 549 intervals in conformance with IEEE P1788 550 • atanh: Function returned wrong results for ±1 551 • dot: Function returned wrong results for some inputs 552 • fma: Function returned wrong results for some inputs 553 • infsup: Function returned wrong interval boundaries for decimal 554 numbers, function failed on mixed numerical and string boundaries 555 in single cell array parameter 556 • mulrevtopair: Fixed order of operands in conformance with 557 IEEE P1788 and wrong results when evaluated on intervals that 558 contain zero 559 560Version 0.1.0 2015-01-21 561======================== 562 563 • Initial release version, which already contains all required 564 operations of the preliminary standard document IEEE P1788. 565 566