2011-08-14 15 views
6

I desea utilizar un par de cursores para establecer valores enteros para dos variables NLO y NHI, cada uno de los cuales pueden variar individualmente de 1 a 100, pero sujeto a la restricción de que NHI> = NLO. Por lo tanto, establecer un control deslizante para cada variable que tiene un rango que depende de forma dinámica en la otra variable:¿Cómo mantener los valores enteros en los controles deslizantes vinculados dinámicamente?

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

El problema es que tan pronto como se ajusto NHI, su valor se convierte en reales (pantallas con un decimal punto) en lugar de entero. Supongo que esto se debe a que el control deslizante para nHi no puede decir que su argumento de primer rango Dinámico [nLo] es en realidad un número entero, por lo que su valor predeterminado es el valor real. ¿Alguna sugerencia sobre cómo forzar nHi para que se mantenga como valor entero? (Linux Mathematica v8.0.1)

Respuesta

3

O yo no entienden los requisitos de la solución, o este código sólo puede funcionar correctamente en Mathematica 7.


Problema interesante. Esto parece funcionar:

nLo = 1; nHi = 100; 
Column[{Labeled[ 
    Slider[Dynamic[nLo], {1, Dynamic[nHi], 1}, 
    Appearance -> "Labeled"], "nLo", Left], 
    Labeled[Slider[ 
    Dynamic[nHi], {Dynamic[[email protected]@nLo], 100, 1}, 
    Appearance -> "Labeled"], "nHi", Left], 
    Dynamic[{nLo, nHi}]}] 
+0

@Leonid No/lo que no tengo mucho tiempo para esto, pero los deslizadores parecen estar vinculados para mí. Quizás no entiendo bien. –

+0

@Leonid, eché otro vistazo a esto, y todavía no veo dónde falla. Me molesta que pueda ser así de ciego; Por favor, ¿podrías intentar explicar de nuevo cómo mi solución es funcionalmente diferente de la de Heike? –

+0

** Parece que estaba equivocado y la solución funciona perfectamente. Lo siento por eso. + 1 ** –

6

Alternativamente, usted podría hacer algo como

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

¡Esta solución funciona perfectamente! Muchas gracias. – renormalize

+1

+1 Es bueno saber que este uso del segundo argumento de 'Dynamic' se explica en el tutorial dinámico en http://reference.wolfram.com/mathematica/tutorial/IntroductionToDynamic.html en la sección apropiadamente titulada" The Second Argumento de Dynamic ". –

Cuestiones relacionadas