simlogo1

 

 

SimQuest 6.4 help

 

 

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