## Estimate Polynomial Models at the Command Line

### Using arx and iv4 to Estimate ARX Models

You can estimate single-output and multiple-output ARX models using the `arx`

and `iv4`

commands. For information about the
algorithms, see Polynomial Model Estimation Algorithms.

You can use the following general syntax to both configure and estimate ARX models:

% Using ARX method m = arx(data,[na nb nk],opt); % Using IV method m = iv4(data,[na nb nk],opt);

`data`

is the estimation data and `[na nb nk]`

specifies the model orders, as discussed in What Are Polynomial Models?.

The third input argument `opt`

contains the options for configuring the
estimation of the ARX model, such as handling of initial conditions and input offsets. You
can create and configure the option set `opt`

using the `arxOptions`

and `iv4Options`

commands. The three input arguments
can also be followed by name and value pairs to specify optional model structure attributes
such as `InputDelay`

, `IODelay`

, and
`IntegrateNoise`

.

To get discrete-time models, use the time-domain data (`iddata`

object).

**Note**

Continuous-time polynomials of ARX structure are not supported.

For more information about validating your model, see Validating Models After Estimation.

You can use `pem`

or `polyest`

to refine parameter
estimates of an existing polynomial model, as described in Refine Linear Parametric Models.

For detailed information about these commands, see the corresponding reference page.

**Tip**

You can use the estimated ARX model for initializing a nonlinear estimation at the command line, which improves the fit of the model. See Initialize Nonlinear ARX Estimation Using Linear Model.

### Using `polyest`

to Estimate Polynomial Models

You can estimate any polynomial model using the iterative prediction-error estimation
method `polyest`

. For Gaussian disturbances of unknown
variance, this method gives the maximum likelihood estimate. The resulting models are stored
as `idpoly`

model objects.

Use the following general syntax to both configure and estimate polynomial models:

m = polyest(data,[na nb nc nd nf nk],opt,Name,Value);

where `data`

is the estimation data. `na`

,
`nb`

, `nc`

, `nd`

, `nf`

are integers that specify the model orders, and `nk`

specifies the input
delays for each input.For more information about model orders, see What Are Polynomial Models?.

**Tip**

You do not need to construct the model object using `idpoly`

before
estimation.

If you want to estimate the coefficients of all five polynomials,
*A*, *B*, *C*,
*D*, and *F*, you must specify an integer order for
each polynomial. However, if you want to specify an ARMAX model for example, which includes
only the *A*, *B*, and *C*
polynomials, you must set `nd`

and `nf`

to zero matrices
of the appropriate size. For some simpler configurations, there are dedicated estimation
commands such as `arx`

, `armax`

, `bj`

, and `oe`

, which deliver the required model by using just the required orders. For
example, `oe(data,[nb nf nk],opt)`

estimates an output-error structure
polynomial model.

In addition to the polynomial models listed in What Are Polynomial Models?, you can use `polyest`

to
model the ARARX structure—called the *generalized least-squares
model*—by setting `nc=nf=0`

. You can also model the
ARARMAX structure—called the *extended matrix model*—by
setting `nf=0`

.

The third input argument, `opt`

, contains the options for configuring
the estimation of the polynomial model, such as handling of initial conditions, input
offsets and search algorithm. You can create and configure the option set
`opt`

using the `polyestOptions`

command. The three input arguments can also be followed by name
and value pairs to specify optional model structure attributes such as
`InputDelay`

, `IODelay`

, and
`IntegrateNoise`

.

For ARMAX, Box-Jenkins, and Output-Error models—which can only be estimated using
the iterative prediction-error method—use the `armax`

,
`bj`

, and `oe`

estimation commands, respectively.
These commands are versions of `polyest`

with simplified syntax for these
specific model structures, as follows:

m = armax(Data,[na nb nc nk]); m = oe(Data,[nb nf nk]); m = bj(Data,[nb nc nd nf nk]);

Similar to `polyest`

, you can specify as input arguments the option
set configured using commands `armaxOptions`

, `oeOptions`

, and `bjOptions`

for the estimators `armax`

, `oe`

, and `bj`

respectively. You can also use name and value pairs to configure additional
model structure attributes.

**Tip**

If your data is sampled fast, it might help to apply a lowpass filter to the data
before estimating the model, or specify a frequency range for the
`WeightingFilter`

property during estimation. For example, to model
only data in the frequency range 0-10 rad/s, use the `WeightingFilter`

property, as follows:

`opt = oeOptions('``WeightingFilter`

',[0 10]);
m = oe(Data, [nb nf nk], opt);

For more information about validating your model, see Validating Models After Estimation.

You can use `pem`

or `polyest`

to refine parameter
estimates of an existing polynomial model (of any configuration), as described in Refine Linear Parametric Models.

## Related Examples

- Estimate Models Using armax
- Preliminary Step – Estimating Model Orders and Input Delays
- Estimate Polynomial Models in the App