将当前迭代与之前的迭代,MATLAB进行比较

时间:2015-08-22 16:41:59

标签: matlab if-statement matrix struct constraints

如何将循环中的当前迭代与前一次迭代进行比较?

例如,我想看看矩阵中的一个元素(它是结构的一部分)是否低于同一个元素,但是来自前一个迭代(显然这些不是相同的值,但是相同的元素,只是不同的迭代)。为了更清楚,我需要调用矩阵元素mystruct(h).field(j,1)并查看该元素是否低于mystruct(h-1).field(j,1)

a=rand(20,1);
field = 'field';
for h=1:20
    value = 1.4*rand(20,1);
    value1 = zeros(20,1);
    mystruct(h) = struct(field,value);
    NEWstruct(h) = struct(field,value1);
end

for j=1:20
    if mystruct(1).field(j,1)<a(j,1)
        NEWstruct(1).field(j,1)=mystruct(1).field(j,1);
    else
        NEWstruct(1).field(j,1)=a(j,1);
    end
end

此后,我必须查看下一次迭代mystruct(2).field(j,1)是否低于之前的迭代NEWstruct(1).field(j,1),如果是,请将其值分配给NEWstruct(2).field(j,1)。如果不是,那么它应该等于mystruct(1).field(j,1)

1 个答案:

答案 0 :(得分:0)

在一般情况下,您可以使用以下数组:

field_data = cat(3,mystruct.field);

greater = diff(field_data, [], 3)>0;

现在greater是一个3D阵列,由大小为fieldsize(mystruct)-1层的2D数组组成。每个层对应于每次迭代的变化。因此,如果值增加,您可以1,如果值减少,则0field_data(:,:,1) = 0.0358 0.4735 0.6074 0.1759 0.1527 0.1917 0.7218 0.3411 0.7384 field_data(:,:,2) = 0.2428 0.7655 0.0911 0.9174 0.1887 0.5762 0.2691 0.2875 0.6834 field_data(:,:,3) = 0.5466 0.6476 0.9452 0.4257 0.6790 0.2089 0.6444 0.6358 0.7093 greater(:,:,1) = 1 1 0 1 1 1 0 0 0 greater(:,:,2) = 1 0 1 0 1 0 1 1 1 例如,你可能有这样的事情:

min(mystuct(h-1).field(j),mystuct(h).field(j))

使用此数组,您只需要为每个可能的更改检查正确的值。

在您的特定情况下,如果您想要的只是将最小NEWsctruct(h).field(j)分配给for h=2:length(mystruct) for j=1:20 NEWstruct(h).field(j) = min(mystruct(h-1).field(j),mystruct(h).field(j)); end end ,您可以简单地迭代所有值,添加以下代码:

field_data = cat(2,mystruct.field);           % Gather the whole data in a matrix
minimum = min(field_data(:,2:end),field_data(:,1:end-1));  % Get the proper values (as a matrix)
NEWstruct(2:end) = cell2struct(num2cell(minimum,1),field,1);  % Assign the values to the struct

或使用矢量化形式:

<div class="portoTextDetails">
   <p>
     text....</a>
   </p>
</div>