extall / fomcon-matlab

FOMCON toolbox for MATLAB
MIT License
34 stars 14 forks source link

PROCEST analog #24

Open dinalt2006 opened 4 months ago

dinalt2006 commented 4 months ago

Is there an analogue of function PROCEST in FOMCON?

extall commented 4 months ago

In FOMCON, you would either use the fid function, or more appropriate to your use case, the pfid function which allows for parameteric identification of linear models. From its docstring:

 % EXPR is a symbolic expression with the FOTF model structure, e.g.
 %
 % EXPR = 'p_1/(1+T*s^{q_1}) exp(-q_2*s)'; % Defines a FFOPDT model
                                           % with T (time constant)
                                           % known in advance

The above can be used to identify a model of type $$G_i = \frac{p_1}{1+T\cdot s^{q_1})} \cdot \text{e}^{-q_2 \cdot s}$$ where $\theta = [p_1, q_1, q_2]$ are the estimated parameters, whereas $T$ is considered known (and must be assigned in the params structure).

dinalt2006 commented 4 months ago

Nice! Thank you so much!

dinalt2006 commented 4 months ago

Hi. Unfortunately, my efforts have not yielded any results. I would like to ask you for more specific help. I have experimental results and convert data to fidata object. fotfid tool succedfully worked with this data and return fotf object. I need to estimate my data as EXPR = '1/(1+A*s^{q_1})' 1

0.78288s^{1.477}+1 or as EXPR = 'Ds^{q_3}/(Bs^{q_2}+A*s^{q_1})' 1.3676s^{0.038824}

0.78288s^{1.3996}+1.5687s^{0.045358}

Be so kind as to formulate the correct pfid or fid function call for these conditions. When I run this code EXPR = '(1/(1+p_1*s^{q_1}))'; % Defines a FFOPDT model [IDPARAMS,G] = pfid(operator, EXPR); i get a lot of errors: Incorrect number or types of inputs or outputs for function 'fix'.

Error in ^ (line 4) if n == fix(n)

Error in pfid>fracparidfun (line 300) G = eval(expr);

Error in pfid>@(x)idcost(x,expr,simParam,sizes,indP,indQ,iddata,opt) (line 226) lsqnonlin(@(x) idcost(x, expr, simParam, sizes, indP, indQ, iddata, opt), ...

Error in lsqnonlin (line 218) initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Error in pfid (line 226) lsqnonlin(@(x) idcost(x, expr, simParam, sizes, indP, indQ, iddata, opt), ...

Error in [ ^ ](matlab:matlab.internal.language.introspective.errorDocCallback('fotf/mpower', 'C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\@fotf\mpower.m', 4)) ([line 4](matlab: opentoline('C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\@fotf\mpower.m',4,0))) if n == fix(n)

Error in [pfid>fracparidfun](matlab:matlab.internal.language.introspective.errorDocCallback('pfid>fracparidfun', 'C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m', 300)) ([line 300](matlab: opentoline('C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m',300,0))) G = eval(expr);

Error in [pfid>@(x)idcost(x,expr,simParam,sizes,indP,indQ,iddata,opt)](matlab:matlab.internal.language.introspective.errorDocCallback('pfid>@(x)idcost(x,expr,simParam,sizes,indP,indQ,iddata,opt)', 'C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m', 226)) ([line 226](matlab: opentoline('C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m',226,0))) lsqnonlin(@(x) idcost(x, expr, simParam, sizes, indP, indQ, iddata, opt), ...

Error in [lsqnonlin](matlab:matlab.internal.language.introspective.errorDocCallback('lsqnonlin', 'D:\Programs\MATLAB2022B\toolbox\shared\optimlib\lsqnonlin.m', 218)) ([line 218](matlab: opentoline('D:\Programs\MATLAB2022B\toolbox\shared\optimlib\lsqnonlin.m',218,0))) initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Error in [pfid](matlab:matlab.internal.language.introspective.errorDocCallback('pfid', 'C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m', 226)) ([line 226](matlab: opentoline('C:\Users\dinal\AppData\Roaming\MathWorks\MATLAB Add-Ons\Toolboxes\FOMCON Toolbox for MATLAB\id\pfid.m',226,0))) lsqnonlin(@(x) idcost(x, expr, simParam, sizes, indP, indQ, iddata, opt), ...