Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download

All published worksheets from http://sagenb.org

Views: 168759
Image: ubuntu2004
Consideriamo un insieme E1 di numeri reali. In SAGE possiamo considerarlo come un lista in cui sono elencati tutti gli elementi contenuti in E1 e, per forza di cose, tale lista sarà necessariamente finita. Fortunatamente possiamo stabilire la cardinalità di E1 utilizzando una variabile N1 da far variare a piacere.
N1=var('N1') N1=100 E1=[(5*n+1)/(2*n) for n in range(1,N1)]
[3, 11/4, 8/3, 21/8, 13/5, 31/12, 18/7, 41/16, 23/9, 51/20, 28/11, 61/24, 33/13, 71/28, 38/15, 81/32, 43/17, 91/36, 48/19, 101/40, 53/21, 111/44, 58/23, 121/48, 63/25, 131/52, 68/27, 141/56, 73/29, 151/60, 78/31, 161/64, 83/33, 171/68, 88/35, 181/72, 93/37, 191/76, 98/39, 201/80, 103/41, 211/84, 108/43, 221/88, 113/45, 231/92, 118/47, 241/96, 123/49, 251/100, 128/51, 261/104, 133/53, 271/108, 138/55, 281/112, 143/57, 291/116, 148/59, 301/120, 153/61, 311/124, 158/63, 321/128, 163/65, 331/132, 168/67, 341/136, 173/69, 351/140, 178/71, 361/144, 183/73, 371/148, 188/75, 381/152, 193/77, 391/156, 198/79, 401/160, 203/81, 411/164, 208/83, 421/168, 213/85, 431/172, 218/87, 441/176, 223/89, 451/180, 228/91, 461/184, 233/93, 471/188, 238/95, 481/192, 243/97, 491/196, 248/99]
Ciò che può essere interessante è rappresentare sul piano cartesiano questi elementi, in modo da evidenziare particolari comportamento nella distribuzione degli elementi.
l1=list_plot(E1, rgbcolor=(1,0.2,0.5)) r1=line([(-1,5/2),(N1,5/2)], rgbcolor=(0.2,1,0.2)) l1+r1
In questo esempio abbiamo aggiunto una retta che enfatizza il comportamento dei punti dell'insieme E1. Si noti l'uso del comando rgbcolor=(r,g,b) per la gestione dei colori ed il simbolo + per consentire la rappresentazione di diversi grafici sul medesimo sistema di riferimento.

Esercizio: provate a sostituire il comando list_plot (specifico per le liste) con il generico plot.

Più comodo può risultare l'utilizzo di una lista di punti tutti giacenti sull'asse delle ascisse, con lo svantaggio di rendere più macchinosa la stampa dei valori dei punti senza la coordinata y.
N2=var('N2') N2=50 E2=[(1/(2*n),0) for n in range(1,N2)] LE=[] for k in range(N2-1): LE.append(E2[k][0]) LE
[1/2, 1/4, 1/6, 1/8, 1/10, 1/12, 1/14, 1/16, 1/18, 1/20, 1/22, 1/24, 1/26, 1/28, 1/30, 1/32, 1/34, 1/36, 1/38, 1/40, 1/42, 1/44, 1/46, 1/48, 1/50, 1/52, 1/54, 1/56, 1/58, 1/60, 1/62, 1/64, 1/66, 1/68, 1/70, 1/72, 1/74, 1/76, 1/78, 1/80, 1/82, 1/84, 1/86, 1/88, 1/90, 1/92, 1/94, 1/96, 1/98]
Il vantaggio si rivela, però, a livello grafico. Per mettere in evidenza la distribuzione dei valori abbiamo imposto alcuni vincoli ai valori massimi e minimi di entrambi gli assi coordinati.
l2=list_plot(E2,rgbcolor=(0.7,0,0)) l2.show(xmin=-1/10,xmax=1/2,ymin=-1/10,ymax=1/10)

Esercizio: rappresentare l'insieme E3={n|n=1/2x} in grigio scuro.

La rappresentazione grafica di insiemi numerici ci aiuta ad intuire se vi siano particolari distribuzioni dei punti negli insiemi numerici studiati. In particolare ci potremmo chiedere se esistano maggioranti o minoranti per gli insiemi stessi. Per dirla in altre parole cerchiamo se esistono elementi che siano o più grandi di tutti gli altri o, all'opposto, più piccoli di tutti gli altri.

Se gli insiemi considerati sono finiti, un semplice controllo ci permette di mettere in evidenza se esistono questi particolari elementi, che chiameremo maxE e minE. Le cose sono un po' più complicate per gli insiemi infiniti: in questi casi può non esistere un elemento più grande di tutti, ma la distribuzione dei punti si dimostra concentrata verso un certo valore finito. In questo caso parleremo di supE e, nel caso opposto, di infE, rispettivamente estremo superiore ed estremo inferiore per E.

Osservazione: supE e infE non appartengono a E, mentre maxE e minE si.

Per indagare le garatteristiche di un insieme numerico, in particolare alla ricerca di maxE e minE, o di supE e infE, possiamo sfruttare le caratteristiche di SAGE come calcolatore numerico.

Per prima cosa cerchiamo di definire il generico elemento dell'insieme considerato. Facendo riferimento all'esercizio precedente esso è a(n)=1/2n. Conoscendo questo siamo in grado di calcolare velocemente alcuni valori per stimare in che modo tali valori si ditribuiscano.

a= lambda n: 1/(2*n) for k in range(10,10000,100): print a(k).n()
0.0500000000000000 0.00454545454545455 0.00238095238095238 0.00161290322580645 0.00121951219512195 0.000980392156862745 0.000819672131147541 0.000704225352112676 0.000617283950617284 0.000549450549450549 0.000495049504950495 0.000450450450450450 0.000413223140495868 0.000381679389312977 0.000354609929078014 0.000331125827814570 0.000310559006211180 0.000292397660818713 0.000276243093922652 0.000261780104712042 0.000248756218905473 0.000236966824644550 0.000226244343891403 0.000216450216450216 0.000207468879668050 0.000199203187250996 0.000191570881226054 0.000184501845018450 0.000177935943060498 0.000171821305841924 0.000166112956810631 0.000160771704180064 0.000155763239875389 0.000151057401812689 0.000146627565982405 0.000142450142450142 0.000138504155124654 0.000134770889487871 0.000131233595800525 0.000127877237851662 0.000124688279301746 0.000121654501216545 0.000118764845605701 0.000116009280742459 0.000113378684807256 0.000110864745011086 0.000108459869848156 0.000106157112526539 0.000103950103950104 0.000101832993890020 0.0000998003992015968 0.0000978473581213307 0.0000959692898272553 0.0000941619585687382 0.0000924214417744917 0.0000907441016333938 0.0000891265597147950 0.0000875656742556918 0.0000860585197934596 0.0000846023688663283 0.0000831946755407654 0.0000818330605564648 0.0000805152979066023 0.0000792393026941363 0.0000780031201248050 0.0000768049155145929 0.0000756429652042360 0.0000745156482861401 0.0000734214390602056 0.0000723589001447178 0.0000713266761768902 0.0000703234880450070 0.0000693481276005548 0.0000683994528043776 0.0000674763832658569 0.0000665778961384820 0.0000657030223390276 0.0000648508430609598 0.0000640204865556978 0.0000632111251580278 0.0000624219725343321 0.0000616522811344020 0.0000609013398294763 0.0000601684717208183 0.0000594530321046373 0.0000587544065804935 0.0000580720092915215 0.0000574052812858783 0.0000567536889897843 0.0000561167227833895 0.0000554938956714761 0.0000548847420417124 0.0000542888165038002 0.0000537056928034372 0.0000531349628055260 0.0000525762355415352 0.0000520291363163372 0.0000514933058702369 0.0000509683995922528 0.0000504540867810293
Osservazione: Si noti l'uso della funzione n( ) per ottenere valori decimali e il terzo elemento all'interno di range(min,max,passo) che determina il "salto" da un valore al successivo.

Il nostro esempio evidenzia la tendenza dei punti dell'insieme ad assumere valori sempre più prossi allo zero. Questo ci suggerisce l'idea che l'insieme possa non essere limitato inferiormente e quindi possegga maxE e non minE, da cui la necessità di ricorrere all'uso di infE.

Un ulteriore controllo che possiamo fare e quello di confrontare due elementi consecutivi dell'insieme e verificare se descrivano un andamento crescente o decrescente. SAGE ci mette a disposizione gli operatori booleani per questo tipo di operazioni. Possiamo confrontare due elementi specifici:

a(6)>a(5)
False

Oppure possiamo confrontare due elementi generici dell'insieme

m=var('m') bool(a(m+1)>a(m))
False

In entrambi i casi abbiamo ottenuto un False come risposta, quindi abbiamo la conferma che la successione di valori che determina gli elementi dell'insieme non è crescente (come avevamo ipotizzato ponendo la disuguaglianza uguale a >), bensì il contrario, confermando i risultati numerici ottenuti in precedenza.