1

Предположим, что если динамический список 5 будет изменен, все остальные будут соответственно меняться, чтобы сохранить сумму 1. Это исходит из практической проблемы, из которой 5 вероятностей в общей сложности 1, если один из них изменяется (по Slider), все остальные будут также изменяться в противоположном направлении, и держать сумму в 1Дизайн динамического списка Mathematica

и вот моя попытка код:

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}] 

мое намерение состояло в том, чтобы создать чистую функцию п что позволит обновлять список после правила суммы 1, поскольку элементы списка v были изменены. Но это не работает так, как я думал.

Заранее благодарен!

+0

Не похоже, чтобы быть по теме. –

ответ

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}]; 

{[email protected], 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] &]] 

enter image description here