This is machine translation

Translated by Microsoft
Mouseover text to see original. Click the button below to return to the English verison of the page.

Note: This page has been translated by MathWorks. Please click here
To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.


Translate parameter covariance across model operations


sys_new = translatecov(fcn,sys)
sys_new = translatecov(fcn,sys1,sys2,...sysn)


sys_new = translatecov(fcn,sys) translates parameter covariance in the model sys during the transformation operation specified in fcn. Parameter covariance is computed by applying Gauss Approximation formula on the parameter covariance of sys.

sys_new = translatecov(fcn,sys1,sys2,...sysn) translates parameter covariance in the multiple models sys1,sys2,...sysn. The parameters of the systems are assumed to be uncorrelated.

Input Arguments


Function for a model transformation operation, specified as a function handle. The function handle describes the transformation such that:

  • For single-model operations, sys_new = fcn(sys). Examples of single-model operations are model-type conversion (idpoly, idss, ...) and sample time conversion (c2d, ...). For example, fcn = @(x)c2d(x,Ts), or fcn = @idpoly.

  • For multi-model operations, sys_new = fcn(sys1,sys2,..). Examples of multimodel operations are merging and concatenation. For example, fcn = @(x,y)[x,y] such that fcn(sys1,sys2) performs horizontal concatenation of the models sys1 and sys2.


Linear model, specified as one of the following model types:

The model must contain parameter covariance information (getcov(sys) is nonempty).


Multiple linear models. Models must be of the same type.

Output Arguments


Model resulting from a transformation operation and includes parameter covariance.


collapse all

Convert an estimated transfer function model into state-space model while also translating the estimated parameter covariance.

Estimate a transfer function model.

load iddata1
sys1 = tfest(z1,2);

Convert the estimated model to state-space form while also translating the estimated parameter covariance.

sys2 = translatecov(@(x)idss(x),sys1);

If you convert the transfer function model to state-space form directly, the estimated parameter covariance is lost (the output of getcov is empty).

sys3 = idss(sys1);
ans =


View the parameter covariance in the estimated and converted models.

covsys1 = getcov(sys1);
covsys2 = getcov(sys2);

Compare the confidence regions.

h = bodeplot(sys1,sys2);

The confidence bounds for sys1 overlaps with sys2.

Concatenate 3 single-output models such that the covariance data from the 3 models combine to produce the covariance data for the resulting model.

Construct a state-space model.

a = [-1.1008 0.3733;0.3733 -0.9561];
b = [0.7254 0.7147;-0.0631 -0.2050];
c = [-0.1241 0; 1.4897 0.6715; 1.4090 -1.2075];
d = [0 1.0347; 1.6302 0; 0.4889 0];
sys = idss(a,b,c,d,'Ts',0);

Generate multi-output estimation data.

t = (0:0.01:0.99)';
u = randn(100,2);
y = lsim(sys,u,t,'zoh');
y = y +  rand(size(y))/10;
data = iddata(y,u,0.01);

Estimate a separate model for each output signal.

m1 = ssest(data(:,1,:),2,'feedthrough',true(1,2), 'DisturbanceModel', 'none');
m2 = ssest(data(:,2,:),2,'feedthrough',true(1,2), 'DisturbanceModel', 'none');
m3 = ssest(data(:,3,:),2,'feedthrough',true(1,2), 'DisturbanceModel', 'none');

Combine the estimated models while also translating the covariance information.

f = @(x,y,z)[x;y;z];
M2 = translatecov(f, m1, m2, m3);

The parameter covariance is not empty.

getcov(M2, 'factors')
ans = 

  struct with fields:

       R: [36×36 double]
       T: [24×36 double]
    Free: [90×1 logical]

If you combine the estimated models into one 3-output model directly, the covariance information is lost (the output of getcov is empty).

M1 = [m1;m2;m3];
ans =


Compare the confidence bounds.

h = bodeplot(M2, m1, m2, m3);

The confidence bounds for M2 overlap with those of m1, m2 and m3 models on their respective plot axes.

More About

collapse all


  • translatecov transforms the model in the same way that directly calling the transformation command does. For example, translatecov(@(x)d2c(x),sys) produces a system that has the same coefficients as d2c(sys). The resulting model also has the parameter covariance of sys. Using d2c(sys) directly does not translate the parameter covariance.

  • If you obtained sys through estimation and have access to the estimation data, you can use zero-iteration update to recompute the parameter covariance. For example:

    load iddata1
    m = ssest(z1,4);
    opt = ssestOptions
    opt.SearchOption.MaxIter = 0;
    m_new = ssest(z1,m2,opt)

    You cannot run a zero-iteration update in the following cases:

    • If MaxIter option, which depends on the SearchMethod option, is not available.

    • For some model and data types. For example, a continuous-time idpoly model using time-domain data.


translatecov uses numerical perturbations of individual parameters of sys to compute the Jacobian of fcn(sys) parameters with respect to parameters of sys. translatecov then applies Gauss Approximation formula cov_new=J×cov× JT to translate the covariance, where J is the Jacobian matrix. This operation can be slow for models containing a large number of free parameters.

See Also

| | |

Introduced in R2012b

Was this topic helpful?