13

I would like to use dependent sliders in Manipulate. First slider K0 should be independent and varied from Kmin to Kmax. Two others sliders K1 and K2 should dependend on K0 so that K1*K2 == K0 should be always true. Is it possible?

István Zachar
  • 47,032
  • 20
  • 143
  • 291

2 Answers2

11

As always, here is the more customizable DynamicModule version:

DynamicModule[{k0, k1, k2, kMin = -1, kMax = 1},
 Panel[Grid[{
   {"k0", Slider[Dynamic[k0, (k0 = #; k2 = k0/k1) &], {kMin, kMax}], Dynamic@k0},
   {"k1", Slider[Dynamic[k1, (k1 = #; k2 = k0/k1) &], {-1, 1}, Exclusions -> {0}], Dynamic@k1},
   {"k2", Slider[Dynamic[k2, (k2 = #; k1 = k0/k2) &], {-1, 1}, Exclusions -> {0}], Dynamic@k2},
   {Panel[Dynamic@Grid[{
         {"k0", k0}, {"k1", k1}, {"k2", k2}, {"k1*k2", k1*k2}}, 
        Alignment -> Left], ImageSize -> {250, 90}], SpanFromLeft}
   }, Alignment -> Left], ImageSize -> {300, 200}]
 ]

Mathematica graphics

Note that division by zero is handled by Exclusions -> {0}.

István Zachar
  • 47,032
  • 20
  • 143
  • 291
1

Here's one thing you might try

 k0Old = 1; k1Old = 1; k2Old = 1; kMin = 1; kMax = 2;
 Manipulate[
   If[k1 != k1Old || k0 != k0Old, k2 = k0/k1; k1Old = k1; k0 = k0Old];
   If[k2 != k2Old, k1 = k0/k2; k2Old = k2;];
      {k0, k1, k2, k1 k2}, {k0, kMin, kMax}, {k1, 0.1, 10}, {k2, 0.1, 10}]
bill s
  • 68,936
  • 4
  • 101
  • 191