-
Notifications
You must be signed in to change notification settings - Fork 1
/
widentc.m
136 lines (135 loc) · 7.11 KB
/
widentc.m
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
%WIDENTC MEX-function for computing a discrete-time model of a
% Wiener system using SLICOT routine IB03AD.
%
% [xopt(,perf,nf,rcnd)] = widentc(job,u,y,nn(,s,n,x,alg,stor,iter,
% nprint,tol,seed,printw,ldwork))
%
% [xopt(,perf,nf,rcnd)] = widentc(1,u,y,nn,s,n,x(,alg,stor,iter,
% nprint,tol,printw,ldwork))
% [xopt(,perf,nf)] = widentc(2,u,y,nn,n,x(,alg,stor,iter,nprint,
% tol,seed,printw,ldwork))
% [xopt(,perf,nf,rcnd)] = widentc(3,u,y,nn,s(,n,[],alg,stor,iter,
% nprint,tol,seed,printw,ldwork))
% [xopt(,perf,nf)] = widentc(4,u,y,nn,n,x(,alg,stor,iter,nprint,
% tol,printw,ldwork))
%
% WIDENTC computes a set of parameters for approximating a Wiener system
% in a least-squares sense, using a neural network approach and a
% Levenberg-Marquardt algorithm, and a Cholesky or conjugate gradients
% algorithm for solving linear systems of equations.
%
% Description of input parameters:
% job - integer specifying which parameters must be initialized:
% = 1 : initialize the linear part only;
% = 2 : initialize the static nonlinearity only;
% = 3 : initialize both linear and nonlinear parts;
% = 4 : do not initialize anything, x already contains
% an initial approximation.
% u - the t-by-m input trajectory, where t is the number of
% samples.
% y - the t-by-l output trajectory.
% nn - the number of neurons used to approximate the nonlinear
% part.
% s - if job = 1 or 3, the number of block rows in the input and
% output block Hankel matrices to be processed. s > 0.
% The argument s must not be specified if job = 2 or 4.
% n - (optional) the order of the linear part of the system or
% an option for how to compute it.
% If job = 1 or 3, and n < 0, the order will be found by the
% program. Otherwise, n should be non-negative (or positive,
% but less than s, if job = 1 or 3).
% The value of n should be given if job = 2 or 4.
% Default for job = 1 or 3: the order found automatically.
% x - the lx0 vector of initial parameters, where
% lx0 = l1, if job = 1,
% lx0 = l2, if job = 2,
% lx0 = lx, if job = 4,
% with l1 = (nn*(l+2)+1)*l, l2 = n*(l+m+1)+l*m, lx = l2+l1.
% Here, l1 is the number of parameters for the nonlinear part
% and l2 is the number of parameters for the linear part.
% If n < 0 on entry, then s-1 is used instead of n for
% setting l2 and lx, and for allocating the workspace.
% If job = 3, the vector x is not needed.
% alg - (optional) integer specifying the algorithm used for
% solving the linear systems involving a Jacobian matrix J:
% = 1 : a direct algorithm, which computes the Cholesky
% factor of the matrix J'*J + par*I is used, where
% par is the Levenberg factor;
% = 2 : an iterative Conjugate Gradients algorithm, which
% only needs the matrix J, is used.
% Default: alg = 1.
% stor - (optional) integer specifying the storage scheme for the
% symmetric matrix J'*J, if alg = 1:
% = 1 : full storage is used;
% = 2 : packed storage is used.
% Default: stor = 1.
% The option stor = 1 usually ensures a faster execution.
% This parameter is not relevant if alg = 2.
% iter - (optional) vector of length 2 containing the maximal
% numbers of iterations for the Levenberg-Marquardt algorithm
% for the initialization of the static nonlinearity (ignored
% if job = 1 or 4), and for the optimization process; these
% numbers are stored in iter(1) and iter(2), respectively.
% Default: iter = [10*lx 10*lx].
% nprint - (optional) integer specifying the frequency of printing
% details of the optimization process. If nprint > 0, the
% intermediate results are printed in the file IB03AD.prn,
% which is overwritten at each execution of this mexfile.
% Default: nprint = 0 (no printing).
% tol - (optional) vector of length 2 containing the absolute
% tolerances for the initialization of the static
% nonlinearity (ignored if job = 1 or 4), and for the
% optimization process, respectively.
% Default: tol = [sqrt(eps) sqrt(eps)], with
% eps = epsilon_machine.
% seed - (optional) if job = 2 or 3, vector of length 4 containing
% the random number generator seed used to initialize the
% parameters of the static nonlinearity.
% printw - (optional) switch for printing the warning messages.
% = 1: print warning messages;
% = 0: do not print warning messages.
% Default: printw = 0.
% ldwork - (optional) the length of working array.
% Default: the minimum workspace needed, computed by the
% program based on the specified input arguments.
% Larger values could increase the efficiency.
%
% Description of output parameters:
% xopt - the lx vector of optimal parameters.
% The corresponding linear system and its initial state can
% be found as follows:
% m = size(u,2); l = size(y,2); l1 = (nn*(l+2)+1)*l;
% n = ( length(xopt) - l1 - l*m ) / ( l+m+1 );
% [A,B,C,D,x0] = onf2ss(n,m,l,xopt(l1+1:end),1);
% perf - (optional) vector of length 4 or 8 containing performance
% results:
% perf(1) contains the optimal value of the workspace length;
% perf(2) contains the maximum residual error norm;
% perf(3) contains the total number of iterations performed;
% perf(4) contains the final Levenberg factor.
% If job = 2 or 3, then similar results for the nonlinear
% part initialization step are returned:
% perf(5) contains the optimal value of the workspace length;
% perf(6) contains the maximum residual error norm;
% perf(7) contains the total number of iterations performed;
% perf(8) contains the final Levenberg factor (maximum over
% all outputs).
% nf - (optional) 2-vector containing additional performance
% results:
% nf(1) contains the (total) number of function evaluations;
% nf(2) contains the (total) number of Jacobian evaluations.
% rcnd - (optional) if job = 1 or 3, vector of suitable length
% containing the reciprocal condition number estimates for
% determining the linear part by susbspace techniques.
%
% See also ONF2SS, SS2ONF
%
% RELEASE 2.0 of SLICOT System Identification Toolbox.
% Based on SLICOT RELEASE 5.7, Copyright (c) 2002-2020 NICONET e.V.
%
% Contributor:
% V. Sima, Katholieke University Leuven, Belgium, Apr. 2002.
%
% Revisions:
% -
%