informatematica

epinoemi matematinformatici di Gaetano Speranza      

 


m i d i :



audio da URL :




il tuo browser non supporta java oppure java è disattivato!

26/10/2004

 

 

gioca con le isometrie di base

 

 

 gaespes 

21/10/2004

 

 

derivate e antiderivate (primitive)

 

 

 gaespes 

17/10/2004

 

 

matematica di base

 

 

 gaespes Nella mappa sono presenti esclusivamente collegamenti interni a file presenti sullo stesso sito "informatematica".
Per questo motivo non sono "linkate" tutte le voci.
Per "escursioni" riguardanti tali argomenti non linkati (e, ovviamente, anche per approfondimenti di vario genere sulle voci già  linkate nella mappa) fai riferimento ai collegamenti presenti sul lato sinistro della pagina di informatematica.
COME PER TUTTO IL RESTO DEL SITO, E' NECESSARIO ABILITARE IL BROWSER ALL'USO DI JAVA.

 


13/10/2004

 

approssimazione dell'esponenziale immaginario exp(it) nell'intervallo t [0,1]

( premi Step per aumentare il numero naturale n e Clear per ripristinarlo a 1 )

 

approssimazione di exp(at), con a complesso, nell'intervallo t [0,1]

( fissa a e premi Step per aumentare il numero naturale n e Clear per ripristinarlo a 1 )

 

 

 gaespes per maggiori dettagli: funzione_exp.html

11/10/2004

 

approssimazione dell'esponenziale naturale nell'intervallo [0,1]

( premi Step per aumentare il numero naturale n e Clear per ripristinarlo a 1 )

 

 gaespes Notare che la funzione esponenziale che passa per tutti i punti della "gradinata" in figura è:  f(x) = ( 1 + 1/n )^(n x), ossia ( (1+1/n)^n )^x .
Prova a digitare, nel pannello della figura, come valore di f, al posto di e^x l'espressione (1+1/n)^(n*x .
Quindi abbiamo una successione di funzioni esponenziali, ognuna di base (1+1/n)^n, che converge alla funzione exp(x) = e^x .
 


10/10/2004

 

ancóra sull'esponenziale naturale

clicca sul pulsante :

prendiamo un punto a = ( ax , ay ) = ( h , k ) "vicino" al punto (0,1)
suddividiamo l'asse delle ascisse con i punti n h (con n interi)
indichiamo con Zh l'insieme dei numeri della suddetta suddivisione
ipotizziamo che una funzione f definita su Zh sia tale che :

f( 0 ) = 1 ; f( h ) = k ; f( x+h ) = f( x ) k , per ogni x in Zh

a parole: f passa per (0,1) e (h,k) e all'incrementare la x di h
f(x) viene moltiplicata per k
ne deriva che f( n h ) = k n . Posto x = n h , si ha f( x ) = k x / h .
Poniamo 1 + p = ay = k : si ha f( x ) = [ (1 + p) 1 / h ] x
quindi f è l'esponenziale di base (1+p) 1 / h .
Se avviciniamo il punto a al punto (0,1) l'esponenziale f varia
secondo il tipo di avvicinamento di a al punto (0,1) e "intorno" a
(0,1)   f   diventa "instabile" .
Proviamo a far tendere a al punto (0,1) con a sulla retta y = 1+x
Ciò significa che ay = 1 + ax , ossia k = 1 + h .
in tal caso si ha f( x ) = [ (1 + h) 1 / h ] x e ...
... se prendiamo h = 1/n otteniamo (1 + h) 1/h = (1 + 1/n) n
Quando h tende a 0, a, vincolato alla retta, tende a (0,1) ...

... e f( x ) tende a e x ; il segmento verticale in figura è (1,0)_(1,e)

Cosa accade se l'avvicinamento è effettuato sulla retta y=1+m x ?

 

 gaespes L'esponenziale naturale nasce quindi nel momento in cui, invece di partire da (0,1) e da un punto "distante" tipo (1,2) per "estrapolarne" una funzione (ossia determinarne una che passi per i due punti dati) che porti somme in prodotti (nel caso dei punti detti essa è y=2^x), partiamo da (0,1) e da un punto (h,1+h) "infinitamente vicino" a (0,1) e procediamo a estrapolare una funzione passante per tali due punti e che porti somme in prodotti.
"Infinitamente vicino" significa che con h tendente a 0 la funzione trovata, che è un'esponenziale, ma non l'esponenziale naturale esatta, tende all'esponenziale naturale esatta.
Vedi anche gli ulteriori documenti :    
figura       
esponenziale 
naturale  e  capitalizzazioni

 


09/10/2004

 


 

Che cos'è un algoritmo

Informazioni, dati e strutture dati

Rappresentazione degli algoritmi

Alcuni esempi di algoritmi

Imparare a programmare

Introduzione a Javascript

 

 gaespes per JavaScript c'è anche il link seguente

08/10/2004

 

 I t e r a z i o n e    " p e r   v e r o "      ( ciclo   " w h i l e "  ) 

Nell'algoritmo per l'implementazione del costrutto VECTOR abbiamo visto che uno stesso gruppo  I  di istruzioni viene ripetuto ciclicamente per tutto il tempo in cui una condizione  C  viene trovata vera. Questo ciclo è detto "iterazione per vero" oppure "iterazione con uscita per falso". Il diagramma è :

       

                 :
                 :
                _|_
               /   \ falso
          *->-/  C  \--->*
          |   \     /    |
          |    \_ _/     |
          |  vero|       |
          |    __|__     |
          |   |     |    |
          *-<-|  I  |    |
              |_____|    |
                         |
                 *<------*
                 |
                 :
                 :
un altro possibile diagramma, perfettamente equivalente, è :
                 :
                 :
                 |<----------*
                _|_          |
               /   \ vero    |
              /  C  \--->*   |
              \     /    |   |
               \_ _/   __|__ ^
                 |    |     ||
               falso  |  I  ||
                 |    |_____||  
                 :       |   |
                 :       *->-* 

          

 

La versione testuale di tale ciclo iterativo è :

mentre  C  esegui  I

(   while   C  do  I   )

 

La naturale definizione sarebbe teoricamente:

   (1) mentre(C,I) := IF( C , mentre(C,I) , "fine ciclo" )

Però Derive quando valuta una funzione definita dall'utente per prima cosa cerca di valutarne gli argomenti (ossia gli input; in questo caso C e I) e solo dopo applica la definizione della funzione; pertanto la valutazione della espressione mentre(C,I) di sopra verrebbe effettuata con i valori trovati per C e per I la prima volta che tale valutazione è eseguita e, se C risulta vera si entra in un loop senza uscita, mentre se C risulta falsa si accede subito
alla stringa "fine ciclo".

Esiste però un operatore (operatore "apice", con simbolo ' ) , detto operatore di "citazione" ("quote operator") o di "differimento di valutazione", che anteposto a una espressione produce un'espressione "citante" la cui valutazione è l'espressione "citata". Ad esempio se, dopo aver posto x := 4 , valutiamo (col pulsante "=") x+2 , il risutato della valutazione è 6 , mentre se valutiamo '(x+2) oppure 'x + 2 il risultato è x+2, in quanto nel primo caso rimane inalterata (quindi non valutata) l'intera espressione (x+2) , mentre nel secondo rimane non valutata la variabile x (che è un tipo elementare, o "atomico", di espressione).

Nelle espressioni funzionali con argomenti "apiciati" (ossia she sono espressioni sottoposte all'operatore  ' ) Derive non effettua la preventiva valutazione di tali argomenti.

Perciò potremmo usare nell'espressione mentre(C,I) espressioni con apici; ad esempio: C := '(x<=10) e I := '[v := APPEND(v, [x^2]); x := x + 1] e in tal caso Derive non valutando C e I produce internamente, tramite la definizione di sopra

     (2)     IF( '(x<=10) , mentre('(x<=10),'[v := APPEND(v, [x^2]); x := x + 1]) , "fine ciclo" )
poi semplifica ciò che può valutare e produce:
    (2bis)   IF( x<=10 , mentre(x<=10,[v := APPEND(v, [x^2]); x := x + 1]) , "fine ciclo" )
quindi non effettua alcun ciclo; e, del resto, se continuassimo con la valutazione della espressione (2) ricadremmo nel loop senza termine (dal momento che adesso gli apici non ci sono più).

Esiste però un modo per costringere Derive a valutare direttamente un'espressione con apice. Uno possibile e definire le seguenti funzioni :

     testa(L) := L SUB 1

     valuta(E) := testa([E])

La prima prende il primo elemento (detto "la testa") di una lista, ad esempio:

                           testa([1,2,3,4])   viene valutato :    1

La seconda prende una espressione E, la valuta, usa il risultato r per costruire una lista [r] costituita solo da tale risultato e poi valuta testa([r]), per la quale cosa valuta r nell'espressione [r] per poi applicare la definizione della funzione testa.

Pertanto se partiamo dall'espressione (un numero è una particolare espressione, costante) 5 l'espressione valuta(5) viene valutata seguendo i seguenti passi :
- si valuta il 5 e il risultato è ... 5 ;
- si segue la definizione della funzione "valuta" e quindi si ottiene testa([5]) ;
- si valuta l'input ("argomento") presente nell'espressione testa([5]) , ossia [5], e si ottiene testa([5]) ;
- si applica la definizione della funzione "testa" pervenendo a [5] SUB 1, ossia 5.

Proviamo, dopo aver gia definito x:=4 come già fatto, a valutare l'espressione
valuta(x) seguendo gli stessi passi di sopra :
- si valuta x e il risultato è 4 ;
- si segue la definizione della funzione "valuta" e quindi si ottiene testa([4]) ;
- si valuta l'input ("argomento") presente nell'espressione testa([4]) , ossia [4], e si ottiene testa([4]) ;
- si applica la definizione della funzione "testa" pervenendo a [4] SUB 1, ossia 4.

Proviamo adesso a valutare l'espressione valuta('x) :
- non si valuta subito l'argomento 'x (in quanto è sotto la "protezione" dell'apice);
- si segue la definizione della funzione "valuta" e quindi si ottiene testa(['x]) ;
- si valuta l'input ("argomento") presente nell'espressione testa(['x]) , ossia ['x], e si ottiene testa([x]) ;
- si applica la definizione della funzione "testa" pervenendo a [x] SUB 1, ossia x ;
- l'ultima fase della valutazione di una funzione è la semplificazione, perciò l'espressione x viene valutata 4 .

Come vediamo, così facendo partiamo da 'x e otteniamo non x ma il valore 4 della variabile x

Altro esempio: valutiamo l'espressione (apiciata) '(x>0) :
- non si valuta '(x>0) ;
- si segue la definizione della funzione "valuta" e quindi si ottiene testa(['(x>0)]) ;
- si valuta (semplifica) tale ultima espressione, ottenendo testa([x>0]) ;
- si valuta testa([x>0]), quindi si provvede anzitutto a valutare [x>0] in [true] ;
- si applica la definizione della funzione "testa" pervenendo a [true] SUB 1, ossia true.

Un'altra osservazione sulla valutazione delle espressioni: se si è definita una funzione di due argomenti, ad esempio

        potenza(base,esponente) := base ^ esponente

e la si applica a più argomenti di quelli usati nella definizione, ad esempio :

     (3)     potenza(3,2,x:=3)

la definizione usa solo i primi argomenti che effettivamente le servono in base alla definizione pur però valutando tutti gli argomenti presenti in (3). Quindi, valutando la (3) si ottiene l'atteso 9 (ossia 3^2), ma ... x è diventato 3
(ricordiamoci che prima era stato definito come 4).

Applichiamo quanto visto alla definizione della funzione "mentre".

Definiamo:
                    mentre(C,I) := IF( valuta(C) , mentre( C , I , valuta(I) ) , "fine ciclo" )

  Poniamo preliminarmente le due definizioni ("assegnamenti")   x:=0    e   v:=[ ]   e supponiamo che   C  sia  '(x <= 10)   e che  I  sia  '[v := APPEND(v, [x^2]); x := x + 1].
In quanto apiciate, C e I vengono passate non valutate, ma poi IF determina la valutazione dell'espressione valuta(C), la quale risulta true per cui si procede a valutare l'espressione mentre(C,I,valuta(I)), il che comporta come effetto collaterale la valutazione dell'espressione valuta(I) ( cosa che fa eseguire I stessa ), prima di passare alla esecuzione di mentre(C,I), il che fa ricominciare il tutto, ma dopo la valutazione di I  ( che ha modificato il valore della variabile x )

 

In definitiva:

digitiamo in Derive (riga di editing):



testa(L) := L SUB 1

valuta(E) := testa([E])

mentre(C,I) := IF(valuta(C),mentre(C,I,valuta(I)),"fine ciclo")


Verifichiamo il funzionamento digitando, e poi valutando :


[v := []; x := 0; mentre('x <= 10, '[v := APPEND(v, [x^2]); x := x + 1]); v; x]

l'output sarà :

 
          
                    ¦                    []                     ¦
                    ¦                                           ¦
                    ¦                     0                     ¦
                    ¦                                           ¦
                    ¦                fine ciclo                 ¦
                    ¦                                           ¦
                    ¦ [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ¦
                    ¦                                           ¦
                    ¦                    11                     ¦            
  

 

 

 gaespes Lo scopo di questo post è quello di mostrare come il ciclo iterativo per vero sia definibile solo con l'uso di IF e della "ricorsione in coda".
Volendo invece approfittare del costrutto ITERATE di Derive possiamo usare le seguenti due definizioni:
ripeti(a) := ITERATE(a, x__)
mentre(C, I) := ripeti(IF(C,I, "stop"))
Volendo usare la funzione "ripeti" anche un numero prefissato di volte, possiamo usare la definizione alternativa:
ripeti(a, n) := ITERATE(a, x__, "", n)
A proposito di ITERATE, possiamo definire la funzione "valuta" non usando le testa di una lista ma come:
valuta(t) := ITERATE(x__, x__, t, 1)

gaespesUn'applicazione di esempio: poligoni regolari tracciati nello stile del LOGO.
il testo da digitare in derive è:

testa(t):=t SUB 1
val(t):=testa([t])
mentre(c,i):=IF(val(c),mentre(c,i,val(i)),"ciclo eseguito")
output(u):=u SUB DIMENSION(u) SUB 1
poligono(n,L):=output([[[a:=0,p_:=[0,0],i_:=1,a_:=2*pi/n,v_:=[p_]]],~
[mentre('(i_<=n),'[[p_:=p_+[COS(a),SIN(a)]*L],[v_:=APPEND(v_,[p_])],[a:=a+a_],[i_:=i_+1]])],[v_]])
poligono(60,0.1)

valuta e poi rappresenta l'ultima espressione.
 


07/10/2004

 

Valutando ( mediante il pulsante "=" ) con Derive 5 il programma :

       
¦                    2 ¦
¦ espressione(x) := x  ¦
¦                      ¦
¦      inizio := 0     ¦
¦                      ¦
¦      fine := 10      ¦
¦                      ¦
¦      passo := 2      ¦

     ¦                        v := []                        ¦
     ¦                                                       ¦
     ¦                      x := inizio                      ¦
     ¦                                                       ¦
     ¦  /          ¦ v := APPEND(v, [espressione(x)]) ¦    \ ¦
p := ¦  |          ¦                                  ¦    | ¦
     ¦  |          ¦          x := x + passo          ¦    | ¦
     ¦IF|x <= fine,¦                                  ¦, v | ¦
     ¦  |          ¦               p                  ¦    | ¦
     ¦  \          ¦                3,1               ¦    / ¦
          

l'output ottenuto è :

 
    ¦                       []                        ¦
    ¦                                                 ¦
    ¦                        0                        ¦
    ¦                                                 ¦
    ¦ ¦                     [0]                     ¦ ¦
    ¦ ¦                                             ¦ ¦
    ¦ ¦                      2                      ¦ ¦
    ¦ ¦                                             ¦ ¦
    ¦ ¦ ¦                 [0, 4]                  ¦ ¦ ¦
    ¦ ¦ ¦                                         ¦ ¦ ¦
    ¦ ¦ ¦                    4                    ¦ ¦ ¦
    ¦ ¦ ¦                                         ¦ ¦ ¦
    ¦ ¦ ¦ ¦             [0, 4, 16]              ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦                                     ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦                  6                  ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦                                     ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦         [0, 4, 16, 36]          ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦                                 ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦                8                ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦                                 ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦     [0, 4, 16, 36, 64]      ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦                             ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦             10              ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦                             ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦ ¦ [0, 4, 16, 36, 64, 100] ¦ ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦ ¦                         ¦ ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦ ¦           12            ¦ ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦ ¦                         ¦ ¦ ¦ ¦ ¦ ¦ ¦
    ¦ ¦ ¦ ¦ ¦ ¦ ¦ [0, 4, 16, 36, 64, 100] ¦ ¦ ¦ ¦ ¦ ¦ ¦        
  

( la forma delle espressioni data qui sopra è simile a quella usata da Derive 5 per la rappresentazione sul foglio di lavoro, quindi qui non si può effettuare il "copia e incolla" con la riga di editing )

 

 gaespes Ovviamente il programma p traccia proceduralmente il processo effettuato dal costrutto VECTOR ed è utile per capire l'algoritmo nel caso di valori bassi della variabile "fine" (altrimenti le matrici di traccia sono enormi).
Inoltre, dopo la prima valutazione dell'espressione che definisce il programma p, la variabile p resta associata alla matrice di traccia che risulta come output, per cui per far girare il programma nuovamente (eventualmente con altri valori ed espressione) bisogna fare un "refresh" della definizione di p tramite doppio clic e INVIO sull'espressione stessa che definisce p.
 


05/10/2004

 

inseriamo in Derive le seguenti espressioni

 

  espressione(x) := x^2

  inizio := 0

  fine := 10

  passo := 2

  lista := VECTOR(espressione(x) , x , inizio , fine , passo)

  lista

 

 la valutazione della variabile  "lista"  tramite il pulsante  "="  da' :

[0, 4, 16, 36, 64, 100]

 

lo "schema di flusso" del processo effettuato dall'espressione

 VECTOR(espressione(x) , x , inizio , fine , passo)

 e' il seguente :

v := [ ]

x := inizio

(1)       condizione :      x <= fine    ?

no

v := append(v,[espressione(x)])

l'output del processo e' :     v

x  :=  x + passo

torna a (1)

 

 Un modo per realizzare ("implementare") tale processo (algoritmo) in DERIVE 5 e' digitare nella riga di editing (ovviamente dopo aver inserito le espressioni che definiscono espressione(x), inizio, fine e passo) l'espressione :

 p := [v := [ ] ; x := inizio ; IF(x <= fine, [v := APPEND(v, [espressione(x)]) ; x := x + passo ; pSUB3SUB1], v)]

(seleziona tutta l'espressione e dopo averla copiata con CTRL+C incollala con CTRL+V nella riga di editing di DERIVE, quindi premi INVIO)

con tale espressione selezionata, valutarla tramite il pulsante "=" ;  si otterra' la "traccia" dell'algoritmo.

Un altro modo, piu' elegante e veloce, per implementare l'algoritmo e' definire la seguente funzione ciclo(v,x) :

   ciclo(v, x)  :=  IF(  x <= fine  ,  ciclo( APPEND(v, [espressione(x)]) ,  x + passo )  ,  v )

e quindi valutare con il pulsante "=" l'espressione :

ciclo( [ ] , inizio )

Prova a inserire tali due espressioni nella riga di editing di DERIVE e a valutare la seconda con "=".

Questo secondo procedimento non richiede di dare un nome all'intero programma (sopra era chiamato p) per indirizzarne una parte a cui ritornare ciclicamente, ma isola la parte del processo che si ripete ciclicamente e la definisce come funzione degli ingressi ("input") che tale ciclo deve elaborare, ingressi che vengono automaticamente modificati dalla funzione stessa nel suo "corpo" senza riassegnamento di variabili. Infine tale funzione viene applicata agli input di partenza che sono la lista vuota [ ] e il numero contenuto nella variabile "inizio" .

 

 

 gaespes E' possibile e comodo inserire le definizioni tutte insieme in una lista: basta digitare nella riga di editing di DERIVE il "vettore":
[espressione(x) := x^2, inizio := 0, fine := 10, passo := 2]
oppure, in colonna (nota i ";" al posto delle virgole):
[espressione(x) := x^2; inizio := 0; fine := 10; passo := 2].
 


01/10/2004

 

facciamo il punto sulle applet PGC finora viste :

ciclotomia e radici dell'unità

triangolo rettangolo e circonferenza circoscritta

rotazioni intorno all'origine

prodotto di numeri complessi

somma di angoli

esponenziale naturale di un numero immaginario

funzioni a scala

come render giustizia ( "orthòs" = "giusto" -> ortogonale ) all'obliquità

parabola e moltiplicazione grafica

parabole, traslazioni, equazioni quadratiche

funzioni lineari e progressioni aritmetiche

funzioni esponenziali e progressioni geometriche

incrementi di una funzione

funzioni elementari

mettere la freccia ad un vettore

esponenziale naturale e numero di Nepero

facciamo la TAC alla moltiplicazione !

interpolazione e combinazioni lineari

vettori e traslazioni "versus" flettori e rotoomotetie

le 8 ( ma in fondo solo 2 ) isometrie fondamentali del piano

 

 

 gaespes 

 

 

CABRI = CAhier de BRouillon Interactif (quaderno di brutta interattivo)

 

 gaespes ... ne consegue che CABRI in italiano si chiama ... QUABRI  !!!


 

 

a p p l e t s       C a b r i J a v a

 

 

manda una e-mail a

informatematica

 

 

le isometrie e il caleidoscopio

rette passanti per l'origine associate da simmetrie

rette non verticali costruite a partire da pendenza e quota

somma vettoriale e opposizione

le otto isometrie fondamentali del piano e le simmetrie assiali

addizione e moltiplicazione

teorema di Pitagora, circonferenza, moltiplicazione

i teoremi di Euclide dimostrati per traslazione e rotazione ortogonale

le sezioni di Dedekind della radice quadrata di 2 senza il teorema di Pitagora

il teorema di Pitagora e il modulo di un numero complesso

moltiplicazione (grafica) di numeri complessi come rotodilatazione (o rotoomotetia)

un luogo geometrico generato dal prodotto di tre numeri complessi

la formula di Eulero per i numeri immaginari puri, in forma grafica

struttura a duplice simmetria additivo-moltiplicativa nei simboli religiosi

il simbolo del Tao

 


   

dankon al  squidfingers   pro la pagfonoj