我有一个笔记本设置为在方程中使用的数组中进行穷举搜索,如果方程等于定义的变量,则返回变量的值在等式中。唯一的问题是,最后一个For循环中的If语句永远不会运行true/false/none函数。我能够完成任何事情的唯一方法是使用通用打印[blah],然后继续打印所有For循环的每次迭代。这是我到目前为止 -Mathematica - 如果陈述没有执行真/假
AvTarget := -95
arr := {1, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2, 2.2, 2.4, 2.7, 3, 3.3,
3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1, 10}
trueArr := {}
falseArr := {}
For[i = 1, i <= Length[arr], i = i + 1,
For[j = 1, j <= Length[arr], j = j + 1,
For[k = 1, k <= Length[arr], k = k + 1,
If[Abs[
AvTarget - (arr[[i]] + arr[[k]] + (arr[[i]] + arr[[k]])/
arr[[j]])] < 1000, Append[trueArr, {i, j, k}],
Append[falseArr, 1], Append[falseArr, 0]]
]
]
]
Length[trueArr]
Length[falseArr]
我还没有处理在mathematica循环,所以我不知道是什么问题。
编辑 - 好了,所以这段代码现在工作我需要它的方式 -
AvTarget = -95;
tol = 0.1;
arr := {1, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2, 2.2, 2.4, 2.7, 3, 3.3,
3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1, 10}
trueArr = {};
falseArr = {};
For[i = 1, i <= Length[arr], i++,
For[j = 1, j <= Length[arr], j++,
For[k = 1, k <= Length[arr], k++,
If[Abs[
AvTarget - (-(arr[[i]] + arr[[k]] + (arr[[i]]*arr[[k]])/
arr[[j]]))] <= tol,
trueArr = Append[trueArr, {arr[[i]], arr[[j]], arr[[k]]}],
Append[falseArr, 1], Append[falseArr, 0]]
]
]
]
Length[trueArr]
从那里,如果长度> 0我可以再补充一个如果显示的结果。以最接近AvTarget的顺序打印容差的最佳方法是什么?
那真是太酷了。我已经将该代码合并到了它中(并且我也感谢将来使用它),但是当我调用trueArr时,它似乎没有返回值,是否有具体的方法需要这样做? – 2013-03-17 09:46:15
哦,发现问题,放错了方括号,Abs只用于AvTarget - 方程式部分。 – 2013-03-17 09:49:03