Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 基于数字创建多个矩阵/向量_Matlab - Fatal编程技术网

Matlab 基于数字创建多个矩阵/向量

Matlab 基于数字创建多个矩阵/向量,matlab,Matlab,我有一个简单的for循环,用于模拟数据 for t=2:T; Y_star(t,1,b)=[Y_star(t-1,1,b) X_1_star(t-1,1,b) X_2_star(t-1,1,b) 1]*beta(:,i)+w(t-1)*e(t-1,i); X_1_star(t,1,b)=Theta(1,1)+Phi(1,:,1)*[X_1_star(t-1,1,b) ; X_2_star(t-1,1,b)]+w(t-1)*v(t-1,1,i); X

我有一个简单的for循环,用于模拟数据

for t=2:T;
        Y_star(t,1,b)=[Y_star(t-1,1,b) X_1_star(t-1,1,b) X_2_star(t-1,1,b) 1]*beta(:,i)+w(t-1)*e(t-1,i);
        X_1_star(t,1,b)=Theta(1,1)+Phi(1,:,1)*[X_1_star(t-1,1,b) ; X_2_star(t-1,1,b)]+w(t-1)*v(t-1,1,i);
        X_2_star(t,1,b)=Theta(2,1)+Phi(2,:,1)*[X_1_star(t-1,1,b) ; X_2_star(t-1,1,b)]+w(t-1)*v(t-1,2,i);
end;
我遇到的问题是,当我有两个X变量时,这很好,但是,我想编写代码,这样我就可以增加每次更改的变量数量,比如说4

在这种情况下,我需要X_1_星,X_2_星,X_3_星和X_4_星

我可以处理φ和θ系数,以及w、v和e,但是我正在努力创建X的矩阵

任何想法都会非常有用,我曾尝试将矩阵存储在单元格中,但我很难让它正常工作。 下面是一个简单的例子

%%简单例子 %-------------------------------------%

Phi = [0.9954    0.0195;
       0.0012    0.9567];  
Theta= [0.007;0.051];
beta = [0.06;-0.10;1.66;-0.88];
N = 1;      
e = rand(370,1);
v = randn(370,2);
t = 371;
T = 371;
yy = rand(370,1);
X_1 = rand(370,1);
X_2 = rand(370,1);
B=50;
Y_star=zeros(T,N,B);
X_1_star=zeros(T,N,B);
X_2_star=zeros(T,N,B);
for b=1:B;
    Y_star(1,:,b)=yy(1,:);
    X_1_star(1,:,b)=X_1(1,:);
    X_2_star(1,:,b)=X_2(1,:);
    w=randn(T-1,1);
    for t=2:T;
        for i=1:N;
            Y_star(t,i,b)=[Y_star(t-1,i,b) X_1_star(t-1,i,b) ...
                X_2_star(t-1,i,b) 1]*beta(:,i)+w(t-1)*e(t-1,i);
            X_1_star(t,i,b)=Theta(1,i)+Phi(1,:,i)*[X_1_star(t-1,i,b) ; ...
                X_2_star(t-1,i,b)]+w(t-1)*v(t-1,1,i);
            X_2_star(t,i,b)=Theta(2,i)+Phi(2,:,i)*[X_1_star(t-1,i,b) ; ...
                X_2_star(t-1,i,b)]+w(t-1)*v(t-1,2,i);
        end;
    end;
    disp(b);
end;
理想情况下,我希望这能做同样的事情,但不依赖于写X_1和X_2,因为我有时想把这个数增加到一个更大的数


我曾尝试过按照commnets的建议进行重塑,但不确定在本例中该如何进行

我通常认为结构数组对于这种动态索引更有用,因为你不知道有多少个X_1_星、X_2_星

我并没有试图复制整个示例,但如果您试图达到X_4_星,可能会出现如下情况:

...
nX=4;
for i=1:N
    Y_star(t,i,b)=[Y_star(t-1,i,b) X_1_star(t-1,i,b) ...
                X_2_star(t-1,i,b) 1]*beta(:,i)+w(t-1)*e(t-1,i);
    for n=1:nX
        X(n).star(t,i,b)=...
    end
end

我认为这个问题只是矩阵代数的一个问题

对于X变量,您似乎正在模拟一个小的VAR模型

我认为将x数据模拟为一个更大的矩阵而不是向量会更有意义,而不是上述答案中的动态矩阵

这是一个简单的例子

首先,我向您展示了一个双变量的情况,既有您使用的方法,也有通过联合模拟数据

然后我用一个3变量的例子说明如何扩展这个

你所要做的就是取beta矩阵或alpha矩阵的大小,因为我猜它们是在矩阵之前确定的

%Simulating a small VAR model 
%% 2 - variable case 
rng('default')
b = [0.4 0.5;0.6 0.07];  
a = [0.1 0.2];
v=randn(100,2);
x1 = zeros(100,1);
x2 = zeros(100,1);
xm=zeros(100,2);

T=100;
for t=2:T;
    x1(t)=a(1)+b(1,:)*[x1(t-1) ; x2(t-1)]+v(t-1,1); 
    x2(t)=a(2)+b(2,:)*[x1(t-1) ; x2(t-1)]+v(t-1,2);
end;

for t=2:T;
    xm(t,:)=a+xm(t-1,:)*b'+v(t-1,:)
end;

[xm x1 x2]

%% 3 - variable case 

rng('default')
b = [0.4 0.5 0.1;0.6 0.07 0.1; 0.3 0.4 0.7];  
a = [0.1 0.2 0.3];
v=randn(100,size(b,2));
xm=zeros(100,size(b,2));
for t=2:T;
    xm(t,:)=a+xm(t-1,:)*b'+v(t-1,:)
end;

这应该是一个评论吗?为了找到一个有效的解决方案,我认为OP没有多大用处。一般来说,答案会像你一样回答问题,评论也会像你一样给人留下深刻印象?@glacierbliss我很感激你的建议,我也很难想象这是怎么回事。所有的X都需要在Y_星上,并且如示例中所示。如果您有一个可行的想法,请进一步澄清appreciated@TonyChivers我提供了一个可能的途径来解决最初的问题。你对我帮助他人的努力嗤之以鼻,降低了我再次尝试帮助这个网站的机会。@user30609祝你在这个问题上好运。今天我已经吃够了。