【发布时间】:2021-08-22 22:32:01
【问题描述】:
我有一个 Do 循环,在其中我正在寻找符合 If 内部条件的某些参数的值,并使用这些值运行另一个 Do 以使用先前找到的值对表达式进行另一次计算,对于满足第一个 Do 循环中条件的参数的每组值,我该如何做到这一点?我所做的,
Do[ a={{a1,a2},{a3,a4}};
a1=RandomReal[{0,1}]; a2=RandomReal[{0,1}];
a3=RandomReal[{0,1}]; a4=RandomReal[{0,1}];
If[Eigenvalues[a][[1]]>Eigenvalues[a][[2]],
PutAppend[{a1,a2,a3,a4,a},"list"]],{100}]//AbsoluteTiming
dn=ReadList["list"];
所以既然我在列表中找到了一些值,
Do[ b={{b1,b2},{b3,b4}};
b1=RandomReal[{0,1}]; b2=RandomReal[{0,1}];
b3=RandomReal[{0,1}]; b4=RandomReal[{0,1}];
h[i_]:=Eigenvalues[b][[1]]dn[[i,1]]-dn[[i,4]]+Tr[b.dn[[i,5]]];
If[h[i]>0&&Eigenvalues[b][[1]]>Eigenvalues[b][[2]],
PutAppend[{b1,b2,b3,b4,b,h[i]},"list2"]],{i,1,Length[dn]}]//AbsoluteTiming
但是正如你所看到的,由于“列表”,即使其中的值不一定满足第二个 Do 循环的条件,我也必须使用内存。我不想使用同一个 Do 循环并将所有条件放在同一个 If 中。
【问题讨论】:
标签: loops iterator iteration wolfram-mathematica do-loops