Matlab 如何存储从迭代中获得的不断变化的变量,以便在将来的迭代中使用它?

Matlab 如何存储从迭代中获得的不断变化的变量,以便在将来的迭代中使用它?,matlab,iteration,constants,Matlab,Iteration,Constants,我试图在满足某些条件后在迭代中存储一个变量。存储的变量将在以后的迭代中使用,并在不再满足条件时重置。 例如: 我希望保持m(k,I)恒定,以便k+1第次迭代的I第次迭代是相同的,即:m(k+1,I)=m(k,I)和y(k,I)和x(k,I)如果不满足条件,则保持相应的更改。然后,m(k,i)重置并重新启动序列(如果再次满足条件),但使用当前y(k,i)和x(k,i)获得另一个常数m(k,i) k=1:200时的 因为i=1:49 如果d_p(i)我不确定这是否满足确切的需求,但这里有一个尝试

我试图在满足某些条件后在迭代中存储一个变量。存储的变量将在以后的迭代中使用,并在不再满足条件时重置。 例如:

  • 我希望保持
    m(k,I)
    恒定,以便
    k+1
    第次迭代的
    I
    第次迭代是相同的,即:
    m(k+1,I)=m(k,I)
    y(k,I)
    x(k,I)
    如果不满足
    条件,则保持相应的更改。然后,
    m(k,i)
    重置并重新启动序列(如果再次满足条件),但使用当前
    y(k,i)
    x(k,i)
    获得另一个常数
    m(k,i)

    k=1:200时的
    
    因为i=1:49
    
    如果d_p(i)我不确定这是否满足确切的需求,但这里有一个尝试

    我引入了两个变量,
    freeze
    lastval
    。我使用freeze表示使用
    m(k,I)
    的上一个值,而不是重新计算它
    lastval
    只存储最近计算的值以供重用

    freeze = false;
    for k=1:200
        for i=1:49
            if d_p(i)<rp
                if not(freeze)
                    m(k,i)= y(k,i)/x(k,i); %given previous values of x,y
                    freeze = true;  
                    lastval = m(k,i);
                else
                    m(k,i) = lastval;
                end
    
                u1(i,k)= x(k,i)+cosd(a_s(i,k))/m(k,i) + sind(a_s(i,k));    %matrix a_s is known.
                u2(i,k)= -4*(y(k,i)+x(k,i)/m(k,i)) -3*(theta_s(i,k)-90);
            else
                freeze = false;
                u1(i,k)=0;
                u2(i,k)=0;
            end
        end
        x(k+1,:)=x(k,:)+u1(:,k).*cosd(a_s(:,k))';
        y(k+1,:)=y(k,:)+u2(:,k).*sind(a_s(:,k))';
    end
    
    freeze=false;
    对于k=1:200
    因为i=1:49
    
    如果d_p(i)看起来像是你应该使用
    m(i)
    而不是
    m(k,i)
    ,那么
    k
    的下一次迭代将重用
    m
    的相同向量(直到你改变一些元素),谢谢@BenVoigt。如果我使用
    m(I)
    ,下一次迭代是否会重新为
    m(I)
    分配一个新值,因为
    y(k,I)
    x(k,I)
    在每次迭代
    k
    ?如果你需要m(k,I)而不是m(I),你能把
    (如果k>1)m(k,:)=m(k-1,:)
    在第一个for循环中?@Trogdor@BenVoigt刚刚对
    x(k+1,:)
    y(k+1,:)
    的位置进行了编辑。它们应该在内部for循环之后,抱歉。@dee:只有在满足条件的情况下,它才会指定一个新值。否则,来自上一次迭代的值将保留在向量中。请注意,这会将值从
    m(k,i)
    传递到
    m(k,i+1)
    ,而不是
    m(k+1,i)
    。为了解决这个问题,freeze和lastval应该在
    i
    上建立向量索引。真的,感谢您澄清@BenVoigt,
    freeze = false;
    for k=1:200
        for i=1:49
            if d_p(i)<rp
                if not(freeze)
                    m(k,i)= y(k,i)/x(k,i); %given previous values of x,y
                    freeze = true;  
                    lastval = m(k,i);
                else
                    m(k,i) = lastval;
                end
    
                u1(i,k)= x(k,i)+cosd(a_s(i,k))/m(k,i) + sind(a_s(i,k));    %matrix a_s is known.
                u2(i,k)= -4*(y(k,i)+x(k,i)/m(k,i)) -3*(theta_s(i,k)-90);
            else
                freeze = false;
                u1(i,k)=0;
                u2(i,k)=0;
            end
        end
        x(k+1,:)=x(k,:)+u1(:,k).*cosd(a_s(:,k))';
        y(k+1,:)=y(k,:)+u2(:,k).*sind(a_s(:,k))';
    end