对于具有特定起点的matlab中的循环

计算科学 matlab
2021-12-19 09:20:33

我有以下定义

long  = 1000;
  init  = 500;      
  N = init+long;        
  T = init+1:N-1;   
  T1    = init+2:N;   

然后我根据这个循环填充我想要的向量,

   for t=1:N+1
     Rk(t)=1+A(t)*alpha*kh(t).^(alpha-1)-delta;  
     Yi(t)=A(t)*(1-alpha)*kh(t).^alpha - A(t)*alpha*kh(t).^(alpha-1)+eta(t);
     Rap(t)=Rk(t).^(1-gamma)+(1-gamma)*Rk(t).^(-gamma)*theta(t)*Yi(t)-0.5*gamma*(1-gamma)*(theta(t)*Yi(t)).^2;  
   end   

最后,我根据这个循环计算了一些新的向量

for t=T1
           fi1(t)=(v(t).^(1-gamma))*(Rk(t))*(Yi(t)');  % Expectations 1 
           fi2(t)=((v(t).^(1-gamma))*(Yi(t)).^2);   
           fi3(t)=(((v(t).^(1-gamma))*Rap(t)).^(1/(1-gamma)));
       end

所以,从最后一个循环开始,我的目标是获得一个大小为 T1 的向量,但我收到的是一个 1x1500 的向量。

我的范围基本上是从 T1 指定的区域(即 502:1500)中获取向量 v、Rk、Yi 中的所有数字,所以我应该得到 1x999,而不是 1x1500 向量。

所以我想即使有人用索引502来计算循环,Matlab仍然将其理解为1,并循环直到N,即T1的终点。

有人可以告诉我应该如何修改代码以获得我上面描述的内容。

1个回答

t从 502 开始,但所有MATLAB 数组都从 1 开始。因此,MATLAB用索引 1 到 501 之间的零填充fi1fi2fi2,然后将数据从 502 开始。您可以接受这个或编写:

for t=T1
  fi1(t-(init+1))=(v(t).^(1-gamma))*(Rk(t))*(Yi(t)');
  ......
end