Non riesco a ottenere la sintassi per fare ciò che voglio, e ora non sono sicuro se sia possibile.è possibile utilizzare il secondo argomento di Dynamic nell'impostazione delle variabili di controllo in Manipulation?
piccola recensione: Si può fare questo:
{Slider[Dynamic[b], {-2 Pi, 2 Pi}], Dynamic[Sin[b]]}
e ora ogni volta che il cursore si muove, cambia 'b', e il suo peccato [] verrà automaticamente stampato
Ma supponiamo che voglio fare il calcolo (Sin []) direttamente dove è il cursore e mostrare solo il risultato finale di Sin [], quindi posso usare il secondo argomento di Dynamic come questo:
{Slider[Dynamic[b, (b = #; a = Sin[b]; #) &], {-2 Pi, 2 Pi}],
Dynamic[a]}
Ora voglio usare manipolare e fare la stessa cosa. Posso fare lo stesso del primo esempio precedente come questo:
Manipulate[
Sin[b],
Control[{{b, 0, "b="}, -2 Pi, 2 Pi, ControlType -> Slider}]
]
In quanto sopra, manipolare ha curato la roba 'dinamica', e aggiornati Sin [b] ogni volta che cambia 'b' .
Ora, voglio vedere se riesco a fare il secondo caso utilizzando manipolare, così posso scrivere:
Manipulate[
a,
Control[{{b, 0, "b="}, -2 Pi, 2 Pi, ControlType -> Slider}] (*where to insert Sin[b]?*)
]
('a' deve inizializzato ad un valore per la visualizzazione iniziale).
Ma non sono in grado di capire come utilizzare il secondo argomento per "b" in precedenza. Non riesci a capire la sintassi, e ora sono sicuro che sia possibile?
ovviamente, non si può solo scrivere
Manipulate[
a,
{Slider[Dynamic[b, (b = #; a = Sin[b]; #) &], {-2 Pi, 2 Pi}]}
]
Questa non è la sintassi nemmeno valida di manipolare controlli.
La domanda è: è possibile utilizzare il secondo argomento di Dinamico nell'impostazione dei controlli di manipolazione?
Il motivo che sto chiedendo è che potrebbe rendere più semplice il calcolo "localizzato" proprio lì, dove la variabile di controllo cambia e mostra solo il risultato finale altrove. Come una funzione di callback locale in un modo, dove il calcolo relativo alle modifiche per ciascun controllo si trova proprio accanto al punto in cui si trova il controllo.
grazie
aggiornamento 9/16/11
Ebbene, dopo un mese di lotta, finalmente ho il Mathematica CDF attivo e funzionante.
Grazie all'aiuto del trucco mostrato qui da Simon e altri che hanno risposto alle mie domande mentre stavo facendo questo CDF (Leonid, Heike, WReach, Belisarius e altri).
I pochi trucchi che ho imparato qui hanno aiutato a terminare questa dimostrazione, ecco uno link se qualcuno vuole provarlo.
Il design di questo CDF è diverso da tutto quello che ho fatto prima. Si basa su una macchina a stati finiti. C'è solo un simbolo tracciato nell'intero CDF. Usando il secondo argomento della dinamica, il nome dell'evento viene registrato e nell'espressione principale di Manipulate, che esegue le macchine a stati finiti, ha 5 stati in cui può essere inserito, e ci sono 8 eventi. A seconda dello stato corrente e dell'evento corrente appena trascorso, passa al nuovo stato (o può rimanere nello stesso stato, a seconda del caso) e il display principale viene aggiornato. Non è necessario alcun trigger. La macchina a stati funziona alla velocità consentita, controllata solo dalla dimensione del passo temporale.
Questo semplifica notevolmente la logica e consente di gestire l'interfaccia utente molto più avanzata e la logica interdipendente, poiché tutto ora viene eseguito in un modo ben controllato e tutta la logica è in un unico punto.
Senza essere in grado di impostare l'evento utilizzando il secondo argomento di dinamica, l'intero approccio non sarebbe stato possibile.
Ho bisogno di scrivere una nota su questo metodo per renderlo più chiaro.
Quindi, volevo solo ringraziare tutti qui. Ora sto finendo un altro CDF usando questo metodo, una simulazione a pendolo triplo.
Wow, il risultato finale sembra davvero bello! Funziona lentamente sulla mia macchina, ma molte cose fanno ... Sarebbe bello se potessi fornire un link per il download per coloro che non possono usare il plugin del browser. – Simon
@Simon, ho appena aggiunto 2 link lì per il CDF e il notebook stesso. http://12000.org/my_notes/mma_demos/simple_pendulum_damped_driven/index.htm viene eseguito il più velocemente possibile, non esiste un clock diverso dalla Dynamic tracciata. – Nasser
Ora ho un'idea migliore del problema della "lentezza". Quando vengono visualizzate più cose, l'aggiornamento dello schermo inizia a richiedere più tempo e l'intero ciclo rallenta, in attesa che lo schermo venga dipinto ogni volta. Ottenere fps più alti è stato un problema per me con le demo della CDF. Non so se ci sono trucchi per renderlo più efficiente o meno. Ma sicuramente sembra essere dovuto a questo. Quando riduco il numero di grafici/grafici da visualizzare, la simulazione viene eseguita più velocemente. Nessun orologio è usato, solo un ciclo con Show [Graphics [..]] in esso. L'ultima CDF che ho appena terminato ha mostrato questo problema in modo molto chiaro. – Nasser