【问题标题】:Where is the 0=1 bug coming from in this Mathematica code?这个 Mathematica 代码中的 0=1 错误来自哪里?
【发布时间】:2016-12-20 03:05:49
【问题描述】:

我正在尝试建立一个简单的选民模型。我需要构建一个矩阵,其值由函数给出。然后聚合它们(在本例中为简单平均值)以确定结果(简单 1 或 0)。然后确定结果与平均值的偏差。我被卡住了,因为每当我的 if 语句产生 0 时,它都会被减法视为 1。请帮忙。 *奖励:如果有一种方法可以为矩阵的每第四行更新一个变量,并让该值结转以更好地模拟和选举,那将不胜感激。 先感谢您, 查尔斯

m = 3
n = 5
p := RandomInteger[]
c = Table[p, {i, m}, {j, n}]
t = Total[c, {2}] 
avg = t/n
Function[If[0.5 <= # <= 1, v = 1, v = 0]] /@ avg
d = Abs[v - avg]
Sum[d, i]

【问题讨论】:

  • 您的 Functionv 中的每个项目重置 avg ,因此它以最后一个值结束。这是有意的还是您希望v 成为一个列表?
  • 是的,我希望它分别计算与 v 中每个值的 0,1 近似值的距离。输出向量 d 像我预期的那样是 1x3,但差异计算不正确。
  • 你可以简单地做v=Round[avg]
  • 感谢它的工作原理,而且更干净。

标签: model wolfram-mathematica mathematical-optimization mathematical-expressions


【解决方案1】:

替换最后三行:

...
v = Function[If[0.5 <= # <= 1, 1, 0]] /@ avg
d = Abs[v - avg] 
Total[d]

【讨论】:

  • 感谢您的帮助@ChrisDegnen。它有效且用途广泛。希望我不会再犯同样的错误。