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的所有值的总和。 类似的问题已得到解决,但我无法在我的案例中应用它们。
答案 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);
}
}