首页 > 解决方案 > 如何嵌套循环以使整个事物重复 100 倍

问题描述

我有一个循环,我试图围绕它创建另一个循环,但我不确定语法应该是什么。这是我的代码:

for (?)
    for i=1:6
        r(i)=normrnd(0,0.1*sy);
        y_new=A+B*x+r;
    end
    % estimate new A and B
    [mm,nn]=size(x); DoF=mm-2;
    x_mean=mean(x);
    y_mean=mean(y_new);
    xp=(x-x_mean);
    yp=(y_new-y_mean);
    num=sum(xp.*yp);
    dem=sum(xp.*xp);
    B_new=num/dem;
    A_new=y_mean-B_new*x_mean;
end

我不确定在 for 循环中放入什么以使其重复 100X。我假设我需要“for i=1:100”,但是我不确定在循环中的哪个位置设置我的 x(i) 以获得预期的结果。我什至不确定我是否正确地将第一个循环嵌套在其中。我正在尝试使用 normrnd 创建一组 6 个新的 y 值,然后运行线性回归以生成新的 A 和 B(斜率和截距),然后我想将整个过程重复 100 倍。

标签: matlabloopsfor-looplinear-regressionnested-loops

解决方案


除非你有特定的理由不向量化你的normrnd()调用,你只需要一个级别的fors:

%sy,A,B,x initialized elsewhere
for i=1:100
    r=normrnd(0,0.1*sy,[6 1]);
    y_new=A+B*x+r;
    clear r;

    % estimate new A and B
    [mm,nn]=size(x);
    DoF=mm-2;
    x_mean=mean(x);
    y_mean=mean(y_new);
    xp=(x-x_mean);
    yp=(y_new-y_mean);
    num=sum(xp.*yp);
    dem=sum(xp.*xp);
    B_new=num/dem;
    A_new=y_mean-B_new*x_mean;
    %set B=B_new and A=A_new for the next iteration maybe?
end
clear i;

推荐阅读