【问题标题】:Sliding Window in MatlabMatlab中的滑动窗口
【发布时间】:2014-03-21 08:48:57
【问题描述】:

,我必须在数据上实现滑动窗口算法并进一步在循环内部执行操作,下面我已经写下代码,滑动窗口对于我们得到正确估计的前 500 个样本工作正常,但是当我们换了函数,估计好像是错的。

   clc 
   clear all
   close all
   x=rand(1,1000);
   y(2)=2;
   y(3)=4;
   y(4)=5;
   for k=4:1:501
       for i=k:1:k+10  
           y(i)=1.98*y(i-1)-1.284*y(i-2)+0.272*y(i-3)+4*x(i-1)+6*x(i-2)+8*x(i-3);
           phi(i,:)=[ -y(i-1) -y(i-2) -y(i-3) x(i-1) x(i-2) x(i-3) ];
       end
       theta = (phi'* phi)\phi'*y';
       thetaest(:,k)=theta;
   end
   for k=501:1:991
       for i=k:1:k+10  
         y(i)=1.38*y(i-1)-0.576*y(i-2)+0.068*y(i-3)+4*x(i-1)+6*x(i-2)+8*x(i-3);
         phi(i,:)=[ -y(i-1) -y(i-2) -y(i-3) x(i-1) x(i-2) x(i-3) ];
       end
       theta = (phi'* phi)\phi'*y';
       thetaest(:,k)=theta;
   end

提前致谢

【问题讨论】:

  • 你应该在做所有这些任务之前预先分配你的y数组,否则你会对你的表现很不满意;如所写,这是一个 Shlemiel the Painter 算法。在您的第一个循环之前执行y(991) = NaN 以将y 扩展到其最终大小,以避免Matlab 在每次数组迭代时重新分配整个事物。为了简洁起见,您可以使用y(2:4) = [2 4 5];

标签: algorithm matlab


【解决方案1】:

问题是你没有清除你的变量。

在后半部分,您试图拟合一个自回归模型来匹配您的所有样本,即使函数在中途发生了变化。

如果您将要拟合的样本限制为仅适用于新样本,它应该会更好。

变化:

   theta = (phi'* phi)\phi'*y';

   phi2 = phi(501:end,:);
   y2 = y(501:end);
   theta = (phi2'* phi2)\phi2'*y2';

【讨论】:

  • 但是我的函数不是在 500 之后发生变化吗?如果我写 y2=y(501:end);如果我不指定函数 y 将如何更新
  • 恐怕我不太明白你在问什么。 y 是一个数组而不是一个函数,并且您已经有了计算 y 的代码。您是否尝试过我建议的代码更改?
  • 是的,当我进行更改时,我在底部的乘法中遇到问题,即; y 正在变成 1*11 ,但我的 phi 是 10*6 !而且我无法繁殖!
  • clc clear all close all x=rand(1,1000); y(2)=2; y(3)=4; y(4)=5;对于 k=4:1:500 对于 i=k:1:k+10 % y(i)=1.38*y(i-1)-0.576*y(i-2)+0.068*y(i-3) +4*x(i-1)+6*x(i-2)+8*x(i-3); y(i)=1.98*y(i-1)-1.284*y(i-2)+0.272*y(i-3)+4*x(i-1)+6*x(i-2)+ 8*x(i-3); phi(i,:)=[ -y(i-1) -y(i-2) -y(i-3) x(i-1) x(i-2) x(i-3) ];结束 theta = (phi'* phi)\phi'*y'; thetaest(:,k)=theta;结束
  • for k=501:1:991 for i=k:1:k+10 y(i)=1.38*y(i-1)-0.576*y(i-2)+0.068 *y(i-3)+4*x(i-1)+6*x(i-2)+8*x(i-3); phi2=phi(501:end,:); y2=y(501:end);结束 theta = (phi'* phi)\phi'*y'; thetaest(:,k)=theta;结束
猜你喜欢
  • 2015-06-03
  • 2014-06-02
  • 2015-08-26
  • 2011-12-19
  • 2017-09-23
  • 1970-01-01
  • 2015-05-30
  • 2014-09-08
  • 2016-12-28
相关资源
最近更新 更多