【问题标题】:Mathematica Dynamic List Design [closed]Mathematica 动态列表设计
【发布时间】:2015-05-10 03:51:00
【问题描述】:

假设一个 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,它允许列表按照 sum 为 1 的规则进行更新,因为列表 v 的元素发生了变化。但这并不像我认为的那样起作用。

提前致谢!

【问题讨论】:

  • 似乎没有跑题。

标签: dynamic graphics slider wolfram-mathematica list-manipulation


【解决方案1】:

如果移动一个滑块,其他四个按比例变化,总和为 1。

v = {0.2, 0.2, 0.2, 0.2, 0.2};

f = Function[{z, k},
   {a, b, c, d, e} = v;
   m = n = o = p = q = 1;
   Switch[k,
    1, a = z; m = 0,
    2, b = z; n = 0,
    3, c = z; o = 0,
    4, d = z; p = 0,
    5, e = z; q = 0];
   sol = Solve[a x^m + b x^n + c x^o + d x^p + e x^q == 1, x];
   xsol = First[x /. sol];
   v = {a xsol^m, b xsol^n, c xsol^o, d xsol^p, e xsol^q}];

{Dynamic@v, Row[{"Total = ", Dynamic[Total[v]]}]}

Slider[Dynamic[v[[1]], f[#, 1] &]]
Slider[Dynamic[v[[2]], f[#, 2] &]]
Slider[Dynamic[v[[3]], f[#, 3] &]]
Slider[Dynamic[v[[4]], f[#, 4] &]]
Slider[Dynamic[v[[5]], f[#, 5] &]]

【讨论】:

    猜你喜欢
    • 2012-04-26
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多