1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602
|
Summary of changes for version 1.1.1:
------------------------------------
* New built-in variables, default_return_value and
define_all_return_values.
If define_all_return_values is set to "false", Octave does not do
anything special for return values that are left undefined, and
you will get an error message if you try to use them. For
example, if the function
function [x, y] = f ()
y = 1;
endfunction
is called as
octave:13> [a, b] = f ()
Octave will print an error message for the attempt to assign an
undefined value to `a'.
This is incompatible with Matlab, which will define the return
variable `x' to be the empty matrix. To get the Matlab-like
behavior, you can set the variable define_all_return_values to
"true" (the default is "false") and default_return_value to `[]'
(the default). Then, any return values that remain undefined when
the function returns will be initialized to `[]'.
If the function is called without explicitly asking for an output,
it will succeed. This behavior is compatible and unchanged from
previous versions of Octave.
* New built-in variable suppress_verbose_help_message. If set to
"true", Octave will not add additional help information to the end
of the output from the help command and usage messages for
built-in commands. The default value is "false".
* New built-in variable PS4 is used as the prefix of echoed input
(enabled with the --echo-input (-x) option).
* The function size() now accepts an optional second argument.
* Output from `save - ...' now goes through the pager.
* The break statement may also be used to exit a function, for
compatibility with Matlab.
* The directory tree for installing Octave is now closer to
conforming with the current GNU standards.
* More bug fixes.
Summary of changes for version 1.1.0:
------------------------------------
* Octave now requires g++ 2.6.3 or later. This change is necessary
to make template instantiations cleaner, and to avoid having to
have special cases in the code for earlier versions of gcc.
* A new data structure type has been added. The implementation uses
an associative array with indices limited to strings, but the
syntax is more like C-style structures. here are some examples of
using it.
Elements of structures can be of any type, including structures:
octave:1> x.a = 1;
octave:2> x.b = [1, 2; 3, 4];
octave:3> x.c = "string";
octave:4> x
x =
<structure: a b c>
octave:5> x.a
x.a = 1
octave:6> x.b
x.b =
1 2
3 4
octave:7> x.c
x.c = string
octave:8> x.b.d = 3
x.b.d = 3
octave:9> x.b
x.b =
<structure: d>
octave:10> x.b.d
x.b.d = 3
Functions can return structures:
octave:1> a = rand (3) + rand (3) * I;
octave:2> function y = f (x)
> y.re = real (x);
> y.im = imag (x);
> endfunction
octave:3> f (a)
ans =
<structure: im re>
octave:4> ans.im
ans.im =
0.093411 0.229690 0.627585
0.415128 0.221706 0.850341
0.894990 0.343265 0.384018
octave:5> ans.re
ans.re =
0.56234 0.14797 0.26416
0.72120 0.62691 0.20910
0.89211 0.25175 0.21081
Return lists can include structure elements:
octave:1> [x.u, x.s, x.v] = svd ([1, 2; 3, 4])
x.u =
-0.40455 -0.91451
-0.91451 0.40455
x.s =
5.46499 0.00000
0.00000 0.36597
x.v =
-0.57605 0.81742
-0.81742 -0.57605
octave:8> x
x =
<structure: s u v>
This feature should be considered experimental, but it seems to
work ok. Suggestions for ways to improve it are welcome.
* Octave now supports a limited form of exception handling modelled
after the unwind-protect form of Lisp:
unwind_protect
BODY
unwind_protect_cleanup
CLEANUP
end_unwind_protect
Where BODY and CLEANUP are both optional and may contain any
Octave expressions or commands. The statements in CLEANUP are
guaranteed to be executed regardless of how control exits BODY.
This is useful to protect temporary changes to global variables
from possible errors. For example, the following code will always
restore the original value of the built-in variable
do_fortran_indexing even if an error occurs while performing the
indexing operation.
save_do_fortran_indexing = do_fortran_indexing;
unwind_protect
do_fortran_indexing = "true";
elt = a (idx)
unwind_protect_cleanup
do_fortran_indexing = save_do_fortran_indexing;
end_unwind_protect
Without unwind_protect, the value of do_fortran_indexing would not
be restored if an error occurs while performing the indexing
operation because evaluation would stop at the point of the error
and the statement to restore the value would not be executed.
* Recursive directory searching has been implemented using Karl
Berry's kpathsea library. Directories below path elements that
end in // are searched recursively for .m files.
* Octave now waits for additional input when a pair of parentheses
is `open' instead of giving an error. This allows one to write
statements like this
if (big_long_variable_name == other_long_variable_name
|| not_so_short_variable_name > 4
&& y > x)
some (code, here);
without having to clutter up the if statement with continuation
characters.
* Continuation lines are now allowed in string constants and are
handled correctly inside matrix constants.
* Both `...{whitespace}\n' and `\{whitespace}\n' can be used to
introduce continuation lines, where {whitespace} may include
spaces, tabs and comemnts.
* The script directory has been split up by topic.
* Dynamic linking mostly works with dld. The following limitations
are known problems:
-- Clearing dynamically linked functions doesn't work.
-- Dynamic linking only works with dld, which has not been ported
to very many systems yet.
-- Configuring with --enable-lite-kernel seems to mostly work to
make nonessential built-in functions dynamically loaded, but
there also seem to be some problems. For example, fsolve seems
to always return info == 3. This is difficult to debug since
gdb won't seem to allow breakpoints to be set inside
dynamically loaded functions.
-- Octave uses a lot of memory if the dynamically linked functions
are compiled with -g. This appears to be a limitation with
dld, and can be avoided by not using -g to compile functions
that will be linked dynamically.
* fft2 and ifft2 are now built-in functions.
* The `&&' and `||' logical operators are now evaluated in a
short-circuit fashion and work differently than the element by
element operators `&' and `|'. See the Octave manual for more
details.
* Expressions like 1./m are now parsed as 1 ./ m, not 1. / m.
* The replot command now takes the same arguments as gplot or
gsplot (except ranges, which cannot be respecified with replot
(yet)) so you can add additional lines to existing plots.
* The hold command has been implemented.
* New function `clearplot' clears the plot window. The name `clg'
is aliased to `clearplot' for compatibility with Matlab.
* The commands `gplot clear' and `gsplot clear' are equivalent to
`clearplot'. (Previously, `gplot clear' would evaluate `clear' as
an ordinary expression and clear all the visible variables.)
* The Matlab-style plotting commands have been improved. They now
accept line-style arguments, multiple x-y pairs, and other plot
option flags. For example,
plot (x, y, "@12", x, y2, x, y3, "4", x, y4, "+")
results in a plot with
y plotted with points of type 2 ("+") and color 1 (red).
y2 plotted with lines.
y3 plotted with lines of color 4.
y4 plotted with points which are "+"s.
the help message for `plot' and `plot_opt' provide full
descriptions of the options.
* NaN is now dropped from plot data, and Inf is converted to a
very large value before calling gnuplot.
* Improved load and save commands:
-- The save and load commands can now read and write a new binary
file format. Conversion to and from IEEE big and little endian
formats is handled automatically. Conversion for other formats
has not yet been implemented.
-- The load command can now read Matlab .mat files, though it is
not yet able to read sparse matrices or handle conversion for
all data formats.
-- The save command can write Matlab .mat files.
-- The load command automatically determines the save format
(binary, ascii, or Matlab binary).
-- The default format for the save command is taken from the
built-in variable `default_save_format'.
-- The save and load commands now both accept a list of globbing
patterns so you can easily load a list of variables from a
file.
-- The load command now accepts the option -list, for listing the
variable names without actually loading the data. With
-verbose, it prints a long listing.
-- The load command now accepts the option -float-binary, for
saving floating point data in binary files in single precision.
* who and whos now accept a list of globbing patterns so you can
limit the lists of variables and functions to those that match a
given set of patterns.
* New functions for manipulating polynomials
compan -- companion matrix corresponding to polynomial coefficients
conv -- convolve two vectors
deconv -- deconvolve two vectors
roots -- find the roots of a polynomial
poly -- characteristic polynomial of a matrix
polyderiv -- differentiate a polynomial
polyinteg -- integrate a polynomial
polyreduce -- reduce a polynomial to minimum number of terms
polyval -- evaluate a polynomial at a point
polyvalm -- evaluate a polynomial in the matrix sense
residue -- partial fraction expansion corresponding to the ratio
of two polynomials
* New functions for manipulating sets
create_set -- create a set of unique values
complement -- find the complement of two sets
intersection -- find the intersection of two sets
union -- find the union of two sets
* New elementary functions:
acot acoth acsc acsch
asec asech cot coth
csc csch log2 sec
sech
* New special functions:
beta -- beta function
betai -- incomplete beta function
gammai -- incomplete gamma function
* New image processing functions:
colormap -- set and return current colormap
gray -- set a gray colormap
gray2ind -- image format conversion
image -- display an image
imagesc -- scale and display an image
imshow -- display images
ind2gray -- image format conversion
ind2rgb -- image format conversion
loadimage -- load an image from a file
ntsc2rgb -- image format conversion
ocean -- set a color colormap
rgb2ind -- image format conversion
rgb2ntsc -- image format conversion
saveimage -- save an image to a file
* New time and date funcitons:
tic -- set wall-clock timer
toc -- get elapsed wall-clock time, since timer last set
etime -- another way to get elapsed wall-clock time
cputime -- get CPU time used since Octave started
is_leap_year -- is the given year a leap year?
* Other new functions:
bug_report -- submit a bug report to the bug-octave mailing list
toascii -- convert a string to a matrix of ASCII character codes
octave_tmp_file -- generate a unique temporary file name
undo_string_escapes -- replace special characters in a string by
their backslash forms
is_struct -- determine whether something is a structure data type
feof -- check EOF condition for a specified file
ferror -- check error state for a specified file
fread -- read binary data from a file
fwrite -- write binary data to a file
file_in_path -- check to see if named file exists in given path
kbhit -- get a single character from the terminal
axis -- change plot ranges
hist -- plot histograms
diary -- save commands and output to a file
type -- show the definition of a function
which -- print the type of an identifier or the location of a
function file
isieee -- Returns 1 if host uses IEEE floating point
realmax -- Returns largest floating point number
realmin -- Returns smallest floating point number
gcd -- greatest common divisor
lcm -- least common multiple
null -- orthonormal basis of the null space of a matrix
orth -- orthonormal basis of the range space of a matrix
fft2 -- two-dimensional fast fourier transform
ifft2 -- two-dimensional inverse fast fourier transform
filter -- digital filter
fftfilt -- filter using fft
fftconv -- convolve to vectors using fft
sinc -- returns sin(pi*x)/(pi*x)
freqz -- compute the frequency response of a filter
* The meaning of nargin (== args.length ()) in built-in functions
has been changed to match the meaning of nargin in user-defined
functions.
* Variable return lists. Octave now has a real mechanism for
handling functions that return an unspecified number of values,
so it is no longer necessary to place an upper bound on the number
of outputs that a function can produce.
Here is an example of a function that uses the new syntax to
produce n values:
function [...] = foo (n)
for i = 1:n
vr_val (i * x);
endfor
endfunction
* New keyword, all_va_args, that allows the entire list of va_args
to be passed to another function. For example, given the functions
function f (...)
while (nargin--)
disp (va_arg ())
endwhile
endfunction
function g (...)
f ("begin", all_va_args, "end")
endfunction
the statement
g (1, 2, 3)
prints
begin
1
2
3
end
all_va_args may be used more than once, but can only be used
within functions that take a variable number of arguments.
* If given a second argument, svd now returns an economy-sized
decomposition, eliminating the unecessary rows or columns of U or
V.
* The max and min functions correctly handle complex matrices in
which some columns contain real values only.
* The find function now handles 2 and 3 output arguments.
* The qr function now allows computation of QR with pivoting.
* hilb() is much faster for large matrices.
* computer() is now a built-in function.
* pinv() is now a built-in function.
* The output from the history command now goes through the pager.
* If a function is called without assigning the result, nargout is
now correctly set to 0.
* It is now possible to write functions that only set some return
values. For example, calling the function
function [x, y, z] = f () x = 1; z = 2; endfunction
as
[a, b, c] = f ()
produces:
a = 1
b = [](0x0)
c = 2
* The shell_cmd function has been renamed to system (the name
shell_cmd remains for compatibility). It now returns [output, status].
* New built-in variable `OCTAVE_VERSION'. Also a new function,
version, for compatibility with Matlab.
* New built-in variable `automatic_replot'. If it is "true", Octave
will automatically send a replot command to gnuplot each time the
plot changes. Since this is fairly inefficient, the default value
is "false".
* New built-in variable `whitespace_in_literal_matrix' allows some
control over how Octave decides to convert spaces to commas in
matrix expressions like `[m (1)]'.
If the value of `whitespace_in_literal_matrix' is "ignore", Octave
will never insert a comma or a semicolon in a literal matrix list.
For example, the expression `[1 2]' will result in an error
instead of being treated the same as `[1, 2]', and the expression
[ 1, 2,
3, 4 ]
will result in the vector [1 2 3 4] instead of a matrix.
If the value of `whitespace_in_literal_matrix' is "traditional",
Octave will convert spaces to a comma between identifiers and `('.
For example, given the matrix
m = [3 2]
the expression
[m (1)]
will be parsed as
[m, (1)]
and will result in
[3 2 1]
and the expression
[ 1, 2,
3, 4 ]
will result in a matrix because the newline character is converted
to a semicolon (row separator) even though there is a comma at the
end of the first line (trailing commas or semicolons are ignored).
This is apparently how Matlab behaves.
Any other value for `whitespace_in_literal_matrix' results in
behavior that is the same as traditional, except that Octave does
not convert spaces to a comma between identifiers and `('.
For example, the expression
[m (1)]
will produce 3. This is the way Octave has always behaved.
* Line numbers in error messages for functions defined in files and
for script files now correspond to the file line number, not the
number of lines after the function keyword appeared.
* Octave now extracts help from script files. The comments must
come before any other statements in the file.
* In function files, the first block of comments in the file will
now be interpreted as the help text if it doesn't look like the
Octave copyright notice. Otherwise, Octave extracts the first set
of comments after the function keyword.
* The function clock is more accurate on systems that have the
gettimeofday() function.
* The standard output stream is now automatically flushed before
reading from stdin with any of the *scanf() functions.
* Expanded reference card.
* The Octave distribution now includes a frequently asked questions
file, with answers. Better answers and more questions (with
answers!) are welcome.
* New option --verbose. If Octave is invoked with --verbose and not
--silent, a message is printed if an octaverc file is read while
Octave is starting.
* An improved configure script generated by Autoconf 2.0.
* Lots of bug fixes.
Summary of changes for version 1.0:
----------------------------------
* C-style I/O functions now handle files referenced by name or by
number more consistently.
Summary of changes for version 0.83:
-----------------------------------
* Loading global symbols should work now.
* Clearing the screen doesn't reprint the prompt unnecessarily.
* The operations <complex scalar> OP <real matrix> for OP == +, -,
*, or ./ no longer crash Octave.
* More portability and configuration fixes.
Summary of changes for version 0.82:
-----------------------------------
* Octave now comes with a reference card.
* The manual has been improved, but more work remains to be done.
* The atanh function now works for complex arguments.
* The asin, acos, acosh, and atanh functions now work properly when
given real-valued arguments that produce complex results.
* SEEK_SET, SEEK_CUR, and SEEK_END are now constants.
* The `using' qualifier now works with gplot and gsplot when the
data to plot is coming directly from a file.
* The strcmp function now works correctly for empty strings.
* Eliminated bogus parse error for M-files that don't end with `end'
or `endfunction'.
* For empty matrices with one nonzero dimension, the +, -, .*, and
./ operators now correctly preserve the dimension.
* Octave no longer crashes if you type ^D at the beginning of a line
in the middle of defining a loop or if statement.
* On AIX systems, Back off on indexing DiagArray via Proxy class to
avoid gcc (or possibly AIX assembler?) bug.
* Various other bug and portability fixes.
Summary of changes for version 0.81:
-----------------------------------
* Octave no longer dumps core if you try to define a function in
your .octaverc file.
* Fixed bug in Array class that resulted in bogus off-diagonal
elements when computing eigenvalue and singular value
decompositions.
* Fixed bug that prevented lsode from working on the SPARCstation,
at least with some versions of Sun's f77. This bug was introduced
in 0.80, when I changed LSODE to allow the user to abort the
integration from within the RHS function.
* Fixed bug that prevented global attribute of variables from being
saved with save(), and another that prevented load() from working
at all.
Summary of changes for version 0.80:
-----------------------------------
* I have started working on a manual for the C++ classes. At this
point, it is little more than a list of function names. If you
would like to volunteer to help work on this, please contact
bug-octave@bevo.che.wisc.edu.
* The patterns accepted by the save and clear commands now work like
file name globbing patterns instead of regular expressions. I
apologize for any inconvenience this change may cause, but file
name globbing seems like a more reasonable style of pattern
matching for this purpose.
* It is now possible to specify tolerances and other optional inputs
for dassl, fsolve, lsode, npsol, qpsol, and quad. For each of
these functions, there is a corresponding function X_options,
which takes a keyword and value arguments. If invoked without any
arguments, the X_options functions print a list of possible
keywords and current values. For example,
npsol_options ()
prints a list of possible options with values, and
npsol_options ("major print level", 10)
sets the major print level to 10.
The keyword match is not case sensitive, and the keywords may be
abbreviated to the shortest unique match. For example,
npsol_options ("ma p", 10)
is equivalent to the statement shown above.
* The new built-in variable save_precision can be used to set the
number of digits preserved by the ASCII save command.
* Assignment of [] now works in most cases to allow you to delete
rows or columns of matrices and vectors. For example, given a
4x5 matrix A, the assignment
A (3, :) = []
deletes the third row of A, and the assignment
A (:, 1:2:5) = []
deletes the first, third, and fifth columns.
* Variable argument lists. Octave now has a real mechanism for
handling functions that take an unspecified number of arguments,
so it is no longer necessary to place an upper bound on the number
of optional arguments that a function can accept.
Here is an example of a function that uses the new syntax to print
a header followed by an unspecified number of values:
function foo (heading, ...)
disp (heading);
va_start ();
while (--nargin)
disp (va_arg ());
endwhile
endfunction
Note that the argument list must contain at least one named
argument (this restriction may eventually be removed), and the
ellipsis must appear as the last element of the argument list.
Calling va_start() positions an internal pointer to the first
unnamed argument and allows you to cycle through the arguments
more than once. It is not necessary to call va_start() if you
do not plan to cycle through the arguments more than once.
* Recursive functions should work now.
* The environment variable OCTAVE_PATH is now handled in the same
way as TeX handles TEXINPUTS. If the path starts with `:', the
standard path is prepended to the value obtained from the
environment. If it ends with `:' the standard path is appended to
the value obtained from the environment.
* New functions, from Kurt Hornik (hornik@neuro.tuwien.ac.at) and
the Department of Probability Theory and Statistics TU Wien,
Austria:
corrcoef -- corrcoef (X, Y) is the correlation between the i-th
variable in X and the j-th variable in Y
corrcoef (X) is corrcoef (X, X)
cov -- cov (X, Y) is the covariance between the i-th
variable in X and the j-th variable in Y
cov (X) is cov (X, X)
gls -- generalized least squares estimation
kurtosis -- kurtosis(x) = N^(-1) std(x)^(-4) SUM_i (x(i)-mean(x))^4 - 3
If x is a matrix, return the row vector containing
the kurtosis of each column
mahalanobis -- returns Mahalanobis' D-square distance between the
multivariate samples X and Y, which must have the
same number of components (columns), but may have
a different number of observations (rows)
ols -- ordinary least squares estimation
pinv -- returns the pseudoinverse of X; singular values
less than tol are ignored
skewness -- skewness (x) = N^(-1) std(x)^(-3) SUM_i (x(i)-mean(x))^3
if x is a matrix, return the row vector containing
the skewness of each column
* Errors in user-supplied functions called from dassl, fsolve,
lsode, npsol, and quad are handled more gracefully.
* Programming errors in the use of the C++ classes within Octave
should no longer cause Octave to abort. Instead, Octave's error
handler function is called and execution continues as best as is
possible. This should result in eventually returning control to
the top-level Octave prompt. (It would be nice to have a real
exception handling mechanism...)
* A number of memory leaks have been eliminated. Thanks to
Fong Kin Fui <fui@ee.nus.sg> for reporting them.
* The C++ matrix classes are now derived from a generic
template-based array class.
* The readline function operate-and-get-next (from bash) is now
available and bound to C-O by default.
* Octave now uses the version of readline currently distributed with
bash-1.13. On some systems, interactive invocations of Octave
will now blink the cursor to show matching parens.
* By default, include files are now installed in
$prefix/include/octave instead of $prefix/include.
* Octave now uses a config.h file instead of putting all defines on
the compiler command line.
Summary of changes for version 0.79:
-----------------------------------
* New control systems functions:
dgram -- Returns the discrete controllability and observability gramian.
dlqr -- Discrete linear quadratic regulator design.
dlqe -- Discrete linear quadratic estimator (Kalman Filter) design.
c2d -- Convert continuous system description to discrete time
description assuming zero-order hold and given sample time.
* The max (min) functions can now return the index of the max (min)
value as a second return value.
Summary of changes for version 0.78:
-----------------------------------
* Octave's handling of global variables has been completely
rewritten. To access global variables inside a function, you must
now declare them to be global within the function body. Likewise,
if you do not declare a variable as global at the command line,
you will not have access to it within a function, even if it is
declared global there. For example, given the function
function f ()
global x = 1;
y = 2;
endfunction
the global variable `x' is not visible at the top level until the
command
octave:13> global x
has been evaluated, and the variable `y' remains local to the
function f() even if it is declared global at the top level.
Clearing a global variable at the top level will remove its global
scope and leave it undefined. For example,
octave:1> function f () # Define a function that accesses
> global x; # the global variable `x'.
> x
> endfunction
octave:2> global x = 1 # Give the variable `x' a value.
octave:3> f () # Evaluating the function accesses the
x = 1 # global `x'.
octave:4> clear x # Remove `x' from global scope, clear value.
octave:5> x = 2 # Define new local `x' at the top level
x = 2
octave:6> f # The global `x' is no longer defined.
error: `x' undefined near line 1 column 25
error: evaluating expression near line 1, column 25
error: called from `f'
octave:7> x # But the local one is.
x = 2
* The new function, `is_global (string)' returns 1 if the variable
named by string is globally visible. Otherwise, returns 0.
* The implementation of `who' has changed. It now accepts the
following options:
-b -builtins -- display info for built-in variables and functions
-f -functions -- display info for currently compiled functions
-v -variables -- display info for user variables
-l -long -- display long info
The long output looks like this:
octave:5> who -l
*** currently compiled functions:
prot type rows cols name
==== ==== ==== ==== ====
wd user function - - f
*** local user variables:
prot type rows cols name
==== ==== ==== ==== ====
wd real scalar 1 1 y
*** globally visible user variables:
prot type rows cols name
==== ==== ==== ==== ====
wd complex matrix 13 13 x
where the first character of the `protection' field is `w' if the
symbol can be redefined, and `-' if it has read-only access. The
second character may be `d' if the symbol can be deleted, or `-'
if the symbol cannot be cleared.
* The new built-in variable ignore_function_time_stamp can be used
to prevent Octave from calling stat() each time it looks up
functions defined in M-files. If set to "system", Octave will not
automatically recompile M-files in subdirectories of
$OCTAVE_HOME/lib/VERSION if they have changed since they were last
compiled, but will recompile other M-files in the LOADPATH if they
change. If set to "all", Octave will not recompile any M-files
unless their definitions are removed with clear. For any other
value of ignore_function_time_stamp, Octave will always check to
see if functions defined in M-files need to recompiled. The
default value of ignore_function_time_stamp is "system".
* The new built-in variable EDITOR can be used to specify the editor
for the edit_history command. It is set to the value of the
environment variable EDITOR, or `vi' if EDITOR is not set, or is
empty.
* There is a new built-in variable, INFO_FILE, which is used as the
location of the info file. Its initial value is
$OCTAVE_HOME/info/octave.info, so `help -i' should now work
provided that OCTAVE_HOME is set correctly, even if Octave is
installed in a directory different from that specified at compile
time.
* There is a new command line option, --info-file FILE, that may be
used to set Octave's idea of the location of the info file. It
will override any value of OCTAVE_INFO_FILE found in the
environment, but not any INFO_FILE="filename" commands found in
the system or user startup files.
* Octave's Info reader will now recognize gzipped files that have
names ending in `.gz'.
* The save command now accepts regular expressions as arguments.
Note that these patterns are regular expressions, and do not work
like filename globbing. For example, given the variables `a',
`aa', and `a1', the command `save a*' saves `a' and `aa' but not
`a1'. To match all variables beginning with `a', you must use an
expression like `a.*' (match all sequences beginning with `a'
followed by zero or more characters).
* Line and column information is included in more error messages.
Summary of changes for version 0.77:
-----------------------------------
* Improved help. The command `help -i topic' now uses the GNU Info
browser to display help for the given topic directly from the
Texinfo documenation.
* New function: chol -- Cholesky factorization.
Summary of changes for version 0.76:
-----------------------------------
* Better run-time error messages. Many now include line and column
information indicating where the error occurred. Octave will also
print a traceback for errors occurring inside functions. If you
find error messages that could use improvement, or errors that
Octave fails to catch, please send a bug report to
bug-octave@bevo.che.wisc.edu.
* If gplot (or gsplot) is given a string to plot, and the string
does not name a file, Octave will pass the string along to gnuplot
directly. This allows commands like
gplot "sin (x)" w l, data w p
to work (assuming that data is a variable containing a matrix of
values).
* Long options (--help, --version, etc.) are supported.
Summary of changes for version 0.75:
-----------------------------------
* The documentation is much more complete, but still could use a lot
of work.
* The history function now prints line numbers by default. The
command `history -q' will omit them.
* The clear function now accepts regular expressions.
* If gplot (or gsplot) is given a string to plot, and the string
names a file, Octave attempts to plot the contents of the file.
* New functions:
history:
run_history -- run commands from the history list.
edit_history -- edit commands from the history list with your
favorite editor.
linear algebra:
balance -- Balancing for algebraic and generalized
eigenvalue problems.
givens -- Givens rotation.
is_square -- Check to see if a matrix is square.
qzhess -- QZ decomposition of the matrix pencil (a - lambda b).
qzval -- Generalized eigenvalues for real matrices.
syl -- Sylvester equation solver.
control systems:
is_symmetric -- Check to see if a matrix is symmetric.
abcddim -- Check dimensions of linear dynamic system [A,B,C,D].
is_controllable -- Check to see if [A,B,C,D] is controllable.
is_observable -- Check to see if [A,B,C,D] is observable.
are -- Solve algebraic Ricatti equation.
dare -- Solve discrete-time algebraic Ricatti equation.
lqe -- Kalman filter design for continuous linear system.
lqr -- Linear Quadratic Regulator design.
lyap -- Solve Lyapunov equation.
dlyap -- Solve discrete Lyapunov equation.
tzero -- Compute the transmission zeros of [A,B,C,D].
Summary of changes for version 0.74:
-----------------------------------
* Formal parameters to functions are now always considered to be
local variables, so things like
global x = 0
global y = 0
function y = f (x) x = 1; y = x; end
f (x)
result in the function returning 1, with the global values of x
and y unchanged.
* Multiple assignment expressions are now allowed to take indices,
so things like
octave:13> [a([1,2],[3,4]), b([5,6],[7,8])] = lu ([1,2;3,4])
will work correctly.
Summary of changes for version 0.73:
-----------------------------------
* Saving and loading global variables works correctly now.
* The save command no longer saves built-in variables.
* Global variables are more reliable.
* Matrices may now have one or both dimensions zero, so that
operations on empty matrices are now handled more consistently.
By default, dimensions of the empty matrix are now printed along
with the empty matrix symbol, `[]'. For example:
octave:13> zeros (3, 0)
ans =
[](3x0)
The new variable `print_empty_dimensions' controls this behavior.
See also Carl de Boor, An Empty Exercise, SIGNUM, Volume 25,
pages 2--6, 1990, or C. N. Nett and W. M. Haddad, A
System-Theoretic Appropriate Realization of the Empty Matrix
Concept, IEEE Transactions on Automatic Control, Volume 38,
Number 5, May 1993.
* The right and left division operators `/' and `\' will now find a
minimum norm solution if the system is not square, or if the
coefficient matrix is singular.
* New functions:
hess -- Hessenberg decomposition
schur -- Ordered Schur factorization
perror -- print error messages corresponding to error codes
returned from the functions fsolve, npsol, and qpsol
(with others to possibly be added later).
* Octave now prints a warning if it finds anything other than
whitespace or comments after the final `end' or `endfunction'
statement.
* The bodies of functions, and the for, while, and if commands are
now allowed to be empty.
* Support for Gill and Murray's QPSOL has been added. Like NPSOL,
QPSOL is not freely redistributable either, so you must obtain
your own copy to be able to use this feature. More information
about where to find QPSOL and NPSOL are in the file README.NLP.
Summary of changes for version 0.72:
-----------------------------------
* For numeric output, columns are now lined up on the decimal point.
(This requires libg++-2.3.1 or later to work correctly).
* If octave is running interactively and the output intended for the
screen is longer than one page and a pager is available, it is
sent to the pager through a pipe. You may specify the program to
use as the pager by setting the variable PAGER. PAGER may also
specify a command pipeline.
* Spaces are not always significant inside square brackets now, so
commands like
[ linspace (1, 2) ]
will work. However, some possible sources of confusion remain
because Octave tries (possibly too hard) to determine exactly what
operation is intended from the context surrounding an operator.
For example:
-- In the command
[ 1 - 1 ]
the `-' is treated as a binary operator and the result is the
scalar 0, but in the command
[ 1 -1 ]
the `-' is treated as a unary operator and the result is the
vector [ 1 -1 ].
-- In the command
a = 1; [ 1 a' ]
the single quote character `'' is treated as a transpose operator
and the result is the vector [ 1 1 ], but in the command
a = 1; [ 1 a ' ]
an error message indicating an unterminated string constant is
printed.
* Assignments are just expressions now, so they are valid anywhere
other expressions are. This means that things like
if (a = n < m) ... endif
are valid. This is parsed as: compare `n < m', assign the result
to the variable `a', and use it as the test expression in the if
statement.
To help avoid errors where `=' has been used but `==' was
intended, Octave issues a warning suggesting parenthesis around
assignments used as truth values. You can suppress this warning
by adding parenthesis, or by setting the value of the new built-in
variable `warn_assign_as_truth_value' to 'false' (the default
value is 'true').
This is also true for multiple assignments, so expressions like
[a, b, c] = [u, s, v] = expression
are now possible. If the expression is a function, nargout is set
to the number of arguments for the right-most assignment. The
other assignments need not contain the same number of elements.
Extra left hand side variables in an assignment become undefined.
* The default line style for plots is now `lines' instead of
`points'. To change it, use the `set data style STYLE' command.
* New file handling and I/O functions:
fopen -- open a file for reading or writing
fclose -- close a file
fflush -- flush output to a file
fgets -- read characters from a file
frewind -- set file position to the beginning of a file
fseek -- set file position
ftell -- tell file position
freport -- print a report for all open files
fscanf -- read from a file
sscanf -- read from a string
scanf -- read from the standard input
* New built-in variables for file and I/O functions:
stdin -- file number corresponding to the standard input stream.
stdout -- file number corresponding to the standard output stream.
stderr -- file number corresponding to the standard error stream.
The following may be used as the final (optional) argument for
fseek:
SEEK_SET -- set position relative to the beginning of the file.
SEEK_CUR -- set position relative to the current position.
SEEK_END -- set position relative to the end of the file.
* New function: setstr -- convert vectors or scalars to strings
(doesn't work for matrices yet).
* If possible, computer now prints the system type instead of
always printing `Hi Dave, I'm a HAL-9000'.
* Octave now properly saves and restores its internal state
correctly in more places. Interrupting Octave while it is
executing a script file no longer causes it to exit.
* Octave now does tilde expansion on each element of the LOADPATH.
* A number of memory leaks have been plugged.
* Dependencies for C++ source files are now generated automatically
by g++.
* There is a new command line option, -p PATH, that may be used to
set Octave's loadpath from the command line. It will override any
value of OCTAVE_PATH found in the environment, but not any
LOADPATH="path" commands found in the system or user startup files.
* It is now possible to override Octave's default idea of the
location of the system-wide startup file (usually stored in
$(prefix)/lib/octave/octaverc) using the environment variable
OCTAVE_HOME. If OCTAVE_HOME has a value, Octave will look for
octaverc and its M-files in the directory $OCTAVE_HOME/lib/octave.
This allows people who are using binary distributions (as is
common with systems like Linux) to install the real octave binary
in any directory (using a name like octave.bin) and then install
a simple script like this
#!/bin/sh
OCTAVE_HOME=/foo/bar/baz
export OCTAVE_HOME
exec octave.bin
to be invoked as octave.
Summary of changes for version 0.71:
-----------------------------------
* Much improved plotting facility. With this release, Octave does
not require a specially modified version of gnuplot, so gnuplot
sources are no longer distributed with Octave. For a more
detailed description of the new plotting features, see the file
PLOTTING.
* New plotting commands:
plot -- 2D plots
semilogx -- 2D semilog plot with logscale on the x axis
semilogy -- 2D semilog plot with logscale on the y axis
loglog -- 2D log-log plot
mesh -- 3D mesh plot
meshdom -- create matrices for 3D plotting from two vectors
contour -- contour plots of 3D data
bar -- create bar graphs
stairs -- create stairstep plots
polar -- 2D plots from theta-R data
grid -- turn plot grid lines on or off
xlabel, ylabel -- place labels on the x and y axes of 2D plots
sombrero -- demonstrate 3D plotting
gplot -- 2D plot command with gnuplot-like syntax
gsplot -- 3D plot command with gnuplot-like syntax
set -- set plot options with gnuplot syntax
show -- show plot options with gnuplot syntax
closeplot -- close stream to gnuplot process
purge_tmp_files -- delete temporary files created by plot command
* Other new commands:
ls, dir -- print a directory listing
shell_cmd -- execute shell commands
keyboard -- get input from keyboard, useful for debugging
menu -- display a menu of options and ask for input
fft -- fast fourier transform
ifft -- inverse fast fourier transform
* Strings may be enclosed in either single or double quote
characters. Double quote characters are not special within single
quote strings, and single quotes are not special within double
quote strings.
* Command name completion now works for M-file names too.
* Better help and usage messages for many functions.
* Help is now available for functions defined in M-files. The first
block of comments is taken as the text of the help message.
* Numerous changes in preparation to support dynamic loading of
object files with dld.
* Bug fixes to make solving DAEs with dassl actually work.
* The command `save file' now saves all variables in the named file.
* If do_fortran_indexing is 'true', indexing a scalar with
[1,1,1,...] (n times) replicates its value n times. The
orientation of the resulting vector depends on the value of
prefer_column_vectors.
* Things like [[1,2][3,4]] no longer cause core dumps, and invalid
input like [1,2;3,4,[5,6]] now produces a diagnositic message.
* The cd, save, and load commands now do tilde expansion.
* It's now possible to clear global variables and functions by name.
* Use of clear inside functions is now a parse error.
Summary of changes for version 0.70:
-----------------------------------
* Better parse error diagnostics. For interactive input, you get
messages like
octave:1> a = 3 + * 4;
parse error:
a = 3 + * 4;
^
and for script files, the message includes the file name and input
line number:
octave:1> foo
parse error near line 4 of file foo.m:
a = 3 + * 4;
^
* New built-in variable PS2 which is used as the secondary prompt.
The default value is '> '.
* New file, octave-mode.el, for editing Octave code with GNU Emacs.
This is a modified version of Matthew R. Wette's matlab-mode.el.
* Better support for missing math functions.
* User preferences are now cached in a global struct so we don't
have to do a symbol table lookup each time we need to know what
they are. This should mean slightly improved performance for
evaluating expressions.
Summary of changes for version 0.69:
-----------------------------------
* Multiple assignments are now possible, so statements like
a = b = c = 3;
a = b = c = [1,2;3,4];
or
c = (a = (b = 2) * 3 + 4) * 5
are legal, as are things that have even more bizarre effects, like
a(4:6,4:6) = b(2:3,2:3) = [1,2;3,4];
(try it).
* Improved parsing of strings (but they still don't work as matrix
elements).
* An M-file may now either define a function or be a list of
commands to execute.
* Better detection and conditional compilation of IEEE functions
isinf, finite, and isnan.
* Replacements for acosh, asinh, atanh, and gamma from the BSD math
library for those systems that don't have them.
Summary of changes for version 0.68:
-----------------------------------
* New functions:
eval -- evaluate a string as a sequence of Octave commands.
input -- print a prompt and get user input.
Summary of changes for version 0.67:
-----------------------------------
* New functions:
find -- return the indices of nonzero elements.
* Zero-one style indexing now works. For example,
a = [1,2,3,4];
b = a([1,0,0,1])
sets b to the first and fourth elememnts of a.
Zero-one style indexing also works for indexing the left hand side
of an assignment. For example,
a = rand (1,2;3,4);
a([0,1],:) = [-1,-2]
sets the second row of a to [-1 -2]
The behavior for the ambiguous case
a = [1,2,3,4];
b = a([1,1,1,1]);
is controlled by the new global variable `prefer_zero_one_indexing'.
If this variable is equal to 'true', b will be set to [1 2 3 4].
If it is false, b will be set to [1 1 1 1]. The default value is
'false'.
* Using the new global variable `propagate_empty_matrices', it is
possible to have unary andy binary operations on empty matrices
return an empty matrix. The default value of this variable is
'warn', so that empty matrices are propagated but you get a
warning. Some functions, like eig and svd have also been changed
to handle this.
* Empty matrices can be used in conditionals, but they always
evaluate to `false'. With propagate_empty_matrices = 'true', both
of the following expressions print 0:
if [], 1, else 0, end
if ~[], 1, else 0, end
* Octave no longer converts input like `3.2 i' or `3 I' to complex
constants directly because that causes problems inside square
brackets, where spaces are important. This abbreviated notation
*does* work if there isn't a space between the number and the i,
I, j, or J.
Summary of changes for version 0.66:
-----------------------------------
* Logical unary not operator (~ or !) now works for complex.
* Left division works.
* Right and left element by element division should work correctly
now.
* Numbers like .3e+2 are no longer errors.
* Indexing a matrix with a complex value doesn't cause a core dump.
* The min and max functions should work correctly for two arguments.
* Improved (I hope!) configuration checks.
* Octave is now installed as octave-M.N, where M and N are version
numbers, and octave is a link to that file. This makes it
possible to have more than one version of the interpreter installed.
Summary of changes for version 0.63:
-----------------------------------
* The reshape function works again.
* Octave now converts input like `3.2i' or `3 I' or `2.3e5 j' to be
complex constants directly, rather than requiring an expression
like `3.3 * i' to be evaluated.
Summary of changes for version 0.61:
-----------------------------------
* Octave has been successfully compiled using gcc 2.3.3 and libg++ 2.3.
on a 486 system running Linux.
* The win_texas_lotto function is now called texas_lotto (it's a
script file, and win_texas_lotto.m is too long for some Linux and
System V systems).
Summary of changes for version 0.57:
------------------------------------
* The C-like formatted print functions printf, fprintf, and sprintf
finally work.
Summary of changes for version 0.56:
------------------------------------
* By default, octave prints a short disclaimer when it starts.
(You can suppress it by invoking octave with -q).
* You can keep octave from reading your ~/.octaverc and .octaverc
files by invoking it with -f.
* When returning two values, eig now returns [v, d] instead of
[lambda, v], where d is a diagonal matrix made from lambda.
* The win_texas_lotto function now produces a sorted list.
* New functions:
expm -- matrix exponential.
logm -- matrix logarithm.
Summary of changes for version 0.55:
------------------------------------
* The following (C-style) backslash escape sequences work in quoted
strings (useful(?) with printf()):
\a bell \r carriage return
\b backspace \t horizontal tab
\f formfeed \v vertical tab
\n newline \\ backslash
* Use of `...' at the end of a line will allow a statement to
continue over more than one line.
* The names `inf' and `nan' are now aliases for `Inf' and `NaN',
respectively.
* New functions:
casesen -- print a warning if the luser tries to turn off case
sensitivity.
median -- find median value.
norm -- compute the norm of a matrix.
sort -- sort columns.
* New variable, `silent_functions'. If silent_functions == 'true',
the results of expressions are not printed even if they are not
followed by a semicolon. The disp() and printf() functions still
result in output. The default value for this variable is 'false'.
* New variable `return_last_value_computed'. If it is 'true',
functions defined in script files return the last value computed
if a return value has not been explicitly declared. The default
value for this variable is 'false'.
Summary of changes for version 0.52:
------------------------------------
* Name completion works for function and variable names currently in
the symbol tables. Coming soon: completion for names of functions
defined in script files but not yet compiled.
* The initial value of do_fortran_indexing is now false, and the
initial value of prefer_column_vectors is now true. Swap the
values of these variables if you want behavior that is more like
Matlab.
* All script files check the number of input arguments before doing
much real work.
* The identifiers `i' and `j' are now also names for sqrt(-1).
These symbols may be used for other purposes, but their original
definition will reappear if they are cleared.
* The symbol tables are now implemented with hash tables for faster
searching.
* A small amount of help is now available for most built-in
operators, keywords and functions. Coming soon: help for script
files.
* Without any arguments, the help command now lists all known
built-in operators, keywords and functions.
* Generic parse errors are now signalled by `Eh, what's up doc?',
which is closer to what Bugs actually says.
* The who command now only prints variable names by default.
Use the -fcn (or -fcns, or -functions) switch to print the names of
built-in or currently compiled functions.
Summary of changes for version 0.51:
------------------------------------
* Major overhaul of array indexing.
* The colloc function actually works now.
Summary of changes for version 0.50:
------------------------------------
* The lsode and dassl functions now return the states only,
instead of the time and the states, so you must keep track of
the corresponding times (this is easy though, because you have
to specify a vector of desired output times anyway).
* Solution of NLPs with NPSOL now works on the SPARC.
* New keywords `endif', `endfor', `endfunction', `endif', and
`endwhile', which allow for better diagnostics. The `end' keyword
is still recognized. All script files have been changed to use
these new keywords in place of `end'.
* It is now possible to uninstall Octave by doing a `make uninstall'
in the top level directory.
* The Makefiles are much closer to conforming with GNU coding standards.
* New functions:
win_texas_lotto -- produce six unique random numbers between 1 and 50.
quad -- numerical integration.
lu -- LU factorization
qr -- QR factorization
dassl -- Solution of DAEs using DASSL.
* New files:
THANKS -- A list of people and organazations who have supported
the development of Octave.
NEWS -- This file, listing recent changes.
* Help is now available at the gnuplot prompt.
|