【问题标题】:Matlab: For loop with window arrayMatlab:带有窗口数组的For循环
【发布时间】:2015-06-16 08:43:17
【问题描述】:

这是我的一维数组 A,包含 10 个数字:

A = [-8.92100000000000 10.6100000000000 1.33300000000000 ...
     -2.57400000000000 -4.52700000000000 9.63300000000000 ...
     4.26200000000000 16.9580000000000 8.16900000000000 4.75100000000000];

我希望循环像这样通过; (计算平均区间) - 区间长度为 2,4,8

(a(1)+a(2))/2 - value stored in one block of a matrix say m= zeros(10)
then (a(1)+a(2)+a(3)+a(4))/4 ------ mean-----
then (a(1)+a(2)..... a(8))/8

然后移位索引:

(a(2)+a(3))/2; - mean
(a(2)+a(3)+a(4)+a(5))/4
(a(2)+a(3)...a(9))/8

SO basically 2^n length interval

 %____ my code _____%
  A= newArrayy;
  sum=0;
  storeD = zeros(3,9);
  flag=true;

  for k=1:9
      n=1;
       while(true)
            if(k+(2^n-1)<10)

               meanSum= mean(A(k):A(k+2^n-1))
               storeD(n,k)= meanSum;

               n=n+1;
               else
        flag=false;
    end
end

结束

我需要找到每个区间的标准差、协方差和均值,但在 meanSum 行上出现错误。

【问题讨论】:

  • 我需要找到标准差、协方差和均值
  • 您需要每个间隔的所有这些值吗?还有什么错误?
  • 是的,每个间隔的所有这些值。
  • 显示\busy\,计算时间很长
  • 您说您在 meanSum 行遇到错误。你得到什么错误?还是“错误”是运行时间过长?

标签: arrays matlab math for-loop while-loop


【解决方案1】:

在meanSum这一行,你应该写

A(k:k+2^n-1)

您想访问从 k 到 k+2^n-1 的元素。因此,您必须为选择操作提供范围。

一些建议:

  • 使用搜索引擎或知识库收集有关您收到的错误消息的信息。
  • 尝试了解哪个操作失败,以及原则上应该如何工作(在您的情况下:冒号运算符,例如http://de.mathworks.com/help/matlab/ref/colon.html
  • 如果您自己的努力没有成功,请至少发布您收到的错误消息以使问题更清楚。更好的是,提供一个最小的工作示例。在您的情况下,一两行代码就足够了。

【讨论】:

    【解决方案2】:
     A = [-8.92100000000000 10.6100000000000 1.33300000000000 ...
     -2.57400000000000 -4.52700000000000 9.63300000000000 ...
     4.26200000000000 16.9580000000000 8.16900000000000 4.75100000000000];
    
    
       sum=0;
       storeD = zeros(3,9);
    
    
       for k=1:9
       n=1;
       while(1==1)
       if(k+(2^n-1)<=10)
    
            meanSum= mean(A(k:k+2^n-1));
            storedD(n,k)= meanSum
            covVar= cov(A(k:k+2^n-1));
            storedC(n,k)= covVar
            stdDev= std(A(k:k+2^n-1));
            storedS(n,k)= stdDev
    
    
    
                n=n+1;
            else
                break;
            end
         end
      end
    

    所以这行得通:D 感谢您的帮助! while 循环出现错误,因为我没有使用 break 来退出循环。

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      • 2022-01-04
      • 2017-01-17
      相关资源
      最近更新 更多