1

システム同定ツールボックスを使用してパラメーターを推定しようとしています。ドキュメントで提供されている 3 つの生態系の例を使用して、独自のモデルを構築することに取り組みました。

これが私のモデルです:

> function [dx, y] = shigella(t, u, x,a,b,q,m,r,varargin)
> 
> y = [x(1); x(2); x(3)];
> 
> dx = [q - m*x(1) - b*x(1)*x(2) + a*x(3); (b*x(1)) - (m+r)*x(2); (r*x(2)) - (m+a)*x(3)];

システム ID コード:

FileName      = 'shigella';              % File describing the model structure.
Order         = [3 0 3];                % Model orders [ny nu nx].
Parameters    = struct('Name',    {'Loss of immunity', 'infectivity rate', 'population renewal', 'death rate', 'recovery rate'}, ...
   'Unit',    {'1/week' '1/week' '1/week' '1/week', '1/week'},                    ...
   'Value',   {0.25 0.002 10 0.012 0.14},                                        ...
   'Minimum', {-Inf -Inf -Inf -Inf -Inf},                                    ...
   'Maximum', {Inf Inf Inf Inf Inf},                                        ...
   'Fixed',   {false false false false false});   % Estimate all 4 parameters.
InitialStates = struct('Name', {'Susceptible', 'Infected', 'Recovered'}, ...
   'Unit',    {'Size (in thousands)' 'Size (in thousands)', 'Size(inthousands)'},     ...
   'Value',   {20 5 10},                                         ...
   'Minimum', {0 0 0},                                             ...
   'Maximum', {Inf Inf Inf},                                         ...
   'Fixed',   {false false false});   % Estimate both initial states.
Ts            = 0;                      % Time-continuous system.
nlgr = idnlgrey(FileName,Order, Parameters, InitialStates, Ts,                  ...
   'Name', 'Population Variation',               ...
   'OutputName', {'Susceptible', 'Infected', 'Recovered'}, ...
   'OutputUnit', {'Size (in thousands)' 'Size (in thousands)', 'Size (in thousands)'},     ...
   'TimeUnit', 'week');
present(nlgr)

w = [1000 5 0];
u = [80 15 3];
v = [65 24 10];
f = [90 27 8];
z = [87 20 10];
g = [w; u; v; f; z];

z = iddata(g,[], 1, 'Name', 'Population Variation');
set(z, 'OutputName', {'Susceptible', 'Infected', 'Recovered'}, ...
   'Tstart', 0, 'TimeUnit', 'Week');

compare(z, nlgr, 1)

opt = nlgreyestOptions;
opt.Display = 'on';
opt.SearchOption.MaxIter = 50;
nlgr = nlgreyest(nlgr, opt);

disp('   True      Estimated parameter vector');
ptrue = [0.25 0.002 10 0.012 0.14];
fprintf('   %6.3f    %6.3f\n', [ptrue'; getpvec(nlgr)']);
disp(' ');
disp('   True      Estimated initial states');
x0true = [20 5 10];
fprintf('   %6.3f    %6.3f\n', [x0true'; cell2mat(getinit(nlgr, 'Value'))']);

コードを部分的に実行すると、次のエラーが発生します。

??? Error using ==> idnlgrey.isvalid at 165 指定された ODE ファイル 'shigella' にエラーまたは不一致があります。エラー メッセージは次のとおりです。numel(x)=0 のため、範囲外のインデックスです。

比較部分を取り除いて先に進もうとしましたが、このエラーが発生しました

??? 未定義の関数または変数 'nlgreyestOptions'。


これについて何か助けていただければ幸いです。

4

0 に答える 0