【问题标题】:How do I store a changing variable obtained from an iteration, to use it in future iterations?如何存储从迭代中获得的变化变量,以便在未来的迭代中使用它?
【发布时间】:2014-10-02 16:05:29
【问题描述】:

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

  • 我想保持m(k,i)constant 以便k+1th 迭代的ith 迭代是相同的,即:m(k+1,i)= m(k,i)y(k,i)x(k,i) 保持相应的变化,直到if不满足条件。然后,m(k,i) 重置并在再次满足条件时重新启动序列,但使用 CURRENT y(k,i)x(k,i) 获取另一个常量 m(k,i)

     for k=1:200 
        for i=1:49
           if d_p(i)<rp 
                m(k,i)= y(k,i)/x(k,i); %given previous values of x,y
                const = m(k,i);
    
                u1(i,k)= x(k,i)+cosd(a_s(i,k))/const + sind(a_s(i,k));    %matrix a_s is known.
                u2(i,k)= -4*(y(k,i)+x(k,i)/const) -3*(theta_s(i,k)-90);
           else 
                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
    

任何帮助将不胜感激!

【问题讨论】:

  • 似乎您应该使用m(i) 而不是m(k,i),这样k 的下一次迭代将重用m 的相同向量(直到您更改某些元素)
  • 谢谢@BenVoigt。如果我使用m(i),下一次迭代不会为m(i) 重新分配一个新值,因为y(k,i)x(k,i) 在每次迭代k 时都会发生变化?
  • 如果你需要 m(k,i) 而不是 m(i),你能在第一个 for 循环中放一个 (if k &gt; 1) m(k,:) = m(k-1,:) 吗?
  • @Trogdor @BenVoigt 刚刚对x(k+1,:)y(k+1,:) 的位置进行了编辑。他们应该在内部 for 循环之后,道歉。
  • @dee:只有满足您的条件,它才会分配一个新值。否则,上一次迭代的值将保留在向量中。

标签: matlab iteration constants


【解决方案1】:

我不确定这是否满足确切的需求,但这是一个尝试。

我引入了两个变量,freezelastval。我使用 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

【讨论】:

  • 请注意,这会将值从m(k,i) 传递到m(k,i+1),而不是m(k+1,i)。为了解决这个问题,freeze 和 lastval 应该是在 i 上索引的向量。
  • 真的,感谢@BenVoigt 的澄清,
猜你喜欢
  • 2017-11-08
  • 1970-01-01
  • 2021-02-02
  • 2021-08-15
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多