如何在动态链接滑块中保持整数值?

6
我希望使用一对滑块来设置nLonHi两个变量的整数值,每个变量可单独从1到100范围内取值,但需要满足nHi >= nLo的限制。因此我为每个变量设置了一个滑块,其范围依赖于另一个变量的动态变化。
nLo = 1; nHi = 100;
Column[
 {
   Labeled[Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
           Appearance -> "Labeled"], "nLo", Left
   ],
   Labeled[Slider[Dynamic[nHi], {Dynamic[nLo], 100, 1}, 
           Appearance -> "Labeled"], "nHi", Left
   ],
   Dynamic[{nLo, nHi}]
 }
]

问题在于一旦我调整nHi,它的值就变为实数(显示为带有小数点的数字),而不是整数。我猜这是因为nHi的滑块不能识别其第一个范围参数Dynamic[nLo]实际上是整数,所以它默认使用实数值。有什么建议可以强制nHi保持整数值吗?(Linux Mathematica v8.0.1)
2个回答

6

或者您可以做如下操作:

nLo = 1; nHi = 100;
Column[{Labeled[
   Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
    Appearance -> "Labeled"], "nLo", Left], 
  Labeled[Slider[
    Dynamic[nHi, (nHi = Round[#]) &], {Dynamic[nLo], 100, 1}, 
    Appearance -> "Labeled"], "nHi", Left], 
  {Dynamic[nLo], Dynamic[nHi]}}]

2
+1 很高兴知道Dynamic的第二个参数的使用在动态教程(http://reference.wolfram.com/mathematica/tutorial/IntroductionToDynamic.html)中有详细解释,对应章节名为"The Second Argument of Dynamic"。 - Sjoerd C. de Vries

3
要么是我没有理解解决方案的要求,要么是这段代码只能在Mathematica 7中正确运行。
有趣的问题。这个似乎可以工作:
nLo = 1; nHi = 100;
Column[{Labeled[
   Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
    Appearance -> "Labeled"], "nLo", Left], 
  Labeled[Slider[
    Dynamic[nHi], {Dynamic[Unevaluated@Round@nLo], 100, 1}, 
    Appearance -> "Labeled"], "nHi", Left], 
  Dynamic[{nLo, nHi}]}]

@Leonid 我没有/没有太多时间处理这个问题,但是对我来说滑块似乎是链接的。也许我误解了。 - Mr.Wizard
@Leonid,我又仔细看了一下,还是不明白它哪里出了问题。我很烦恼自己这么盲目;你能再试着解释一下我的解决方案与Heike的功能上有何不同吗? - Mr.Wizard
看来我错了,这个解决方案完美运行。对此我很抱歉。 +1 - Leonid Shifrin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接