How can I get this markov code working?
12 次查看(过去 30 天)
显示 更早的评论
I am trying to replicate this code however I always receive an error "not enough input arguments (Error in line 27: [r c]=size(T);). T is defined so is s0,n and V. Can anyone help?
function [chain,state]=markov(T,n,s0,V);
%function [chain,state]=markov(T,n,s0,V);
% chain generates a simulation from a Markov chain of dimension
% the size of T
%
% T is transition matrix
% n is number of periods to simulate
% s0 is initial state
% V is the quantity corresponding to each state
% state is a matrix recording the number of the realized state at time t
%
%
[r c]=size(T);
if nargin == 1;
V=[1:r];
s0=1;
n=100;
end;
if nargin == 2;
V=[1:r];
s0=1;
end;
if nargin == 3;
V=[1:r];
end;
%
%if r ~= c;
% disp('error using markov function');
% disp('transition matrix must be square');
% return;
%end;
%
%for k=1:r;
% if sum(T(k,:)) ~= 1;
% disp('error using markov function')
% disp(['row ',num2str(k),' does not sum to one']);
% disp(['normalizing row ',num2str(k),'']);
% T(k,:)=T(k,:)/sum(T(k,:));
% end;
%end;
[v1 v2]=size(V);
if v1 ~= 1 |v2 ~=r
disp('error using markov function');
disp(['state value vector V must be 1 x ',num2str(r),''])
if v2 == 1 &v2 == r;
disp('transposing state valuation vector');
V=V';
else;
return;
end;
end
if s0 < 1 |s0 > r;
disp(['initial state ',num2str(s0),' is out of range']);
disp(['initial state defaulting to 1']);
s0=1;
end;
%
%T
%rand('uniform');
X=rand(n-1,1);
s=zeros(r,1);
s(s0)=1;
cum=T*triu(ones(size(T)));
%
for k=1:length(X);
state(:,k)=s;
ppi=[0 s'*cum];
s=((X(k)<=ppi(2:r+1)).*(X(k)>ppi(1:r)))';
end;
chain=V*state;
if true
% code
end
7 个评论
Dennis
2018-7-9
Thats actually the first line of your function, and it does not work because it does not know T. Thats why i asked how you call markov function.
My best guess is that your are somehow trying to use markov() without passing parameters.
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Markov Chain Models 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!