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)
k=1:200时的m(k,i)
因为i=1:49
如果d_p(i)我不确定这是否满足确切的需求,但这里有一个尝试 我引入了两个变量,
和freeze
。我使用freeze表示使用lastval
的上一个值,而不是重新计算它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
的相同向量(直到你改变一些元素),谢谢@BenVoigt。如果我使用m
,下一次迭代是否会重新为m(I)
分配一个新值,因为m(I)
和y(k,I)
在每次迭代x(k,I)
?如果你需要m(k,I)而不是m(I),你能把k
在第一个for循环中?@Trogdor@BenVoigt刚刚对(如果k>1)m(k,:)=m(k-1,:)
和x(k+1,:)
的位置进行了编辑。它们应该在内部for循环之后,抱歉。@dee:只有在满足条件的情况下,它才会指定一个新值。否则,来自上一次迭代的值将保留在向量中。请注意,这会将值从y(k+1,:)
传递到m(k,i)
,而不是m(k,i+1)
。为了解决这个问题,freeze和lastval应该在m(k+1,i)
上建立向量索引。真的,感谢您澄清@BenVoigt,i
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