# arxstruc

Compute loss functions for single-output ARX models

## Description

estimates the loss function `V`

= arxstruc(`dataest`

,`dataval`

,`NN`

)`V`

for the estimation and validation data in
`dataest`

and `dataval`

, respectively.
`dataest`

and `dataval`

can be in the form of a
`timetable`

, a comma-separated pair of numeric matrices, or an `iddata`

object. It can also be an `idfrd`

object defining frequency-response data.

If `dataest`

and `dataval`

are timetables, you can
select specific input and output channels to use for estimation by specifying the channel
names in the `InputName`

and `OutputName`

name-value
arguments. Otherwise, the software assumes that the last timetable variable channel is the
single output channel and the remaining variables are all input channels.

`V`

contains both the loss functions and the corresponding orders and
delays. You can analyze `V`

with `selstruc`

, which evaluates `V`

and allows you to select a
suitable model structure.

Use `arxstruc`

only for single-output ARX models.
`arxstruc`

supports both single-input and multiple-input
systems.

uses additional options specified by one or more name-value arguments.`V`

= arxstruc(___,`Name,Value`

)

## Examples

### Generate Model-Order Combinations and Estimate Single-Input ARX Model

Create an ARX model for generating data.

A = [1 -1.5 0.7]; B = [0 1 0.5]; m0 = idpoly(A,B);

Generate random input and additive noise signals.

```
u = idinput(400,'rbs');
e = 0.1*randn(400,1);
```

Simulate the model output using the defined input and error signals.

y = sim(m0,[u e]);

Generate model-order combinations for estimation. Specify a delay of `1`

for all models, and a model order range between `1`

and `5`

for `na`

and `nb`

.

NN = struc(1:5,1:5,1);

Estimate ARX models and compute the loss function for each model order combination. The input data is split into estimation and validation data sets.

V = arxstruc(u(1:200),y(1:200),u(201:400),y(201:400),NN);

Select the model order with the best fit to the validation data.

order = selstruc(V,0)

`order = `*1×3*
2 2 1

Estimate an ARX model of selected order.

M = arx(u,y,order)

M = Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t) A(z) = 1 - 1.498 z^-1 + 0.6971 z^-2 B(z) = 1.004 z^-1 + 0.5028 z^-2 Sample time: 1 seconds Parameterization: Polynomial orders: na=2 nb=2 nk=1 Number of free coefficients: 4 Use "polydata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using ARX on time domain data "u". Fit to estimation data: 97.75% (prediction focus) FPE: 0.009874, MSE: 0.009582

### Generate Model-Order Combinations and Estimate Multi-Input ARX Model

Load estimation and validation data sets and view the variable names.

load co2datatt tte ttv head(tte,3)

Time u1 u2 y1 _______ ___ __ _______ 0.5 sec 170 50 -44.302 1 sec 170 50 -44.675 1.5 sec 170 50 -45.29

Generate model-order combinations for:

`na`

=`2:4`

`nb`

=`2:5`

for the first input, and`1`

or`4`

for the second input.`nk`

=`1:4`

for the first input, and`0`

for the second input.

NN = struc(2:4,2:5,[1 4],1:4,0);

Estimate an ARX model for each model order combination.

V = arxstruc(tte,ttv,NN);

Select the model order with the best fit to the validation data.

order = selstruc(V,0)

`order = `*1×5*
2 4 4 2 0

Estimate an ARX model of selected order.

M = arx(tte,order)

M = Discrete-time ARX model: A(z)y(t) = B(z)u(t) + e(t) A(z) = 1 - 1.252 z^-1 + 0.302 z^-2 B1(z) = -0.3182 z^-2 - 0.1292 z^-3 + 0.2883 z^-4 + 0.001051 z^-5 B2(z) = -0.02705 + 0.01948 z^-1 + 0.1695 z^-2 + 0.3278 z^-3 Sample time: 0.5 seconds Parameterization: Polynomial orders: na=2 nb=[4 4] nk=[2 0] Number of free coefficients: 10 Use "polydata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using ARX on time domain data "tte". Fit to estimation data: 88.59% (prediction focus) FPE: 3.993, MSE: 3.938

## Input Arguments

`dataest`

— Estimation data

`timetable`

| numeric matrix pair | `iddata`

object | `idfrd`

object

Estimation data, specified as a `timetable`

, a comma-separated pair of numeric matrices, an `iddata`

object, or an `idfrd`

object
.

The specification for `dataest`

depends on the data type.

#### Timetable

Specify `dataest`

as a `timetable`

that uses a regularly spaced time vector containing variables
that represent input and output channels. Use the `InputName`

and
`OutputName`

name-value arguments to select specific channels for
estimation.

#### Comma-Separated Matrix Pair

Specify `dataest`

as a comma-separated pair of matrices that
contain the input and output time-domain signal values
*u*,*y*.

#### Data Object

Specify `dataest`

as an `iddata`

object or an
`idfrd`

that contains the input and output data.

For more information about working with estimation data types, see Data Domains and Data Types in System Identification Toolbox.

`dataval`

— Validation data

`timetable`

| numeric matrix pair | `iddata`

object | `idfrd`

object

Estimation data, specified in the same format and input/output channel order as
`dataest`

. `dataval`

can be the same data as
`dataest`

.

`NN`

— Number of model structures

integer matrix

Number of ARX model structures to evaluate, specified as an
*N _{n}*-by-3 matrix, where

*N*is the number of model structures.

_{n}Each row of `NN`

has the form ```
nn = [na nb
nk]
```

.

### Name-Value Arguments

Specify optional pairs of arguments as
`Name1=Value1,...,NameN=ValueN`

, where `Name`

is
the argument name and `Value`

is the corresponding value.
Name-value arguments must appear after other arguments, but the order of the
pairs does not matter.

*
Before R2021a, use commas to separate each name and value, and enclose*
`Name`

*in quotes.*

**Example: **`V = arxstruc(dataest,dataval,NN,'InputName',"u2")`

selects the
timetable variable `u2`

as the single input channel.

`InputName`

— Input channel names

string | character vector | string array | cell array of character vectors

Input channel names, specified as a string, character vector, string array, or cell array of character vectors.

If you are using a timetable for the data source, the names in
`InputName`

must be a subset of the timetable variables.

**Example: **`V = arxstruc(tt,__,'InputName',["u1" "u2"])`

selects
the variables `u1`

and `u2`

as the input channels
from the timetable `tt`

to use for the estimation.

`OutputName`

— Output channel name

string | character vector | string array | cell array of character vectors

Output channel name, specified as a string or character vector.

If you are using a timetable for the data source, the name in
`OutputName`

must be a subset of the timetable variables.

**Example: **`V = arxstruc(___,'OutputName',"y3")`

selects the
variable `y3`

as the output channel from the timetable
`tt`

to use for the estimation.

## Output Arguments

`V`

— Loss function

numeric matrix

Loss function, specified as an 4-by-(*N _{n}*+1)
matrix.

The first row of `V`

contains the loss functions. The remaining
rows of `V`

contain the transpose of `NN`

, so that the
orders and delays are given just below the corresponding loss functions. The last column
of `V`

contains the number of data points in
`dataest`

.

## Version History

**Introduced before R2006a**

### R2023a: Time-domain estimation data is accepted in the form of timetables and matrices

Most estimation, validation, analysis, and utility functions now accept time-domain input/output data in the form of a single timetable that contains both input and output data or a pair of matrices that contain the input and output data separately. These functions continue to accept `iddata`

objects as a data source as well, for both time-domain and frequency-domain data.

## Open Example

You have a modified version of this example. Do you want to open this example with your edits?

## MATLAB Command

You clicked a link that corresponds to this MATLAB command:

Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.

Select a Web Site

Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .

You can also select a web site from the following list:

## How to Get Best Site Performance

Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.

### Americas

- América Latina (Español)
- Canada (English)
- United States (English)

### Europe

- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)

- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)