如何在Matlab中的数组中嵌套for循环中存储inner for循环的值?

时间:2016-03-01 07:38:15

标签: arrays matlab nested

pvec = 1:3;
    for i = 1:3
      p=pvec(i);
        for m = 1:p
        erfun=erfc(5/(2*sqrt(p-m)));
        suma(m) = sum(erfun)
        end
    end

我想为每个p保存erfun的所有值的总和,即我想在最终数组中有3个值,但是数组中的每个值都应该是erfun的所有值的总和。 类似的问题已得到解决,但我无法在我的案例中应用它们。

1 个答案:

答案 0 :(得分:1)

最小修复方法(对您自己的代码)

对您的代码进行以下修改将产生您要求的结果

suma = zeros(3,1);
pvec = 1:3;
for i = 1:3
  p=pvec(i);
  for m = 1:p
      erfun=erfc(5/(2*sqrt(p-m)));
      suma(i) = suma(i) + erfun;   %// <-- modified here
  end
end

我还包括suma = zeros(3,1),我认为您的代码中也有suma;使用足够的条目预分配arrayfun

替代方法(for

另一个解决方案,您可以使用arrayfun命令来摆脱内部suma = zeros(1,3); pvec = 1:3; for i = 1:3 p=pvec(i); suma(i) = sum(arrayfun(@(x) erfc(5/(2*sqrt(p-x))), 1:p)); end 循环:

arrayfun

替代方法#2(for

更简洁的解决方案,包括arrayfun来电中suma = arrayfun(@(x) ... sum(erfc(5./(2*sqrt(kron(x, ones(1,x-1)) - 1:(x-1))))), pvec) 外圈的目的:

arrayfun

这里我们使用了kron命令,该命令将在上面的kron(1, []) = [] %// empty array kron(2, [1]) = 2 kron(3, [1 1]) = [3 3] 命令中隐式使用,如下所示

erfc

并使用1/sqrt(0)添加0始终为erfc(Inf) = 0(即m=p的事实,因此我们无需评估案例suma = 0 0.0004 0.0128 因为它不会增加我们的总和)。

<强>结果

以上所有方法都会产生结果

@Override
public String toString() {
    return String.valueOf(mVal);
}
public String inOrder(Tree root) {
    List<Tree> inOrder = new ArrayList<>();
    inOrderRecursively(root, inOrder);
    return inOrder.toString();
}

private void inOrderRecursively(Tree Node, List<Tree> inOrder) {
    if (Node.mLeft != null) {
        inOrderIt(Node.mLeft, inOrder);
    }
    inOrder.add(Node);
    if (Node.mRight != null) {
        inOrderIt(Node.mRight, inOrder);
    }
}