<Next version of Ox> <Previous version of Ox>

# Ox 3.20: new features and fixes

## New features and enhancements

- Made Num1Derivative and Num2Derivative marginally more accurate. This can have minor impact on the paths taken by optimizers such as MaxBFGS and MaxNewton when using numerical derivatives.
- `decschur`: real Schur decomposition,
  `decschurgen`: generalized real Schur decomposition, and
  `decqrupdate`: update a QR decomposition via Givens rotations.
- `eigen`: now using lapack implementation
- `moments`: function to compute mean, std.dev., skewness, kurtosis, or the central moments.
- `SolveQP`: entirely rewritten, to use recursive updating of the QR decomposition (using the new decqrupdate function). This makes `SolveQP` more reliable (when starting from an infeasible point, the old version occasionally stopped at an infeasible solution without signalling this), and much faster. Using the new SolveQP, there are now also constrained maximizers: `MaxSQP` and `MaxSQPF`. SQP stands for sequential quadratic programming, and the F for feasible: starting from a feasible point, all subsequent iterates will be feasible.
- `strtrim`: removes leading and trailing white space from a string.
- Almost all distributions that have a random number generator, now also have a `dist`, `prob` and `quan` version.
- `min` and `max` now ignore missing values
- `SolveNLE` to solve systems of nonlinear equations
- New Bessel I, IE function implementation for nu != 0 or 1. This is will evaluate the function for more extreme arguments, and allow negative nu.
- Created warning for using extension in #import
- aa' and a'a 3 times faster for 500`x`500 matrix.

## Problems in version 3.10 which have been fixed in version 3.20:

- fixed problem with complex eigenvectors of a general matrix which could occur in certain circumstances.
- `range` with infeasible arguments often returned 0 when it should return <>. For example: `range(3,1,1)` now returns <>.
- `exclusion(x,<>)` returned <>, instead of row vector with sorted unique values of x.
- If an include-file finishes with a compiler directive (e.g. `#endif`) without a new line, this gives an unexpected end of file error message.
- created warning for using extension in #import
- `<-1^2>` was evaluated as `<(-1)^2>` instead of `<-(1^2)>` (only affecting terms inside matrix constants)
- norm on empty matrix could lead to crash.
- import path-only (e.g. #import "mypath/data/") would give a warning message.
- [2][0] * [0][2] gave undefined contents, now filled with missing values.
- decqr, decsvd: give Runtime error: arguments must be different for empty matrix arguments
- OxGauss (thanks to Sébastien Laurent)
  - `saved(y,dataset,vname)` where y is one column uses name X1 instead of Y
  - `coreleft` now returns 2^15 instead of 2^31 (note that OxGauss this concept has no meaning in Ox Gauss).
  - `readr` limits the number of rows arguments to the no of rows in the file
  - `gradp` now uses NumJacobianEx
  - `indnv` was wrong
  - fixed bug in multiple returns that could gradually lead to stack overflow
  - `$+` didn't work when left-hand side is matrix (e.g. y = 0 $+ "beta")

Ox version 3.20. © JA Doornik This file last changed
.