假设一个 5 的动态列表,如果其中一个发生变化,所有其他的都会相应地发生变化以保持总和为 1。它来自一个实际问题,即总共 1 的 5 个概率,如果其中一个发生变化(通过 Slider),所有的其他人也会向相反的方向变化,并保持总和为 1。
这是我尝试的代码:
v = {0.2, 0.2, 0.2, 0.2, 0.2};
v[[1]] = Dynamic[val];
Dynamic[val]
Slider[Dynamic[val]]
sum = 1;
Dynamic[v]
f := (#/(sum - #))*(sum - val) &
Slider[Dynamic[v[[1]], f /@ v], {0, 1}]
Slider[Dynamic[v[[2]], f /@ v], {0, 1}]
Slider[Dynamic[v[[3]], f /@ v], {0, 1}]
Slider[Dynamic[v[[4]], f /@ v], {0, 1}]
Slider[Dynamic[v[[5]], f /@ v], {0, 1}]
我的意图是创建一个纯函数 f ,当列表 v 的元素发生更改时,它将允许按照 sum 为 1 的规则更新列表。但这并不像我认为的那样起作用。
提前致谢!