dynare/scilab/shift.sci

74 lines
1.2 KiB
Scilab

function [x]=shift(x,varargin)
[nargout,nargin] = argn(0)
//% mode 1 : [ x1(t), x1(t-1), ..., x2(t), x2(t-1), ... ]
//% mode 2 : [ x1(t), x2(t), ..., x1(t-1), x2(t-1), ... ]
z = -1;
%mode = 2;
if nargin>1 then
z = varargin(1)';
end
if nargin>2 then
%mode = varargin(2);
end
[n,k] = size(x);
//! unknown arg type, using mtlb_length
nz = mtlb_length(z);
if z==[] then
%v1=[n,0]
x = zeros(%v1(1),%v1(2));
return
end
maxz = max([0,z]);
minz = abs(min([0,z]));
%v=[minz,k]
%v=[maxz,k]
x = [%nan*zeros(%v(1),%v(2));x;%nan*zeros(%v(1),%v(2))];
//n = n + maxz + minz;
m = (1:n)';
%v=[1,k*nz]
m = m(:,ones(%v(1),%v(2)));
select %mode
case 1 then
t = 0:n+maxz+minz:(k-1)*(n+maxz+minz);
%v1=[nz,1]
t = t(ones(%v1(1),%v1(2)),:);
t = t(:)';
%v1=[n,1]
t = t(ones(%v1(1),%v1(2)),:);
%v1=[n,1]
z = z(ones(%v1(1),%v1(2)),:);
z = z(:);
%v1=[1,k]
z = matrix(z(:,ones(%v1(1),%v1(2))),n,k*nz);
case 2 then
t = (0:n+maxz+minz:(k-1)*(n+maxz+minz))';
%v1=[nz,1]
t = t(:,ones(%v1(1),%v1(2)));
t = t(:)';
%v1=[n,1]
t = t(ones(%v1(1),%v1(2)),:);
%v1=[k,1]
z = z(ones(%v1(1),%v1(2)),:);
z = z(:)';
%v1=[n,1]
z = z(ones(%v1(1),%v1(2)),:);
end
m = m+t+z;
m = m+minz;
x = x(:);
x = x(m);
return