Digitare le equazioni
Un modello di equazione viene inserito come una serie di equazioni. Ci sono alcune restrizioni su cosa puoi e non puoi digitare in una equazione. L'editor di modelli di equazione di SimQuest ha il proprio debugger che ti consente di conoscere se hai fatto un errore dopo che hai cliccato su Accettato. Accertati comunque di aver osservato le regole di base riportate di seguito.
Equazioni semplici
Un tipico modello di equazione semplice ha la forma:
forza = massa * gravità
torsione = forza * lunghezza
In questo modello le variabili di output forza è calcolata moltiplicando levariabili di input massa e gravità. Nella seconda equazione, la forza è usata come una variabile di input per calcolare la torsione. SimQuest usa il valore di forza dalla prima equazione nella seconda.
Nota: Non importa l'ordine in cui inserisci le equazioni; SimQuest determina da sè l'ordine di computazione.
Notae: il caso del nome è importante; Velocità è differente da velocità.
Equazioni differenziali
Un tipico modello di equazione differenziale ha la forma:
accelerazione = forza/massa
velocità = accelerazione
posizioned/dt = velocità
Il significato di questo modello è che in ogni momento durante la simulazione le prime due equazioni tengono ( hold), che vuol dire che l'accelerazione è computata dalla forza, la velocità è computata dall'accelerazione. La terza equazione significa che il cambio di posizione è computato dalla velocità. Se in t=0 la posizione è 10 e la velocità è 2, in t = 1, la poszione sarà 12, assumendo che la velocità in questo periodo non cambia. In termini matematici, l'equazione posizioned/dt è una equazione differenziale e SimQuest sa come trattarle.
Equazioni di stato discreto
Oltre alle equazioni semplici e differenziali, in SimQuest ci sono equazioni di stato discreto. Queste equazioni calcolano il nuovo valore di una variabile al di fuori dello stato corrente. Queste equazioni possono essere utili per trattare eventi discreti, come lanciare un dado. Per esempio:
dado =casuale(1,6,vero)
nuovo(totale) = totale + dad
nuovo(contatore) = contatore + 1
media = totale/contatore
Ogni volta che questo modello viene calcolato, viene calcolato un valore casuale che viene aggiunto ad un totale esistente. Anche il contatore viene incrementato in modo che la media possa essere calcolata. Le equazioni che cominciano con un nuovo(
) = sono equazioni di stato discreto. Le equazioni di stato discreto NON possono essere combinate in un modello con equazioni differenziali, (d../dt =
).
Tipi di variabili
Come noto, le variabili hanno un ruolo centrale dei modelli di equazione in SimQuest. Abbiamo quattro tipi:
Variabili di output
|
Compare sul lato sinistro di una equazione semplice:
outputVariabile = 3 * inputVariabile.
|
Variabili di stato
|
Compare come una variabile dipendente in una equazione differenziale:
dstatoVariabile = 2 * x
|
Variabili di stato discreto
|
Compare nelle equazioni di stato discreto:
nuovo(Statodiscreto)= Statodiscreto + 1
|
Varibili di input
|
Tutte le altre variabili che compaiono sul lato destro delle equazioni.
|
Perchè un modello possa andare in esecuzione, tutti gli stati, lo stato discreto e le variabili di input devono avere un valore iniziale. Dopo che il tuo modello ha compilato, puoi stabilire il valore iniziale nell'editor modello.
Sintassi dell'equazione
La sintassi generale di un modello di equazioni è la seguente:
<nome dellavariabile>= <espressione>
O
<espressione differenziale> = <espressione> (in cui<espressione differenziale> is d<nome della variabile>/dt)
O
<espressione di stato discreto > = <espressione> (in cui<espressione di stato discreto> è un nuovo (<nome della variabile))
I nomi della varibili possono essere una qualsiasi sequenza di lettere e numeri, iniziando con una lettera.
Le espressioni sono scritte come una semplice espressione matematica:
a + b
3
4 * a
a ^ 3 (es. a elevato alla terza a*a*a)
seno a
5 * z + 8 * coseno a
3 *(c + d)
a stringa (usa quota singola per la stringa).
vero
falso (Valori booleani)
a & b (logico e)
pi (= 3.1415926
)
Nota: non è necessario usare parentesi come parti delle funzioni che prendono un argomento, come un seno e un coseno, comunque non sono proibite: cos(a) va bene quanto cos a.
Inoltre, queste funzioni hanno una priorità bassa nell'ordine di calcolo: cos a + 1 è calcolato come (cos a) + 1, non come cos(a+1). Se ti serve l'ultimo, le parentesi dovrebbero essere usate. Le funzioni che possono assumere più di un argomento, come casuale(), hanno sempre le parentesi, anche se il numero dell'argomento è zero!
Sono possibili anche espressioni condizionali:
b = se a > 0 altrimenti 5 5 termine condizione
OR:
b = 5 * se a > 0 allora 1 altrimenti 1 termine condizione
Un costrutto se-allora-altro-ese è parte di una espressione, non è una affermazione. Non è consentito scrivere:
se x < 0 <allora a = 1 altrimenti a = -1 termine condizione (ERRATO!)
Non corrisponde ad un modello di una equazione.
Una equazione può svilupparsi su più righe. Nella maggior parte dei casi, specialmente con costruzioni se-allora-altrimenti-termine condizione, puoi formattare l'equazione come preferisci, ad esempio:
b = se a> 0
allora
<espressione lunga>
altrimenti
<espressione lunga alternativa>
termine condizionef
In alcuni casi devi dire esplicitamente al compilatore che anche la riga successiva è parte della stessa equazione. Puoi farlo digitando una linea bassa (_) al termine della riga.
Inserimento di commenti
I commenti possono essere inseriti nel modello. ci sono due modi per farlo. Commenti brevi possono essere aggiunti al termine della riga inserendo un punto e virgola (;) seguito dal commento. Il commento termina al termine della riga. Commenti più lunghi possono essere segnati da una doppie citazioni:
a = b + c ; commento breve
b = quadrato d
Commento più lungo
si sviluppa su più linee
d = 5 * z _
+ 3 ; equazioni che intenzionalmente si estendono su più di due righe.
Operatori e funzioni
In precedenza, negli esempi sono stati introdotti alcuni operatori e funzioni (sen, cos). La lista completa delle funzioni e degli operatori presenti in SimQuest è:
Nome
|
Descrizione
|
|
|
abs x
|
il valore assoluto di x. abs 3 = 3; abs 3 = 3
|
arcCos x
|
Il coseno inverso di x. Il risultato si colloca tra 0 and pi
|
arcSin x
|
l'inverso seno di x. Il risultato si colloca tra pi/2 e pi/2
|
arcTan x
|
la tangente inversa di x. Il risultato si colloca tra pi/2 e pi/2
|
cos x
|
il coseno di x
|
exp x
|
e alla potenza di x
|
Partefrazionale x
|
the fractional part of x. fractionPart 1.345 = 0.345
|
ln x
|
Il logaritmo naturale di x.
|
log x
|
il logaritmo base 10 di x.
|
x max y
|
il massimo di x e y
|
x min y
|
il minimo di x e y
|
arrotondato x
|
x arrotondato all'intero più vicino. arrotondato 3.2 = 3, arrotondato 3.6=4
|
casuale()
|
ritorna ad un valore casuale tra 0 e 1. Nota: () non sono necessarie!
|
casuale(min, max)
|
ritorna ad un valore casuale tra min and max
|
casuale(min, max, vero)
|
ritorna ad un valore intero casuale tra min e max
|
sen x
|
il seno di of x
|
x quad
|
la radice quadra di x
|
x al quadrato
|
x moltiplicato per se stesso
|
tan x
|
la tangente di x
|
x tronco
|
x arrotondato alla sua parte intera: tronco 3.6 = 3
|
x & y
|
x e y x e y sono Boleani. Vero quando x e y sono veri
|
x | y
|
x e y x e y sono Boleani. Vero quando tanto x quanto y è vero
|
x + y
|
x più y, o, quando x e y sono stringhe, le due stringhe concatenate.
|
x y
|
x meno y
|
x / y
|
x diviso per y
|
x * y
|
x moltiplicato y
|
x ^ ``y
|
x alla potenza di y
|
- x
|
x negativo
|
x // y
|
divisione intera. 7//3 = 2
|
x < y
|
x è minore di y
|
x <= y
|
x è minore o uguale a y
|
x = y
|
x è uguale a y
|
x >= y
|
x è maggiore o uguale a y
|
x > y
|
x è maggiore di y
|
x ~= y
|
x non è uguale a y
|
Vettori
Oltre a lavorare con singoli numeri, SimQuest può anche eseguire calcoli con molti numeri contemporaneamente. Considera il seguente esampio:
dx/dt = v
dv/dt = a
A = F/m
F = - x unità* lunghezzaQuadrata x * Q
A parte l'ultima riga, all'inizio questo potrebbe assomigliare un modello di equazione semplice. Ma possiamo interpretare x come vettore. Un vettore è una variabile che consiste di un numero di numeri. Per esempio, x può essere uguale a [3, 4, 6] (che può essere inserito come valore iniziale nell'editor del modello). Così x rappresenta un vettore tridimensionale. In questo caso xd/dt significa che viene calcolata la modifica di ogni componente dei vettori. In fatti, quasi ogni operazione con vettorsi, si applica alle componenti individuali dei vettori. Ecco alcuni esempi di operazioni con vettori:
x = [0,2,5] assegna un valore di vettore alla variabile
[2,4,6] * [1,2,3] yields: [2,8,18]
4 * [1,2,3] yields: [4,8,12]
sin [1,2] yields: [sin 1, sin 2]
e così via. Ovviemente ci sono più operazioni con vettore specifiche :
v min
|
il valore minimo di un vettore (min [4,3,8] = 3)
|
v max
|
il valore massimo di un vettore (max [4,3,8] = 8)
|
v average
|
il valore medio di un vettore (media [4,3,8] = 5)
|
v lung
|
la lunghezza di un vettore. lunghezza [1,1] = 1.41 (= quad (1 quadrato + 1quadrato)
|
v quadlungh
|
il valore quadro della lunghezza. Incluso per ragioni di efficienza. quadlungh x calcola fasted che (v lung) quadrata
|
v unitario
|
l'unità di vettore, cioèil vettore con lunghezza uguale ad 1, nella direzione di v. unitario [1,1] = [0.71, 0.71]
|
v distanza w
|
la distanza tra due punti x distanza y è uguale alla lunghezza (v w). Nota che v e w devono avere lo stesso formato, altrimenti si verifica un errore
|
v distanzaQuadrata w
|
simile a lunghezzaQuadrata
|
v aggiungi elementiOVettori
|
aggiungi ono o più elementi alla fine di un vettore. [1, 2, 3] aggiungi 4 risulta in [1,2,3,4], [1,2,3] aggiungi [4,5] risulta in [1,2,3,4,5]
|
Vettorecostante (n, x)
|
riporta un vettore della forma [x,x,x
] di dimensione n
|
Vettorecasuale(n, min, max)
|
riporta un vettore di n valori casuali tra min and max
|
passiVettore(avvia, ferma,passo)
|
riporta un valore con valori [avvia, avvia + passo, avvia + 2 passo
, ferma]. passoVectore(0,10, 2) è uguale a [0,2,4,6,8,10]. Se il passo è omesso una dimesione di passo di 1 si assume sia
|
sostituto (vettore, indice, nuovoValore)
|
sostituisce uno o più elementi in a vettore da nuovi valori. v = sostituisci([0,1,2,3,4,5], 3, 10), risulta in [0, 1,10, 3,4,5] (il terzo elemento è sostituito). Elementi multipli possono essere sostituiti uno alla volta usando un vettore per l'indicee nuovi valori: v = sostituisci([0,1,2,3,4,5], [3,5], [10, 20]), risulta in [0, 1,10, 3,20,5]
|
interpola(v, x)
|
ritorna un indice intero del valore nel vettore v, più vicino a x. interpola([0,2,5,8,10,11,12], 9) ritorna 4. Se x è minore del primo elemento, 1 è ritornato. Se x maggiore dell'ultimo elemento, n+1 è ritornato dove n è la dimensione del vettore. Questa funzione è utile quando stai definendo animazioni di immagini
|
dimensioni v
|
il numero di elementi del vettore
|
Stringhe
Qualche volta può essere meglio visualizzare una stringa invece di valore numerico. Perciò le equazioni SimQuest possono anche gestire stringhe e convertire stringhe in numeri e vice versa:
x = una stringa
|
assegna una stringa ad una variabile (usa quotazioni singole)
|
y = allaStringa(z)
|
converti un numero in una stringa
|
k = alValore(y)
|
converti una stringa in un numero
|
risulat = Il valore di x = +allaStringa(x)
|
stringhe concatenate
|
Gestione dell'errore
In some cases equations may result in errors. E.g., y = 1/x, will fail when x = 0. Of course this can be solved with an if-construction:
y = if x ~= 0 allora allaStringa(1/x) altrimenti nondefinita chiusura condizione
but if there are multiple points for error in an equation (e.g. y = 1/((x-3) * (x-a) *(x-b))), then there are three cases to be checked. SimQuest offers an easy way to trap all errors, using the try function:
y = prova(allaStringa(1/((x-3) * (x-a) *(x-b))), non definito)
La funzione prova prova a calcolare e ritorna all'espressione inserita cone suo primo argomento. Se si verifica un errore durante il calcolo, ritorna il secondo argomento. L'utilizzatore dovrebbe aver cura che il secondo argomento non sia esso stesso un errore.
Argomenti correlati:
Aggiungere un modello di equazione
Modifcare un modello di equazione
Settaggi della variabile
Proprietà della simulazione
Copyright University of Twente 2011
|