Sei sulla pagina 1di 115

Claudio Marsan

Introduzione alluso di
Maple V Release 6
|\^/|
._|\| |/|_.
\ MAPLE /
<---- ---->
|
Liceo cantonale di Mendrisio
Mendrisio, anno scolastico 20012002
ii
Versione 1.1
Testo composto dallautore con L
A
T
E
X2

(ultima modica: 15 maggio 2002)


Copyright c _ 2002 by Claudio Marsan
Avvertenza: queste note sono state scritte come introduzione alluso di Maple per il
corso di Fisica e applicazioni della matematica per le classi 3BCD del Liceo cantonale
di Mendrisio, tenuto dai professori Claudio Marsan, Norberto Pagani e Carlo Pontinelli
nellanno scolastico 20012002. Queste note sono basate su altre note scritte dallautore
per vari corsi su Maple V Release 3 e Maple V Release 4, tenuti per allievi e colleghi.
Malgrado la cura e lattenzione prestata nella redazione del testo, possibile che ci siano
ancora degli errori di stampa.
Claudio Marsan
Liceo Cantonale di Mendrisio
Via Agostino Maspoli
CH6850 Mendrisio
email: claudio.marsan@liceomendrisio.ch
INDICE
1 Sistemi automatici di manipolazione algebrica 1
1.1 Calcolo numerico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Calcolo simbolicoalgebrico . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 Computer Algebra System . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 Propriet comuni ai Computer Algebra System . . . . . . . . . . . . . . . 2
1.5 Vantaggi derivanti dalluso di Computer Algebra System . . . . . . . . . . 3
1.6 Limitazioni dei Computer Algebra System . . . . . . . . . . . . . . . . . . 4
1.7 Origine e sviluppo di Maple . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.8 Caratteristiche principali di Maple V Release 6 . . . . . . . . . . . . . . . 5
2 Uso di Maple V Release 6 for Windows 7
2.1 Inizio e ne di una sessione di lavoro . . . . . . . . . . . . . . . . . . . . . 7
2.2 Linterfaccia graca di Maple . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.3 Aiuto! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Fogli elettronici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.5 Uso delle palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.6 Uso del pulsante destro del mouse . . . . . . . . . . . . . . . . . . . . . . . 12
2.7 Altre caratteristiche dellinterfaccia graca . . . . . . . . . . . . . . . . . . 12
2.8 Comandi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.9 Commenti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
iii
iv INDICE
2.10 Loperatore ditto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.11 Comandi di input e output . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Aritmetica elementare 17
3.1 Operazioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Rappresentazione di numeri . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3 Approssimazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 Variabili 21
4.1 Nome di una variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4.2 Tipi di variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3 Protezione di una variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.4 Assegnazione immediata e assegnazione dierita . . . . . . . . . . . . . . . 25
4.5 Costanti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5 Funzioni 29
5.1 Funzioni trigonometriche e loro inverse . . . . . . . . . . . . . . . . . . . . 29
5.2 Funzioni esponenziali e logaritmiche . . . . . . . . . . . . . . . . . . . . . . 30
5.3 Funzioni iperboliche e loro inverse . . . . . . . . . . . . . . . . . . . . . . . 31
5.4 Altre funzioni elementari . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.5 Funzioni per la manipolazione di numeri interi . . . . . . . . . . . . . . . . 32
5.6 Denizione di nuove funzioni . . . . . . . . . . . . . . . . . . . . . . . . . . 32
6 Successioni, insiemi e liste 35
6.1 Successioni di espressioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.2 Insiemi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
6.3 Liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.4 Combinazioni di liste e insiemi . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.5 Selezione di elementi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.6 Calcolare con le liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
7 Polinomi ed espressioni razionali 43
7.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
7.2 Polinomi ad una variabile . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
INDICE v
7.3 Polinomi in pi variabili . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.4 Espressioni razionali . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
8 Equazioni, disequazioni e sistemi di equazioni 51
8.1 Equazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.2 Disequazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.3 Sistemi di equazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
9 Somme e prodotti 59
9.1 Somme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
9.2 Prodotti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
10 Algebra lineare 63
10.1 Denizione di matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.2 Operazioni con le matrici . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
10.3 Matrici simboliche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
10.4 Matrici particolari . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
10.5 Denizione di vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
10.6 Operazioni con i vettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
10.7 Manipolazioni con vettori e matrici . . . . . . . . . . . . . . . . . . . . . . 78
10.8 Risoluzione di sistemi di equazioni lineari . . . . . . . . . . . . . . . . . . . 81
10.9 Autovalori e autovettori . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
10.10La libreria LinearAlgebra . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
11 Limiti di funzioni 87
11.1 Motivazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
11.2 Calcolo di limiti con Maple . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
11.3 Denizione formale di limite . . . . . . . . . . . . . . . . . . . . . . . . . . 91
11.4 Propriet dei limiti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
11.5 Il teorema sandwich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
11.6 Limiti di successioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
12 Derivate 101
12.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
vi INDICE
12.2 Calcolo delle derivate con Maple . . . . . . . . . . . . . . . . . . . . . . . . 103
12.3 Derivate di funzioni implicite . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.4 Estremi di una funzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
CAPITOLO 1
Sistemi automatici di manipolazione algebrica
Con il verbo calcolare si intende solitamente calcolare con i numeri; in realt in mate-
matica si pu calcolare anche con oggetti ben pi strani dei numeri. dunque conveniente
distinguere tra calcolo numerico e calcolo simbolicoalgebrico.
1.1 Calcolo numerico
Il calcolo numerico non si occupa solo di calcoli con le operazioni aritmetiche elementari ma
anche di calcoli pi sosticati quali la valutazione di una funzione in un punto, la ricerca di
uno zero di un polinomio, la ricerca degli autovalori di una matrice. Nel calcolo numerico
si opera esclusivamente con i numeri e i risultati che si ottengono non sono sempre esatti
poich nelle applicazioni si manipolano quasi sempre numeri in virgola mobile. I calcoli
pi semplici possono essere eseguiti con carta e matita o con una calcolatrice, quelli pi
complessi richiedono luso di un computer che si comporta come un vero sgranocchiatore
di numeri (number cruncher).
Non bisogna tuttavia credere che calcoli matematici al calcolatore e calcolo numerico sia-
no sinonimi: si possono far eseguire al calcolatore anche calcoli di tipo simbolicoalgebrico.
1.2 Calcolo simbolicoalgebrico
Il calcolo simbolicoalgebrico permette di operare con simboli che rappresentano oggetti
matematici che possono essere numeri (interi, razionali, reali, complessi, algebrici, . . . ),
vettori, matrici, polinomi, funzioni razionali, sistemi di equazioni, . . . ma anche elementi
1
2 CAPITOLO 1. SISTEMI AUTOMATICI DI MANIPOLAZIONE ALGEBRICA
di strutture algebriche astratte quali gruppi, anelli, campi, algebre. Laggettivo simbolico
vuole far risaltare il fatto che si cerca una soluzione che possa essere espressa median-
te una formula chiusa, mentre laggettivo algebrico sottolinea il fatto che i calcoli sono
eseguiti esattamente, sfruttando le regole dellalgebra e non utilizzando le approssimazioni
dellaritmetica in virgola mobile. Tipici problemi di calcolo simbolicoalgebrico sono la fat-
torizzazione di polinomi, la derivazione e lintegrazione di funzioni, la risoluzione analitica
di equazioni dierenziali, la risoluzione esatta di sistemi di equazioni, la semplicazione di
espressioni matematiche, . . .
1.3 Computer Algebra System
Con Computer Algebra System (CAS), che si pu tradurre con sistema automatico di
manipolazione algebrica o con sistema di algebra computazionale, si intende un programma
per calcolatore che permette di risolvere problemi di calcolo simbolicoalgebrico.
Tra i CAS si distinguono i sistemi specializzati in un ramo della sica o della matematica
(per esempio: SCHOONSCHIP per la sica delle alte energie, CAMAL per la meccanica ce-
leste, SHEEP e STENSOR per la relativit generale, Cayley e GAP per la teoria dei gruppi,
PARI per la teoria dei numeri, CoCoA per lalgebra commutativa, Macaulay per lalgebra
geometrica, DELiA per lanalisi di equazioni dierenziali) e i sistemi generali che tentano
di coprire il maggior numero di aree di applicazione possibile (per esempio: MACSYMA,
REDUCE, AXIOM, MuMATH, DERIVE, MAPLE, MUPAD, MATHEMATICA).
1.4 Propriet comuni ai Computer Algebra System
I CAS sono programmi interattivi: lutente inserisce unespressione matematica o istruzio-
ne e il programma tenta di eseguirla. Una volta ottenuto il risultato lutente pu inserire
una nuova istruzione.
I CAS lavorano in aritmetica esatta, ma mettono a disposizione dellutente anche larit-
metica in virgola mobile nella precisione desiderata (per esempio: 150 cifre decimali).
I CAS contengono conoscenze matematiche notevoli, tali da farli diventare dei buoni assi-
stenti matematici e da sostituire unintera biblioteca di testi matematici di consultazione.
La maggior parte dei CAS, oltre a funzionare come calcolatori simbolicoalgebrici, mettono
a disposizione anche un linguaggio di programmazione per lo sviluppo di nuovi algoritmi.
1.5. VANTAGGI DERIVANTI DALLUSO DI COMPUTER ALGEBRA SYSTEM 3
1.5 Vantaggi derivanti dalluso di Computer Algebra
System
A lungo termine lobiettivo dei CAS , per quanto possibile, raggiungere lautomatizza-
zione del processo di risoluzione di problemi matematici. I CAS attuali sono ben lungi
dallessere risolutori automatici di problemi ma sono ugualmente strumenti utili, se non
indispensabili, nella ricerca e nellinsegnamento.
Il vantaggio principale nelluso di un CAS la sua abilit nella manipolazione di calcoli
algebrici, anche complessi.
Usando un CAS lutente pu concentrarsi sullanalisi di un problema matematico lasciando
al computer i dettagli di calcolo.
I CAS spingono lutente a fare degli esperimenti matematici: facile controllare delle
congetture matematiche e di produrne di nuove in base ai risultati di calcoli eseguiti.
I CAS possono essere utilizzati come preprocessori per problemi che, per la loro natura
intrinseca, dovranno poi essere risolti mediante limprecisa aritmetica in virgola mobile: i
CAS possono elaborare linput iniziale e portarlo in una forma algebrica pi conveniente
(sia dal punto di vista del costo computazionale, sia dal punto di vista della precisione)
che verr poi traslata in codice Fortran o codice C.
I seguenti sono esempi che vorrebbero dimostrare lutilit dei CAS come strumenti per
ricercatori, scienziati, studiosi.
Nel 1847 lastronomo francese Charles Delaunay inizi a calcolare la posizione della
Luna in funzione del tempo: ci impieg 20 anni (10 anni per il calcolo e altri 10 per
la verica). Nel 1867 pubblic in due volumi i suoi risultati, che non vennero messi
in discussione per oltre 100 anni. Con lavvento dei satelliti articiali il metodo di
Delaunay per il calcolo delle orbite divenne economicamente interessante e nel 1970
tre ricercatori della Boeing di Seattle riuscirono ad eseguire al calcolatore i calcoli di
Delaunay in sole 20 ore, scoprendo tre piccoli errori nel lavoro originale.
Considerata la vita media di un uomo, la riduzione del tempo necessario per unope-
razione da 20 anni a 20 ore rappresenta un guadagno qualitativo!
Nel 1973 Richard Pavelle intraprese un calcolo algebrico nel campo della teoria della
relativit generale spendendo tre mesi di lavoro con carta e matita. Lanno successivo
gli si present un problema ancora pi pesante. Invece di calcolare con carta e matita
Pavelle decise di scrivere un programma con MACSYMA, un CAS allora in fase di
sviluppo presso il MIT di Boston.
Per provare il programma us il problema del 1973: il calcolatore veric lesattezza
di tre mesi di calcoli in soli due minuti!
Uno studio condotto al calcolatore su otto fra le tavole degli integrali indeniti pi
usate negli Stati Uniti allinizio degli anni Ottanta rivel che circa il 10% cento delle
4 CAPITOLO 1. SISTEMI AUTOMATICI DI MANIPOLAZIONE ALGEBRICA
formule contenute in queste tavole era errato; una delle tavole conteneva addirittura
il 25% di formule errate!
noto che la frazione
3
2

equivalente a 3 (non necessario ricorrere ad un CAS!).


Vediamo cosa succede con due modelli di calcolatrici scientiche:
Casio FX730P: (3*)/=9.424777960; 3=9.424777961
Hewlett Packard 38G: (3*)/=9.42477796078; 3=9.42477796077
Avremmo potuto eseguire gli stessi semplici calcoli con un programma scritto in un
qualsiasi linguaggio di programmazione e fatto girare su un qualsiasi calcolatore e
avremmo molto probabilmente osservato delle discrepanze nei risultati: la causa di
ci luso dellaritmetica in virgola mobile.
Laritmetica in virgola mobile utilizzata nella progettazione di macchine di ogni
tipo, dighe, ponti, missili, eccetera. Dobbiamo dunque, per esempio, aver paura di
volare con un aereo?
1.6 Limitazioni dei Computer Algebra System
I CAS richiedono spesso molta memoria macchina e molta pazienza umana. Anche calcoli
apparentemente semplici, come per esempio la ricerca del massimo comune divisore di due
polinomi, pu portare a lunghi tempi di attesa dovuti al fatto che la macchina sta lavorando
in aritmetica esatta.
I risultati non sono sempre semplicati come sarebbe desiderato dallutente e questultimo
deve intervenire nuovamente.
Ci sono ancora tantissimi argomenti matematici (piuttosto avanzati!) che non possono
essere trattati con un CAS.
1.7 Origine e sviluppo di Maple
Maple non un acronimo per MAthematical PLEasure o per altro, ma solo un nome
per ricordare che il prodotto canadese (maple = acero, la foglia di acero appare nella
bandiera canadese).
Lo sviluppo di Maple iniziato nel novembre del 1980 grazie al Symbolic Computation
Group dellUniversit di Waterloo (Canada) e la prima versione commercializzata (Maple
3.3) risale al 1985. A partire dalla versione 5.2 cambiata la denominazione del prodotto:
invece di Maple 5.2 si usa Maple V Release 2; da allora il prodotto si chiama Maple
V. La versione pi recente Maple V Release 8 ed stata rilasciata verso la met del
2002. Noi lavoreremo per con Maple V Release 6.02, rilasciata nel febbraio 2001. Nel
seguito useremo come sinonimi Maple e Maple V.
1.8. CARATTERISTICHE PRINCIPALI DI MAPLE V RELEASE 6 5
Purtroppo Maple diventato, con il passare delle versioni, un prodotto sempre pi com-
merciale e si allontanato dallo sviluppo quasi pionieristico del mondo accademico. Esso
continua ad essere sviluppato in Canada ed usato in ogni parte del mondo da scienziati,
ingegneri, matematici, insegnanti e studenti.
Maple V disponibile anche per piattaforme Unix e Macintosh.
1.8 Caratteristiche principali di Maple V Release 6
Il pacchetto Maple V Release 6 for Windows comprende e ore:
uninterfaccia graca (ossia: un ambiente di lavoro a nestre, dette fogli di lavoro);
uninterfaccia a linea di comando (meno comoda da usare ma sicuramente pi e-
ciente rispetto allinterfaccia graca);
manuale online;
esportazione dei documenti in vari formati (tra i quali: HTML, L
A
T
E
X, RTF);
programma per importare documenti da una precedente versione;
un linguaggio di programmazione simile a Pascal e C;
un debugger (Maple Syntax Checker);
capacit di calcolo simbolico;
capacit di calcolo numerico;
oltre 2500 funzioni matematiche;
notazioni simili a quelle matematiche;
output in stile matematico nei fogli di lavoro;
graci 2D, 3D, polari, parametrici, ...;
animazioni 2D, 3D;
...
Attenzione: utilizzando contemporaneamente pi fogli di lavoro c un comportamento
diverso a seconda che si sia lanciata o meno la versione Parallel Server di Maple V
Release 6: nella versione Parallel Server le variabili hanno valore solo nel foglio di lavoro
in cui sono state denite, mentre nellaltra versione hanno valore in tutti i fogli aperti in
quel momento. Deniamo, per esempio, in un primo foglio di lavoro x := 7; e apriamo
6 CAPITOLO 1. SISTEMI AUTOMATICI DI MANIPOLAZIONE ALGEBRICA
un nuovo foglio di lavoro nel quale digitiamo x;. Allora nella versione Parallel Server
otterremo x come risposta, mentre nellaltra versione otterremo 7.
La versione Parallel Server viene lanciata dal comando wmaple.exe -km p.
CAPITOLO 2
Uso di Maple V Release 6 for Windows
In questo capitolo esamineremo le principali caratteristiche dellinterfaccia graca di Ma-
ple V Release 6 for Windows.
2.1 Inizio e ne di una sessione di lavoro
Per eseguire Maple bisogna cliccare due volte sullicona relativa allapplicazione. Questa
operazione apre lapplicazione con un foglio di lavoro (worksheet) nuovo.
Per uscire da Maple scegliere il comando Exit dal menu File oppure digitare ALT-F4. Se
il foglio di lavoro corrente stato modicato e le modiche non sono ancora state salvate,
Maple ore la possibilit di salvarle prima di uscire. Digitando i comandi quit, done,
oppure stop possibile uscire immediatamente da Maple, senza salvare il foglio di lavoro
corrente.
Attenzione: si consiglia di salvare i fogli di lavoro di Maple in un le avente lesten-
sione mws (per esempio: mio-file.mws); in caso contrario il le non verr visualizzato
automaticamente nella lista dei les usando la voce Open del menu File.
2.2 Linterfaccia graca di Maple
Linterfaccia graca di Maple comprende la maggior parte delle facilitazioni che ci si aspet-
ta di trovare in un software applicativo moderno, per esempio il supporto delle operazioni
standard con il mouse (compreso il taglia e incolla), luso di pi nestre contemporanea-
mente, la guida in linea. Chi usa il software convenzionale (per esempio i prodotti della
7
8 CAPITOLO 2. USO DI MAPLE V RELEASE 6 FOR WINDOWS
famiglia Microsoft Oce) con una certa dimestichezza non avr alcuna dicolt ad usare
linterfaccia graca di Maple (vedi gura 2.1).
Figura 2.1: Linterfaccia graca di Maple.
Una volta lanciata una sessione di Maple appare una nestra. In cima alla nestra c la
barra dei menu (menu bar) che contiene menu quali File e Edit.
Subito sotto la barra dei menu c la barra degli strumenti (toolbar) contenente una serie
di icone che rappresentano delle scorciatoie per operazioni comuni quali il salvataggio di
un le o la stampa di un le.
Subito sotto la barra degli strumenti c la barra di contesto (context bar) che contiene
alcuni controlli specici al lavoro che si sta eseguendo.
La prossima parte della nestra pi grande e visualizza il foglio di lavoro (worksheet),
ossia la regione nella quale si lavora.
Inne, in fondo alla nestra, c la barra di stato (status bar) che visualizza alcune infor-
mazioni di sistema.
Oltre ai comandi di Maple e ai risultati possibile includere in un documento anche altri
tipi di informazione:
paragra di testo: controllo completo dellaspetto dei paragra, anche carattere per
2.3. AIUTO! 9
carattere, per mezzo delluso degli stili;
espressioni matematiche;
fogli elettronici : tabelle di valori matematici e/o di formule simboliche che possono
essere eseguite da Maple;
collegamenti ipertestuali : speciali regioni di testo che permettono, cliccandoci sopra
con il pulsante sinistro del mouse, di passare ad un altra parte del foglio di lavoro in
uso oppure ad un altro foglio di lavoro;
I documenti possono essere strutturati mediante stili, collegamenti ipertestuali e creazione
di sezioni e sottosezioni.
2.3 Aiuto!
Maple mette a disposizione una guida in linea e altri strumenti di supporto agli utenti,
principianti o avanzati che siano: scegliendo Help dalla barra dei menu si ha una scelta
degli strumenti di supporto (vedi gura 2.2).
Figura 2.2: Il supporto di Maple agli utenti.
Segnaliamo che scegliendo la voce di menu Balloon Help si attiva laiuto contestuale sugli
elementi dellinterfaccia graca di Maple.
Dalla riga di comando poi possibile ottenere un aiuto a proposito di una funzione, una
procedura o di un altro elemento di Maple nel modo seguente:
10 CAPITOLO 2. USO DI MAPLE V RELEASE 6 FOR WINDOWS
> ?nome;
dove nome loggetto per il quale si vuole un aiuto. Laiuto viene fornito in una nuova
nestra, nella quale sono spesso presentati anche esempi e relazioni con altri elementi di
Maple.
2.4 Fogli elettronici
I fogli elettronici consistono di celle e sono particolarmente adatti alla visualizzazione di
dati in forma tabulare.
Figura 2.3: Esempio di foglio elettronico di Maple.
Per creare un foglio elettronico bisogna scegliere Spreadsheet dal menu Insert: la cella
in alto a sinistra evidenziata e identicata con A1.
Luso dei fogli elettronici di Maple ricorda un po quello dei fogli elettronici di Excel.
Bisogna ricordarsi per che per far riferimento, per esempio, alla cella C5 bisogner usare
la sintassi C5.
Quando si lavora con un foglio elettronico di Maple nella barra dei menu viene attivato il
2.5. USO DELLE PALETTE 11
menu Spreadsheet e inoltre nella barra di contesto appaiono nuove icone per particolari
operazioni possibili solo con i fogli elettronici.
Nella gura 2.3 rappresentato un esempio di foglio elettronico. Per maggiori ragguagli
sui fogli elettronici si rimanda alla guida di Maple (cercare la voce spreadsheet).
2.5 Uso delle palette
Linterfaccia graca di Maple include anche la possibilit di visualizzare delle palette, ossia
dei blocchi predeniti che facilitano la creazione di espressioni, comandi, caratteri speciali
e matrici. Le palette disponibili sono tre e si attivano nel modo seguente, partendo dalla
barra dei menu:
View -> Palettes -> Symbol Palette
View -> Palettes -> Expression Palette
View -> Palettes -> Matrix Palette
Figura 2.4: Le tre palette attivate.
12 CAPITOLO 2. USO DI MAPLE V RELEASE 6 FOR WINDOWS
Cliccando su un oggetto di una paletta questo riporta sulla riga di input il simbolo o il
comando o la matrice scelta, con delle facilitazioni (indicazione mediante %?) per inserire
le eventuali parti mancanti. La gura 2.4 mostra le tre palette attivate e la riga di comando
dopo aver premuto sullicona della somma (terza icona della paletta delle espressioni).
Se non si nascondono le palette mediante View -> Palettes -> Hide All Palettes
esse saranno a disposizione la prossima volta che si riavvier Maple. Le palette possono
essere sistemate anche al di fuori del foglio di lavoro.
2.6 Uso del pulsante destro del mouse
Premendo il pulsante destro del mouse su un risultato di un calcolo apparir un menu con
vari comandi a disposizione (per un esempio vedi la gura 2.5. Il comando scelto verr
poi eseguito prendendo come argomento il risultato del calcolo sul quale stato premuto
il pulsante destro del mouse.
Figura 2.5: Pressione del pulsante destro del mouse sul risultato di un calcolo.
2.7 Altre caratteristiche dellinterfaccia graca
Per altre caratteristiche dellinterfaccia graca di Maple si rimanda alla guida ( Help ->
Topic Search ... . Digitare poi nella casella Topic: la parola chiave per la quale
si desidera un aiuto. Per esempio:
per impararare ad inserire un titolo, digitare title;
2.8. COMANDI 13
per impararare a lavorare con le sezioni, digitare section;
per impararare ad inserire un collegamento ipertestuale, digitare hyperlink;
e scegliere la voce che pi conviene tra quelle proposte nella casella di testo intitolata
Matching Topics.
2.8 Comandi
Il termine comando sar utilizzato per indicare tutto ci che lutente scrive su una o pi
righe di un foglio di lavoro e che desidera che Maple elabori: a seconda del contesto
un comando sar unistruzione o una funzione o una procedura oppure unassegnazio-
ne. Le espressioni scritte tra parentesi che seguono diversi comandi di Maple sono detti
argomenti ; gli argomenti facoltativi saranno chiamati opzioni.
Una volta lanciato Maple appare un foglio di lavoro nuovo e il sistema indica con un
prompt, solitamente >, che in attesa di un comando.
importante ricordare che un comando termina con un punto e virgola oppure, se si vuole
sopprimere loutput, con un due punti. Il comando verr eseguito solo dopo aver premuto
il tasto <ENTER>.
Esempio 2.8.1
> 5 + 4;
9
> 5 + 4:
possibile scrivere pi di un comando sulla stessa riga.
Esempio 2.8.2
> 5 + 4; 3 - 1; sin(0);
9
2
0
Un comando di Maple pu essere scritto anche su pi righe (ci utile soprattutto quando
bisogna digitare lunghe espressioni algebriche): si pu forzare il passaggio ad una nuova
riga premendo i tasti <SHIFT-ENTER> (attenzione: non usare solo il tasto <ENTER>). Per
aumentare la leggibilit di un comando si pu inserire nella posizione desiderata il carattere
di continuazione \ (backslash), che viene ignorato da Maple.
Esempio 2.8.3
14 CAPITOLO 2. USO DI MAPLE V RELEASE 6 FOR WINDOWS
> 123456789 + \
987654321;
1111111110
> 1\234\567\890 + 1;
1234567891
Per interrompere un calcolo troppo lungo premere i tasti CTRL-BREAK oppure cliccare sul
bottone STOP nella barra degli strumenti del foglio di lavoro. Attenzione: le operazioni di
Maple in virgola mobile non si possono interrompere!
Bisogna prestare attenzione alluso delle maiuscole e delle minuscole nei comandi poich
Maple case sensitive (ossia sensibile alluso delle maiuscole e delle minuscole). Solita-
mente i nomi delle funzioni matematiche predenite dal sistema sono scritti completamente
in minuscolo, ci sono tuttavia delle eccezioni.
Esempio 2.8.4
sin, SIN e Sin rappresentano, per Maple, tre oggetti ben distinti.
Per inserire una nuova riga di comando dopo una determinata riga bisogna premere i tasti
CTRL-J oppure scegliere dalla barra dei menu
Insert -> Execution Group -> After Cursor
Per inserire una nuova riga di comando prima di una determinata riga bisogna premere i
tasti CTRL-K oppure scegliere dalla barra dei menu
Insert -> Execution Group -> Before Cursor.
Per creare una regione di testo nel foglio di lavoro si pu procedere in uno dei modi seguenti:
scegliere dal menu Insert -> Text;
convertire la riga corrente premendo i tasti CTRL-T;
convertire la riga corrente cliccando con il pulsante sinistro del mouse sullicona T
nella barra degli strumenti.
In una regione di testo si pu poi formattare il testo mediante licona Format dalla barra
dei menu oppure mediante le icone della barra di contesto(vedi gura 2.6).
2.9. COMMENTI 15
Figura 2.6: Una riga di testo.
2.9 Commenti
Tutto ci che segue il carattere # ritenuto un commento e viene ignorato da Maple.
Esempio 2.9.1
> # Questa una riga di commento
> 5 + 4; # Questo un commento dopo un comando
9
2.10 Loperatore ditto
Talvolta utile poter riprendere lultimo risultato senza doverlo riscrivere: possibile fare
ci mediante loperatore ditto, che si indica con % (nota: no alla versione Maple V
Release 4 si usava il simbolo ). Il penultimo risultato pu essere ripreso mediante %% e il
terzultimo mediante %%%.
Esempio 2.10.1
> 5 + 4;
9
> % - 3;
6
> %% + %; # Corrisponde a 9 + 6
15
16 CAPITOLO 2. USO DI MAPLE V RELEASE 6 FOR WINDOWS
> %%%;
9
2.11 Comandi di input e output
Esistono inoltre vari comandi per linput (per esempio: readdata, readline, parse,
sscanf, . . . ) e loutput (per esempio: save, lprint, print, printf, . . . ), specializzati
per un particolare dispositivo (schermo, le o altro): consultare la guida per apprendere la
sintassi di tali comandi.
CAPITOLO 3
Aritmetica elementare
Non evidentemente molto sensato usare Maple (unicamente!) come calcolatrice; tut-
tavia importante notare le dierenze di comportamento tra Maple e una calcolatrice
nellarontare un calcolo aritmetico.
3.1 Operazioni elementari
Maple in grado di lavorare con numeri interi, razionali, reali e complessi e con variabili
algebriche. I simboli per le comuni operazioni aritmetiche sono:
+ per laddizione,
- per la sottrazione,
* per la moltiplicazione,
/ per la divisione,
^ oppure ** per lelevazione a potenza,
! per il fattoriale.
La virgola decimale si indica con il punto, alla maniera anglosassone. Lunit immaginaria
si indica con I (attenzione: non usare i); si indica con Pi (attenzione: non usare pi
o PI); la costante di Eulero e

= 2.718281828 non invece denita (per ottenerla bisogna
calcolare exp(1)).
17
18 CAPITOLO 3. ARITMETICA ELEMENTARE
Esempio 3.1.1
> 1 + 1;
2
> 5 * 3;
15
> 2^67 - 1;
147573952589676412927
> 100!;
93326215443944152681699238856266700490715968264381621468592
96389521759999322991560894146397615651828625369792082722375
8251185210916864000000000000000000000000
> 15 / 12;
5
4
> I**2;
1
> (2 + 3*I) - (I - 3);
5 + 2I
> 2*x + x - y*y;
3x y
2
Osservazione 3.1.1
Il simbolo di moltiplicazione obbligatorio. Si dovr scrivere, per esempio, 2*x e non 2x.
In caso contrario si provocher un errore:
> 2x;
Error, missing operator or ;
3.2 Rappresentazione di numeri
Numeri molto grandi o molto piccoli possono essere rappresentati nella forma n 10
m
oppure nella forma nem (la seconda variante permette, talvolta, di evitare la scrittura di
parentesi). Da notare che i calcoli con i numeri scritti nella prima variante sono eseguiti,
nel limite del possibile, in forma esatta (simbolicamente), al contrario di quelli scritti nella
seconda variante che sono eseguiti in virgola mobile.
3.3. APPROSSIMAZIONI 19
Esempio 3.2.1
> 149.6*10^9 / (3*10^8);
498.6666667
> 149.6e9 / 3e8;
498.6666667
Maple rispetta le comuni priorit algebriche. Per cambiare lordine di esecuzione delle
operazioni si possono usare parentesi tonde, anche nidicate: non usare parentesi di altro
genere poich per Maple hanno altri signicati.
3.3 Approssimazioni
Maple preferisce lavorare in aritmetica esatta (per questo motivo, al contrario delle calco-
latrici, non calcola mai il valore decimale di una divisione di numeri interi) e, se possibile,
semplica i risultati. Se si vuole avere unapprossimazione bisogna usare il comando evalf
(evaluate oat = valutazione in virgola mobile).
Esempio 3.3.1
> 5 / 4;
5
4
> evalf(5 / 4);
1.2500000000
Se si lavora con numeri in virgola mobile si pu cambiare la precisione (per difetto di 10
cifre decimali) modicando il valore della variabile globale Digits.
Esempio 3.3.2
> Digits; # Valore attuale della variabile globale Digits
10
> evalf(Pi);
3.141592654
> Digits := 50; # Si pone Digits uguale a 50
Digits := 50
> evalf(Pi);
3.1415926535897932384626433832795028841971693993751
20 CAPITOLO 3. ARITMETICA ELEMENTARE
Una variante del comando evalf permette di valutare un numero in virgola mobile con n
cifre decimali: basta aggiungere n come secondo argomento.
Esempio 3.3.3
> evalf(Pi, 100); # Valuta pi greco con 100 cifre decimali
3.1415926535897932384626433832795028841971693993751058209749
44592307816406286208998628034825342117068
> evalf(exp(1), 500); # Valuta e con 500 cifre decimali
2.718281828459045235360287471352662497757247093699959
57496696762772407663035354759457138217852516642742746
63919320030599218174135966290435729003342952605956307
38132328627943490763233829880753195251019011573834187
93070215408914993488416750924476146066808226480016847
74118537423454424371075390777449920695517027618386062
61331384583000752044933826560297606737113200709328709
12744374704723069697720931014169283681902551510865746
37721112523897844250569536967707854499699679468644549
059879316368892300987931
Osservazione 3.3.1
Attenzione a non confondere la precisione di calcolo in virgola mobile, determinata dal
valore della variabile globale Digits, con il numero di cifre che si ottengono mediante
il secondo argomento del comando evalf (si ottiene solo un apparente aumento della
precisione).
Esempio 3.3.4
> Digits:=10: evalf(sqrt(2)); # sqrt = radice quadrata
1.414213562
> evalf(1/%^2, 50);
.50000000026381803913919991547705793946024635015556
Il comando Digits non ha, evidentemente, alcun inusso sulla precisione dei calcoli sim-
bolici.
CAPITOLO 4
Variabili
I risultati di un calcolo di Maple possono essere assegnati ad una variabile: ci aumenta
la leggibilit di un programma e permette di salvare dei risultati parziali per calcoli futuri.
4.1 Nome di una variabile
Le variabili di Maple devono avere un nome che rispetta le regole seguenti:
un nome una qualsiasi stringa di caratteri scelti tra lettere (maiuscole o minuscole),
cifre e _ (carattere di sottolineatura);
la lunghezza massima di un nome di 524

271 caratteri (su macchine con micropro-


cessori a 32 bit, come gli attuali PC);
un nome non pu iniziare con una cifra;
i nomi devono essere diversi da quelli delle parole riservate (ossia: nomi di funzioni,
di costanti, di strutture di programmazione, eccetera);
un nome pu essere anche formato da una sequenza qualsiasi di caratteri racchiusi
tra accenti gravi.
Esempio 4.1.1
> accelerazione di gravit := 9.81;
21
22 CAPITOLO 4. VARIABILI
accelerazione di gravit := 9.81
> a := 0.5 * accelerazione di gravit * t^2;
a := 4.905 t
2
Si consiglia:
non usare _ come primo carattere di un nome poich Maple usa internamente delle
variabili che iniziano con _ ;
usare per le variabili nomi mnemonici per aumentare la leggibilit del foglio di lavoro
(per esempio: soluzione o sol da preferire a s per una variabile che rappresenta
la soluzione di unequazione);
non usare nomi troppo lunghi (le variabili, solitamente, si riutilizzano e bisogna
riscriverne i nomi);
per aumentare la leggibilit utilizzare il carattere di sottolineatura e mescolare luso
di maiuscole e minuscole (per esempio usare eq_diff oppure EqDiff piuttosto che
eqdiff); ricordarsi che Maple casesensitive.
Ad una variabile si assegna un valore mediante loperatore di assegnamento che si indica,
come nei linguaggi di programmazione Pascal e Ada 95, con il simbolo := (attenzione: non
usare solo = poich in Maple ha un altro signicato).
Inizialmente ad una variabile assegnato il suo nome.
Per disassegnare una variabile assegnare alla variabile il valore corrispondente al nome della
variabile racchiuso tra due apici.
Esempio 4.1.2
> x;
x
> x := -7;
7
> x := x;
x := x
> x;
x
> a := 12; # Alla variabile a si assegna il valore 12
a := 12
4.1. NOME DI UNA VARIABILE 23
> b := a + 1; # A b si assegna il valore di a incrementato di 1
b := 13
> b := b + 1; # Il valore della variabile b viene incrementato di 1
b := 14
Al contrario dei linguaggi di programmazione Pascal, Ada 95, C e C++, Maple non
richiede che le variabili vengano dichiarate prima delluso.
Esempio 4.1.3
> x := 10;
x := 10
> z := x + y;
z := 10 + y
Al posto delloperatore di assegnamento si pu usare anche il comando
assign(variabile, valore);
(e il comando
unassign(variabile);
per disassegnare una variabile), a condizione che a variabile non sia ancora assegnato un
valore.
Esempio 4.1.4
> assign(w, 40);
> w;
40
> unassign(w);
Error, (in unassign) cannot unassign 40 (argument must be assignable)
> unassign(w);
> w;
w
24 CAPITOLO 4. VARIABILI
4.2 Tipi di variabili
Le entit fondamentali nel linguaggio di Maple sono le espressioni. I vari tipi di espressioni
comprendono costanti, nomi di variabili e di incognite, formule, espressioni booleane, serie
e altre strutture di dati.
Ad ogni espressione associato un tipo che pu essere determinato tramite il comando
whattype: whattype(v) restituisce il tipo (fondamentale) dellespressione v. Il comando
type(v, t) restituisce true se v unespressione di tipo t, altrimenti restituisce false
(true = vero, false = falso).
importante la possibilit di dichiarare il tipo delle variabili nei programmi Maple perch
ci permette di scrivere dei programmi che controllano automaticamente linput.
Digitando ?type si pu avere la lista dei tipi ammessi da Maple; noi qui ne elenchiamo
solo alcuni:
integer: per i numeri interi;
float: per i numeri reali;
complex: per i numeri complessi;
polynom: per i polinomi;
equation: per le equazioni;
matrix: per le matrici;
posint: per i numeri interi positivi;
positive: per i numeri positivi;
nonnegint: per i numeri interi non negativi:
prime: per i numeri primi;
string: per le stringhe di caratteri (sono seguenze di caratteri racchiuse tra virgo-
lette)
function: per le funzioni;
. . .
Esempio 4.2.1
> restart:
> type(3.14, complex);
true
4.3. PROTEZIONE DI UNA VARIABILE 25
> whattype(3.14);
oat
> type(3.14, string);
false
> type(3.14, string);
true
> type(x^3-2*x+1, polynom);
true
> whattype(x^3-2*x+1);
+
Come si pu notare dallesempio precedente unespressione pu essere di diversi tipi.
4.3 Protezione di una variabile
Se un utente vuole usare un nome riservato di Maple per una sua variabile pu sproteggere,
mediante il comando unprotect, il nome riservato.
Con il comando protect(variabile) si pu fare in modo che variabile venga protetta,
ossia che non possa essere modicata nel seguito della sessione corrente.
Esempio 4.3.1
> D := 5;
Error, attempting to assign to D which is protected
> unprotect(D);
> D := 5;
D := 5
> K := 7;
7
> protect(K);
> K := 5;
Error, attempting to assign to K which is protected
4.4 Assegnazione immediata e assegnazione dierita
Durante lelaborazione dei comandi, Maple tenta di valutare tutti i simboli che incon-
tra e di sostituirli con il loro contenuto: nel caso di assegnazioni con := ci eseguito
limitatamente alla parte destra del comando.
26 CAPITOLO 4. VARIABILI
Consideriamo lassegnazione x := y. Maple sostituisce dapprima alla variabile y il suo
contenuto e memorizza questultimo in x (si parla di assegnazione immediata). Se y non
ha ancora un valore, allora Maple memorizza in x il nome del simbolo y.
Se non desiderata unassegnazione immediata bisogna scrivere il nome della variabile della
parte destra del comando tra apici (si parler in questo caso di assegnazione dierita).
Esempio 4.4.1
> x:=5;
x := 5
> # Assegnazione immediata per y, differita per x
> y:=x; z:=x;
y := 5;
z := x;
> x := -2;
x := 2
> z;
2
4.5 Costanti
Le costanti sono degli oggetti di Maple che non possono modicare il loro valore. La
variabile di sistema constants restituisce la lista delle costanti note al sistema; possibile
aggiungere delle proprie costanti, anche aventi valore numerico, modicando il valore di
constants e utilizzando il comando macro. Nel prossimo esempio deniamo laccelerazione
di gravit g = 9.81ms
2
come costante.
Esempio 4.5.1
> restart:
> constants;
false, , , true, Catalan, FAIL,
> constants := constants, g, m, s;
false, , , true, Catalan, FAIL, , g, m, s
> macro(g = 9.81*m*s^(-2));
> g;
9.81
m
s
2
4.5. COSTANTI 27
> g := 2;
Error, invalid left hand side of assignment
Se il nome di un comando non , per un qualsiasi motivo, gradito lo si pu cambiare
mediante il comando alias(nuovonome = vecchionome).
Esempio 4.5.2
Rideniamo i comandi per il massimo comune divisore di interi (MCD come alias di igcd)
e per il minimo comune multiplo di interi (mcm come alias di ilcm)
> alias(MCD=igcd,mcm=ilcm);
MCD, mcm
> MCD(12,30); mcm(8,12);
6
24
28 CAPITOLO 4. VARIABILI
CAPITOLO 5
Funzioni
In Maple sono predenite molte funzioni. Nel seguito elenchiamo i comandi per alcune
funzioni elementari che, in un qualche modo, sono trattate nei corsi di matematica del
liceo.
Per usare una funzione di Maple si scriver il nome della funzione, rispettando le maiuscole
e le minuscole, e, tra parentesi tonde, largomento o gli argomenti necessari.
La maggior parte delle funzioni sono denite ed hanno valori nel campo dei numeri com-
plessi (consultare la guida per maggiori informazioni).
Maple conosce, per diverse funzioni, anche regole particolari che permettono (talvolta
automaticamente, altre volte con laiuto di comandi quali simplify, combine, normal o
altri) di semplicare delle espressioni.
5.1 Funzioni trigonometriche e loro inverse
In Maple le funzioni trigonometriche sono denite e hanno valori nel campo dei numeri
complessi. Maple usa, per questa categoria di funzioni, le notazioni matematiche standard
(nota: x in radianti):
seno di x: sin(x)
coseno di x: cos(x)
tangente di x: tan(x)
cotangente di x: cot(x)
29
30 CAPITOLO 5. FUNZIONI
secante di x: sec(x)
cosecante di x: csc(x)
arcoseno di x: arcsin(x)
arcocoseno di x: arccos(x)
arcotangente di x: arctan(x)
arcocotangente di x: arccot(x)
arcosecante di x: arcsec(x)
arcocosecante di x: arccsc(x)
Il comando
convert(x,degrees);
permette di trasformare x nellequivalente in gradi sessadecimali.
Esempio 5.1.1
> convert(Pi/2, degrees);
90 degrees
5.2 Funzioni esponenziali e logaritmiche
Le funzioni esponenziali e logaritmiche di Maple sono denite ed hanno valori nel campo
dei numeri complessi. Si usano le notazioni seguenti:
esponenziale di x: exp(x)
logaritmo naturale di x: ln(x) oppure log(x)
logaritmo decimale di x: log10(x)
logaritmo di x nella base b: log[b](x)
5.3. FUNZIONI IPERBOLICHE E LORO INVERSE 31
5.3 Funzioni iperboliche e loro inverse
In Maple le funzioni iperboliche e le loro inverse sono denite ed hanno valori nel campo
dei numeri complessi. Si usano le notazioni seguenti:
seno iperbolico di x: sinh(x)
coseno iperbolico di x: cosh(x)
tangente iperbolica di x: tanh(x)
cotangente iperbolica di x: coth(x)
secante iperbolica di x: sech(x)
cosecante iperbolica di x: csch(x)
arcoseno iperbolico di x: arcsinh(x)
arcocoseno iperbolico di x: arccosh(x)
arcotangente iperbolica di x: arctanh(x)
arcocotangente iperbolica di x: arccoth(x)
arcosecante iperbolica di x: arcsech(x)
arcocosecante iperbolica di x: arccsch(x)
5.4 Altre funzioni elementari
La lista seguente comprende altre funzioni elementari utili:
radice quadrata di x: sqrt(x)
coeciente binomiale n sopra k: binomial(n,k)
valore assoluto di x: abs(x)
segno di x: signum(x)
parte intera di x: trunc(x)
parte frazionaria di x: frac(x) ( denita come x - trunc(x))
pi piccolo intero maggiore o uguale di x: ceil(x)
32 CAPITOLO 5. FUNZIONI
pi grande intero minore o uguale di x: floor(x)
arrotondamento allintero pi prossimo ad x: round(x)
massimo fra x e y: max(x, y)
minimo fra x e y: min(x, y)
Si consiglia vivamente di leggere la guida riguardante le funzioni di arrotondamento (digi-
tare, per esempio, ?floor).
5.5 Funzioni per la manipolazione di numeri interi
Si elencano alcune delle principali funzioni per la manipolazione dei numeri interi (nel
seguito x e y sono numeri interi):
resto intero di x diviso y: irem(x, y) (integer remainder)
quoziente intero di x diviso y: iquo(x, y) (integer quotient)
minimo comune multiplo di x e y: ilcm(x, y) (integer lowest common divisor)
massimo comune divisore di x e y: igcd(x, y) (integer great common divisor)
fattorizzazione intera di x: ifactor(x) (integer factorization)
radice quadrata intera di x: isqrt(x) (integer square root)
5.6 Denizione di nuove funzioni
Per denire delle nuove funzioni (procedure) ci sono essenzialmente due possibilit. Vo-
gliamo, per esempio, denire la funzione f(x) =
x + 1
2x 4
:
si pu usare loperatore freccia (si digita il segno di sottrazione, seguito dal segno di
maggiore, senza spazi bianchi fra i due segni):
> f := x -> (x + 1)/(2*x - 4);
f := x
x + 1
2x 4
si pu usare la forma procedurale:
5.6. DEFINIZIONE DI NUOVE FUNZIONI 33
> f := proc(x) (x + 1)/(2*x - 4) end;
f := proc(x) (x + 1)/(2x 4) end
Le funzioni denite dallutente si usano come le funzioni predenite di Maple.
Esempio 5.6.1
> k := x -> x^2 + 1;
k := x x
2
+ 1
> k(2);
5
> k(2*a);
4a
2
+ 1
> type(k, procedure);
true
Naturalmente si possono denire anche funzioni di pi variabili.
Esempio 5.6.2
> F := (x, y) -> (x^2 + y^2) / (x * y);
F := (x, y)
x
2
+ y
2
xy
> F(1,2);
5
2
> projz := (x, y, z) -> [x, y, 0];
projz := (x, y, z) [x, y, 0]
> projz(2, -1, 8);
[2, 1, 0]
34 CAPITOLO 5. FUNZIONI
CAPITOLO 6
Successioni, insiemi e liste
Alcuni comandi di Maple richiedono come argomento e/o restituiscono come risultato
una sequenza di oggetti, ossia delle strutture di dati complesse. In questo capitolo si
introducono queste strutture e i principali comandi che permettono di manipolarle.
6.1 Successioni di espressioni
Una successione (di espressioni ) una sequenza ordinata di oggetti di Maple, separati da
una virgola. Ad una successione pu essere assegnata una variabile. Con NULL si indica la
successione nulla. Le successioni si possono concatenare facilmente.
Esempio 6.1.1
> a, b, c, d; # una successione
a, b, c, d
> succ := 1, 5, a, x;
succ := 1, 5, a, x
> # Segue una concatenazione di successioni
> nuova_succ := succ, 7, NULL, 7, 1, succ;
nuova_succ := 1, 5, a, x, 7, 7, 1, 1, 5, a, x
Il comando seq permette di costruire agevolmente delle successioni parametrizzate da una
variabile indice intera i, che da considerare come una variabile privata (ossia: ogni altra
35
36 CAPITOLO 6. SUCCESSIONI, INSIEMI E LISTE
variabile locale o globale con lo stesso nome non interferisce con la variabile indice). La
sintassi la seguente: seq(f(i), i = a..b) dove i una variabile intera che assume tutti
i valori tra gli interi a e b (a < b) e f una funzione di i.
Esempio 6.1.2
> seq(i, i = 0..5);
0, 1, 2, 3, 4, 5
> f := x -> x^2/x!: seq(f(i), i = 1..4);
1, 2,
3
2
,
2
3
min, max, igcd e ilcm sono alcune funzioni che accettano una successione (di oggetti di
tipo adeguato) come argomento.
Esempio 6.1.3
> min(34, 6, -2, 10);
2
> max(34, 6, -2, 10);
34
> igcd(34, 6, -2, 10);
2
> ilcm(34, 6, -2, 10);
510
6.2 Insiemi
Un insieme una successione non ordinata di oggetti racchiusa tra parentesi grae (si usa
quindi la comune notazione matematica per gli insiemi niti). Lordine degli elementi di
un insieme stabilito dal sistema e pu variare da sessione a sessione; inoltre, come in
matematica, in un insieme non appaiono elementi uguali. Nelle liste possibile avere pi
elementi identici.
Esempio 6.2.1
> 1, 2, 3;
1, 2, 3
> A := x,y,z,x;
A := x, y, z
> vuoto := ; # insieme vuoto
vuoto :=
6.2. INSIEMI 37
Si deniscono le comuni operazioni insiemistiche: union (unione), intersect (intersezione)
e minus (dierenza).
Esempio 6.2.2
> X := a, b, c; Y := a, d;
X := a, b, c
Y := a, d
> X union Y;
a, b, c, d
> X intersect Y;
a
> X minus Y;
b, c
Mediante nops(insieme) possibile conoscere il numero di elementi di insieme.
possibile sfruttare il comando seq visto in precedenza per costruire degli insiemi.
Esempio 6.2.3
> insieme := seq(i^3, i = 1..4);
insieme := 1, 8, 27, 64
> nops(insieme);
4
La funzione member(x, A) ritorna il valore true se x un elemento dellinsieme A; in caso
contrario ritorna il valore false.
Esempio 6.2.4
> Z := 1,2,3,4;
Z := 1, 2, 3, 4
> member(0, Z);
false
> member(3, Z);
true
38 CAPITOLO 6. SUCCESSIONI, INSIEMI E LISTE
6.3 Liste
Una lista una successione ordinata di oggetti racchiusa tra parentesi quadre. Mediante
nops(lista) possibile conoscere il numero di elementi di lista, mediante op(i, lista)
o lista[i] possibile accedere alliesimo elemento di lista.
Esempio 6.3.1
> [1,2,3];
[1, 2, 3]
> ListaVuota := [ ];
ListaVuota := [ ]
> L := [seq(i^2, i = -1..3)];
L := [1, 0, 1, 4, 9]
> nops(L);
5
> op(2, L); L[3];
0
1
Il comando op(lista) restituisce la successione degli elementi di lista: grazie ad esso
possibile concatenare due o pi liste.
Esempio 6.3.2
> L1 := [1, 0, -1]; L2 := [3, 3, 1, 0];
L1 := [1, 0, 1]
L2 := [3, 3, 1, 0]
> op(L1);
1, 0, 1
> L3 := [op(L1), op(L2), 9, 2];
L3 := [1, 0, 1, 3, 3, 1, 0, 9, 2]
Per modicare liesimo elemento di lista bisogna usare il comando subsop (= substitute
operand), avente la sintassi seguente:
subsop(i = nuovo_valore, lista).
6.4. COMBINAZIONI DI LISTE E INSIEMI 39
Esempio 6.3.3
> lista := [3, 4, 1, 2];
lista := [3, 4, 1, 2]
> subsop(2=9, lista);
[3, 9, 1, 2]
> lista;
[3, 4, 1, 2]
> lista := subsop(2=9, lista); # Cos si modifica lista
lista := [3, 9, 1, 2]
> lista := subsop(1=5, 3=x, 4=y, lista); # Pi modifiche
lista := [5, 9, x, y]
Osservazione 6.3.1
possibile cambiare liesimo elemento di lista mediante unistruzione del tipo lista[i]
:= nuovo_valore.
Il comando member funziona come nel caso degli insiemi (si pu aggiungere un terzo para-
metro opzionale; vedi guida); con il comando sort possibile ordinare gli elementi di una
lista.
6.4 Combinazioni di liste e insiemi
Si possono naturalmente costruire anche liste di liste, insiemi di liste, liste di insiemi,
insiemi di insiemi, liste di insiemi di liste, eccetera (per esempio le matrici potrebbero
essere denite come liste di liste; non tuttavia conveniente poich esiste un tipo di dati
particolare per le matrici). Per accedere a elementi particolari di queste strutture di dati
complesse si far uso di (pi) indici racchiusi tra parentesi quadre.
Esempio 6.4.1
> restart:
> lista := [{1,2,3}, [a,b,c,d,e,f,g], x];
lista := [3, 1, 2, [a, b, c, d, e, f, g], x]
> lista[2];
[a, b, c, d, e, f, g]
> lista[2][3];
c
40 CAPITOLO 6. SUCCESSIONI, INSIEMI E LISTE
> lista[2][2..4];
b, c, d
> lista := subsop(2=subsop(3=x, lista[2]), lista);
lista := [3, 1, 2, [a, b, x, d, e, f, g], x]
6.5 Selezione di elementi
Maple mette a disposizione il comando select che permette di selezionare gli elementi
di una lista o di un insieme che soddisfano un determinato criterio. Ci sono tre varianti
per luso di select:
select(f, L), dove f una funzione booleana (ossia: il risultato della funzione
true o false) data in forma anonima e L una lista o un insieme;
select(has, L, prop), dove L una lista o un insieme e prop la propriet che gli
elementi di L devono avere per apparire nel risultato (has = ha, possiede);
select(type, L, dt), dove L una lista o un insieme e dt il tipo di dato che
devono avere gli elementi di L per apparire nel risultato.
Esempio 6.5.1
> restart:
> lista := [2,13,5,1,12,4,6];
lista := [2, 13, 5, 1, 12, 4, 6]
> select(x -> x>10, lista); # seleziona gli elementi della lista > 10
[13, 12]
> select(type, lista, odd); # seleziona gli elementi dispari della lista
[13, 5, 1]
> has(lista, 5);
true
> select(has, lista, {9,2,7,1});
[2, 1]
6.6. CALCOLARE CON LE LISTE 41
6.6 Calcolare con le liste
Maple non in grado di operare in modo naturale con le liste; tuttavia i comandi map e
zip permettono di fare alcune manipolazioni interessanti.
Esempio 6.6.1
> restart:
> L := [1,2,3];
L := [1, 2, 3]
> sqrt(L);
Error, sqrt expects its 1st argument, x, to be of type algebraic,
but received [1, 2, 3]
Il comando map permette di applicare un comando a pi elementi di una lista.
Esempio 6.6.2
> map(sqrt, L);
[1,

2,

3]
> map([sin,cos], 1);
[sin(1), cos(1)]
> map([sin,cos], [1,2]);
[[sin(1), cos(1)], [sin(2), cos(2)]]
Il comando zip(f, lista_1, lista_2) permette di far operare la funzione f sugli ele-
menti omonimi delle liste lista_1, lista_2.
Esempio 6.6.3
> zip((x,y) -> x+y, [a,b,c], [1,2,3]);
[a + 1, b + 2, c + 3]
> zip((x,y) -> [x,y], [a,b,c], [1,2,3]);
[[a, 1], [b, 2], [c, 3]]
42 CAPITOLO 6. SUCCESSIONI, INSIEMI E LISTE
CAPITOLO 7
Polinomi ed espressioni razionali
7.1 Introduzione
Maple in grado di manipolare polinomi ed espressioni razionali in vari modi ed eca-
cemente dal punto di vista del tempo di calcolo e delluso della memoria.
I polinomi e le espressioni razionali sono tra gli oggetti preferiti di Maple: per essi sono
deniti addirittura i tipi di dati polynom e ratpoly.
Esempio 7.1.1
> A := sin(x)*x^2 + 3*x - 1:
> type(A, polynom);
false
> B := x^2 + 2*x - 7: C := (x + 1)/(2*x - 1):
> type(B, polynom);
true
> type(C, ratpoly);
true
7.2 Polinomi ad una variabile
Sia dato il polinomio
p(x) = a
n
x
n
+ a
n1
x
n1
+ + a
1
x + a
0
, con a
n
,= 0
43
44 CAPITOLO 7. POLINOMI ED ESPRESSIONI RAZIONALI
Si dice che p(x) in forma canonica espansa se ordinato secondo le potenze decrescenti
di x, mentre si dice che in forma raccolta quando tutti i coecienti con la stessa potenza
sono raccolti (ma non necessariamente ordinati).
Sia p una variabile di tipo polynom.
Mediante degree(p) (degree = grado) si ottiene il grado del polinomio p, mentre con
ldegree(p) (ldegree = low degree) si ottiene lesponente della pi piccola potenza di p con
coeciente diverso da zero.
Il comando lcoeff(p) (lcoe = leading coecient) restituisce il coeciente direttore di
p; tcoeff(p) (tcoe = trailing coecient) restituisce il coeciente del monomio di grado
minore fra quelli che compongono p.
La successione dei coecienti non nulli di p si ottiene mediante coeffs(p, x) e, aggiun-
gendo come terzo argomento una variabile potenze, si pu anche memorizzare in essa la
successione delle potenze di x relative ai coecienti.
Con coeff(p, x^i) si ottiene il coeciente di x^i in p; per ottenere il termine noto
utilizzare coeff(p, x, 0).
Osservazione 7.2.1
I coecienti della successione restituita da coeffs(p, x) solitamente non sono ordinati
secondo le potenze crescenti o decrescenti di x. Si consiglia di utilizzare coeffs(p, x,
potenze) e di visualizzare anche il valore di potenze.
Esempio 7.2.1
> p := 5*x^4 - x^3 + 2*x - 4;
p := 5x
4
x
3
+ 2x 4
> degree(p);
4
> ldegree(p);
0
> lcoeff(p);
5
> tcoeff(p);
4
> coeffs(p, x);
4, 2, 5, 1
> coeffs(p, x, potenze); potenze;
4, 2, 5, 1
7.2. POLINOMI AD UNA VARIABILE 45
1, x, x
4
, x
3
> coeff(p, x^2);
0
> coeff(p, x^3);
1
Oltre alle comuni operazioni aritmetiche con i polinomi, Maple mette a disposizione altre
funzioni:
expand(p), per ridurre un polinomio in forma raccolta;
sort(p), per ordinare il polinomio (riduzione in forma canonica espansa);
gcd(p1, p2), per calcolare il massimo comune divisore di p1 e p2;
lcm(p1, p2), per calcolare il minimo comune multiplo di p1 e p2;
factor(p), per fattorizzare polinomi con coecienti razionali come prodotto di
polinomi irriducibili (su Q);
quo(p1, p2, x, resto), per calcolare p1 diviso p2 con x come incognita e memo-
rizzare il resto nella variabile resto;
rem(p1, p2, x, quoziente), per calcolare il resto di p1 diviso p2 con x come
incognita e memorizzare il quoziente nella variabile quoziente.
Per ragioni di ecienza Maple non ordina, di sua iniziativa, i polinomi secondo le potenze
crescenti o decrescenti dellincognita.
Esempio 7.2.2
> p1 := 8*x^5 - 12*x^4 - 14*x^3 + 7*x^2 + 9*x + 2;
p1 := 8x
5
12x
4
14x
3
+ 7x
2
+ 9x + 2
> p2 := 2 - 3*x + x^2;
p2 := 2 3x + x
2
> p1 * p2;
(8x
5
12x
4
14x
3
+ 7x
2
+ 9x + 2)(2 3x + x
2
)
> expand(%);
38x
5
36x
6
+ 8x
7
+ 25x
4
40x
3
11x
2
+ 12x + 4
> sort(%);
8x
7
36x
6
+ 38x
5
+ 25x
4
40x
3
11x
2
+ 12x + 4
46 CAPITOLO 7. POLINOMI ED ESPRESSIONI RAZIONALI
> gcd(p1, p2);
2 3x + x
2
> lcm(p1, p2);
8x
5
12x
4
14x
3
+ 7x
2
+ 9x + 2
> factor(p1);
(x 1)(x 2)(2x + 1)
3
> p3 := x^2 + x + 1;
p3 := x
2
+ x + 1
> quo(p1, p3, x, resto);
8x
3
20x
2
2x + 29
> resto;
18x 27
> rem(p1, p3, x, quoziente);
18x 27
> quoziente;
8x
3
20x
2
2x + 29
Osservazione 7.2.2
Maple in grado di lavorare con i polinomi anche su domini diversi dai comuni Z o Q,
per esempio sullanello degli interi gaussiani, su campi niti, su ampliamenti algebrici di
campi e su campi di funzioni. Per maggiori informazioni consultare la guida.
Per valutare il polinomio p nel punto valore si usa il comando subs(x = valore, p).
Esempio 7.2.3
> P := 3*x^3 - x^2 + 4*x -1;
P := 3x
3
x
2
+ 4x 1
> subs(x = 2, P);
27
7.3 Polinomi in pi variabili
Maple in grado di lavorare anche con polinomi in pi variabili. I comandi visti per i
polinomi in una variabile sono a disposizione anche per i polinomi in pi variabili. Nellusare
il comando sort si pu specicare il tipo di ordine desiderato aggiungendo il parametro
plex (plex = pure lexicographic) per lordine lessicograco denito da
x
i
y
j
x
i

y
j

i < i

oppure (i = i

e j < j

)
7.3. POLINOMI IN PI VARIABILI 47
(si avr dunque:
1 y y
2
. . . x xy x
2
. . .)
oppure il parametro tdeg (tdeg = total degree) per lordine denito da
x
i
y
j
x
i

y
j

i + j < i

+ j

oppure (i + j = i

+ j

e i < i

)
(si avr dunque:
1 y x y
2
xy x
2
y
3
xy
2
x
2
y x
3
. . .).
Tralasciando il parametro in sort verr preso per difetto il parametro tdeg.
Esempio 7.3.1
> p := expand((x*y - 2*y^2) * (x^2 - y) * 4 * (y^2 - 3*x));
p := 4x
3
y
3
12x
4
y 4xy
4
+ 12y
2
x
2
8x
2
y
4
+ 24x
3
y
2
+ 8y
5
24xy
3
> sort(p, [x, y], plex);
12x
4
y + 4x
3
y
3
+ 24x
3
y
2
8x
2
y
4
+ 12x
2
y
2
4xy
4
24xy
3
+ 8y
5
> sort(p, [x, y], tdeg);
4x
3
y
3
8x
2
y
4
12x
4
y + 24x
3
y
2
4xy
4
+ 8y
5
+ 12x
2
y
2
24xy
3
> factor(p);
4y(x 2y)(3x y
2
)(x
2
y)
Il polinomio dellesempio precedente potrebbe essere visto come un polinomio nella va-
riabile x con polinomi nella variabile y come coecienti. Il comando collect permette
di raccogliere una variabile in un polinomio in pi variabili; con subs si pu valutare un
polinomio in pi variabili.
Esempio 7.3.2
> collect(p, x);
12x
4
y + (24y
2
+ 4y
3
)x
3
+ (8y
4
+ 12y
2
)x
2
+ (24y
3
4y
4
)x + 8y
5
> collect(p, y);
8y
5
+ (4x 8x
2
)y
4
+ (4x
3
24x)y
3
+ (12x
2
+ 24x
3
)y
2
12x
4
y
> A := 3*x^2*y - x + 3*y -4;
A := 3x
2
y x + 3y 4
> subs(x = 1, y = -1, A);
11
48 CAPITOLO 7. POLINOMI ED ESPRESSIONI RAZIONALI
7.4 Espressioni razionali
Unespressione razionale F nella variabile x unespressione che pu essere scritta come
quoziente di due polinomi. Mediante numer(F) e denom(F) si pu accedere al numeratore
e, rispettivamente, al denominatore di F.
Esempio 7.4.1
> F := (3*x^3 - 9*x^2 - 3*x + 9)/(5*x^3 + 5*x^2 - x - 1);
F :=
3x
3
9x
2
3x + 9
5x
3
+ 5x
2
x 1
> numer(F);
3x
3
9x
2
3x + 9
> denom(F);
5x
3
+ 5x
2
x 1
Maple non semplica le espressioni razionali in una forma con numeratore e denominatore
primi fra loro (forma normale): per far ci bisogna utilizzare il comando normal(F). Even-
tuali semplicazioni sono fatte automaticamente solo se Maple scopre subito dei fattori
comuni.
Esempio 7.4.2
> normal(F);
3
x
2
4x + 3
5x
2
1
Osservazione 7.4.1
La semplicazione di espressioni razionali in forma normale non automatica per i seguenti
motivi:
non sempre la forma normale semplice (per esempio:
x
10000
1
x 1
pi compatto
della sua normalizzazione che un polinomio con diecimila termini);
la normalizzazione computazionalmente dispendiosa;
un utente potrebbe volere altre rappresentazioni, per esempio sotto forma di frazione
continua.
Naturalmente Maple in grado di lavorare anche con espressioni razionali in pi variabili.
La valutazione di unespressione razionale pu avvenire mediante il comando subs.
7.4. ESPRESSIONI RAZIONALI 49
Esempio 7.4.3
> A := (2*x + y^2) / (x*y);
A :=
2x + y
2
xy
> subs(x = 1, y = 2, A);
3
Le espressioni razionali di Maple si possono convertire in forma di frazione continua o in
forma di frazione algebrica semplice mediante il comando convert (consultare la guida).
50 CAPITOLO 7. POLINOMI ED ESPRESSIONI RAZIONALI
CAPITOLO 8
Equazioni, disequazioni e sistemi di equazioni
Maple in grado di risolvere, in modo esatto o approssimato, vari tipi di equazioni,
disequazioni e sistemi di equazioni in diversi domini algebrici.
8.1 Equazioni
La struttura di unequazione in Maple identica a quella in matematica:
primo membro = secondo membro
(se il secondo membro dellequazione 0 si pu tralasciare). Attenzione a non usare
erroneamente il simbolo di assegnazione := al posto di = nella denizione di unequazione.
Esempio 8.1.1
> 2*x - 4 = x^2 + 3*x - 1;
2x 4 = x
2
+ 3x 1
In Maple possibile assegnare un nome ad unequazione e accedere facilmente ai suoi
membri tramite lhs(equazione) (= left hand side = membro a sinistra delluguale di
equazione) e rhs(equazione) (= right hand side = membro a destra delluguale di
equazione).
Esempio 8.1.2
51
52 CAPITOLO 8. EQUAZIONI, DISEQUAZIONI E SISTEMI DI EQUAZIONI
> eq := 2 + x = 5*a - x^2 + 1;
eq := 2 + x = 5a x
2
+ 1
> lhs(eq);
2 + x
> rhs(eq);
5a x
2
+ 1
Il comando solve permette di risolvere unequazione in modo esatto nel campo dei nu-
meri complessi. Nella sua forma pi semplice ha come argomenti lequazione e lincognita
(lincognita necessaria se nellequazione appaiono pi variabili). Il risultato pu essere
una soluzione, una successione di soluzioni oppure nulla (se Maple non stato in grado di
trovare una soluzione).
Esempio 8.1.3
> solve(3*x - 4 = 0, x);
4
3
> solve(x^2 - x = 1, x);
1
2
+
1
2

5,
1
2

1
2

5
> solve(x^2 = -1, x);
I, I
> solve(x = x + 1, x); # Non ci sono soluzioni => nessun output
> solve(exp(x) = 2, x);
ln(2)
Se Maple risolve unequazione rispetto alla variabile x e trova una soluzione, essa non viene
assegnata automaticamente alla x: per far ci bisogna provvedere mediante unistruzione
di assegnazione oppure mediante il comando assign.
Esempio 8.1.4
> eq := 3*x = 6;
eq := 3x = 6
> solve(eq, x);
2
> x; # x non vale 2!
x
8.1. EQUAZIONI 53
> x := solve(eq, x);
x := 2
> x;
2
> x := x:
> solve(5*x - 15 = 0, x);
3
> assign(x, %); x;
3
possibile che la risoluzione di equazioni polinomiali mediante solve fornisca un risultato
contenente lespressione RootOf(p), dove p polinomio nella variabile _Z (nome interno
dato dal sistema). Ci signica che alcune soluzioni dellequazione sono radici del poli-
nomio p. Mediante il comando allvalues(RootOf(p)) si possono avere tutte le radici
(approssimate) di p (chiaramente in allvalues si pu usare x al posto di _Z).
Prima di tentare di risolvere unequazione Maple tenta di semplicarla. Questo pu
portare a delle soluzioni non corrette, come nellesempio seguente (radice estranea):
Esempio 8.1.5
> solve((x - 1)^2 / (x^2 - 1) = 0, x);
1
Nel caso di equazioni non lineari, soprattutto quelle contenenti funzioni trigonometriche,
Maple si accontenta spesso di ritornare una sola soluzione, anche se ne esistono diverse.
Esempio 8.1.6
> solve(cos(Pi*x) = 0, x);
1
2
Il comando fsolve(equazione, x, opzioni) permette di risolvere equazione rispetto
allincognita x usando laritmetica in virgola mobile (metodi numerici). Come opzioni
possibile scegliere:
complex se si desidera una radice complessa (nota: se equazione di tipo polinomiale
tutte le radici complesse saranno determinate);
a..b se si desidera che la soluzione venga ricercata nellintervallo aperto ]a,b[;
avoid=s se si desiderano escludere certi valori quando si cercano le radici dellequa-
zione (s un insieme di equazioni del tipo variabile = valore_da_escludere);
54 CAPITOLO 8. EQUAZIONI, DISEQUAZIONI E SISTEMI DI EQUAZIONI
maxsols = n se si vogliono determinare al massimo n soluzioni;
fulldigits se si desidera che fsolve usi, a scapito del tempo di calcolo, sempre
Digits cifre durante il calcolo (per difetto fsolve usa una precisione inferiore a
Digits nei suoi calcoli interni quando Digits grande: ci per risparmiare tempo e
memoria).
Esempio 8.1.7
> fsolve(x - 2*x*cos(x) = 1, x);
7.248719454
> fsolve(x - 2*x*cos(x) = 1, x, 3..7);
5.126601871
> fsolve(x^6 - 5*x^5 + x - 3 = 0, x);
.9208722810, 4.999359795
> fsolve(x^6 - 5*x^5 + x - 3 = 0, x, complex);
.2651472528 .8733209135 I, .2651472528 + .8733209135 I,
.7259034957 .5053232551 I, .7259034957 + .5053232551 I,
4.999359795, .9208722810
> fsolve(x^6 - 5*x^5 + x - 3 = 0, x, complex, maxsols=3);
.9208722810, .2651472528 .8733209135 I, .2651472528 + .8733209135 I
> fsolve(sin(x), x, avoid={x=0,x=Pi,x=-Pi}, -10..10);
6.283185307
Il comando roots(p, a1, a2, ...) permette di determinare gli zeri del polinomio uni-
variato a coecienti razionali p sul campo algebrico che si ottiene aggiungendo a Q gli
elementi a1, a2, eccetera. Il risultato restituito sottoforma di lista di liste di due elementi:
il primo elemento lo zero, il secondo la molteplicit dello zero.
Mediante Roots(p) mod n si possono determinare gli zeri di p nel campo nito Z
n
.
Esempio 8.1.8
> roots(x^2 - 3*x + 1); # cerca gli zeri razionali
[ ]
8.1. EQUAZIONI 55
> # cerca gli zeri della forma a + b*sqrt(5), con a e b razionali
> roots(x\acccirc 2 - 3*x + 1, sqrt(5));
__
3
2

1
2

5, 1
_
,
_
3
2
+
1
2

5, 1
__
> Roots(x^2 - 3*x + 1) mod 5;
[ [ 4, 2 ] ]
Il comando realroot(p, lung) restituisce degli intervalli di ampiezza lung comprendenti
le radici reali di p (il secondo argomento lung facoltativo).
Esempio 8.1.9
> realroot(3*x^5+x^4-10*x^3+5*x^2+x-5);
[ [ 0, 2 ], [ 2, 0 ], [ 4, 2 ] ]
> realroot(3*x^5 + x^4 - 10*x^3 + 5*x^2 + x - 5, 0.000001);
__
1516127
1048576
,
47379
32768
_
,
_
738757
1048576
,
184689
262144
_
,
_
561187
262144
,
2244747
1048576
__
> evalf(%);
[[ 1.445891380, 1.445892334 ], [ .7045335770, .7045326233 ],
[ 2.140758514, 2.140757561 ]]
Mediante isolve possibile risolvere equazioni diofantee (ossia equazioni in Z), mentre
mediante msolve possibile risolvere equazioni nellanello Z
n
(consultare la guida per
maggiori informazioni).
Esempio 8.1.10
> isolve(2*x^2 + 3*y = 2);
y = 4 _Z1 6 _Z1
2
, x = 1 + 3 _Z1 , y = 2 8 _Z1 6 _Z1
2
, x = 2 + 3 _Z1
> msolve(2*x^2 + 3*x = 2, 6); # modulo 6
x = 2 , x = 4
Il simbolo _Z1 sopra sta a signicare che esistono innite soluzioni per lequazione data e
che una soluzione la si pu ottenere sostituendo a _Z1 un qualsiasi valore intero.
56 CAPITOLO 8. EQUAZIONI, DISEQUAZIONI E SISTEMI DI EQUAZIONI
8.2 Disequazioni
Il comando solve utilizzabile anche per risolvere disequazioni (questa possibilit non
sussiste purtroppo per il comando fsolve). Da notare che si usa >= per indicare maggiore
o uguale e <= per indicare minore o uguale.
Esempio 8.2.1
> solve(x^2 - 5*x + 4 < 0, x);
RealRange(Open(1), Open(4))
> solve(x^4 - 1 >= 0, x);
RealRange(, 1), RealRange(1, )
> solve((x + 1)/(2*x-4) >= 0, x);
RealRange(, 1), RealRange(Open(2), )
In generale non bisogna aspettarsi molto da Maple nella risoluzione di disequazioni: sem-
bra in grado di trattare discretamente disequazioni polinomiali e razionali fratte nch in
grado di risolvere esattamente le equazioni corrispondenti; risolve le disequazioni esponen-
ziali e logaritmiche elementari, non (ancora) in grado di risolvere disequazioni irrazionali
(se non alcuni casi particolari) e altri tipi di disequazioni non lineari.
8.3 Sistemi di equazioni
Per risolvere un sistema di equazioni bisogna dare come argomenti di solve linsieme delle
equazioni e linsieme delle incognite del sistema.
Esempio 8.3.1
Per risoluzione il sistema lineare
_
2x + y = 1
x y = 2
bisogna impartire il comando seguente:
> solve(2*x + y = 1, x - y = 2, x, y);
x = 1, y = 1
Si pu procedere anche nel modo seguente:
> equazioni := 2*x + y = 1, x - y = 2;
equazioni := 2x + y = 1, x y = 2
8.3. SISTEMI DI EQUAZIONI 57
> incognite := x, y;
incognite := x, y
> solve(equazioni, incognite);
x = 1, y = 1
oppure anche cos:
> eq1 := 2*x + y = 1; eq2 := x - y = 2;
eq1 := 2x + y = 1
eq2 := x y = 2
> solve(eq1, eq2, x, y);
x = 1, y = 1
Nellesempio sopra alle variabili x e y non vengono assegnati i valori delle soluzioni: se ci
desiderato bisogna usare il comando assign.
Esempio 8.3.2
> solve(3*x - 4*y = 10, 7*x + y = 12, x, y);
y =
34
31
, x =
58
31

> assign(%); x; y;
58
31
34
31
Naturalmente possibile risolvere anche alcuni sistemi di equazioni non lineari ed possi-
bilire usare anche il comando fsolve.
Esempio 8.3.3
> restart:
> eq1 := x^2 + y^2 = 9; eq2 := y = x + 1;
eq1 := x
2
+ y
2
= 9
eq2 := y = x + 1
> solve(eq1,eq2,x,y);
y = RootOf( _Z
2
_Z 4, label = _L1), x = RootOf( _Z
2
_Z 4, label = _L1) 1
58 CAPITOLO 8. EQUAZIONI, DISEQUAZIONI E SISTEMI DI EQUAZIONI
> allvalues(%);
_
y =
1
2
+
1
2

17, x =
1
2
+
1
2

17
_
,
_
x =
1
2

1
2

17, y =
1
2

1
2

17
_
> evalf(%);
y = 2.561552813, x = 1.561552813 ,
y = 1.561552813, x = 2.561552813
> fsolve(eq1,eq2,x,y);
y = 1.561552813, x = 2.561552813
Da notare che largomento label di RootOf serve per distinguere non specicate radici della
stessa equazione.
Si possono utilizzare anche i comandi isolve e msolve per la risoluzione, rispettivamente,
di sistemi di equazioni diofantee e di sistemi di congruenze modulo m.
CAPITOLO 9
Somme e prodotti
9.1 Somme
Il comando sum(f(i), i=a..b) permette di calcolare la somma (denita o indenita)
b

i=a
f(i). La forma inerte Sum visualizza il simbolo di sommatoria (tale comando si pu
usare in combinazione con il comando value(espressione) che valuta espressione).
Esempio 9.1.1
> sum(i, i=1..100);
5050
> sum(i, i=1..n);
1
2
(n + 1)
2

1
2
n
1
2
> factor(%);
1
2
n(n + 1)
> Sum(1/k!, k=0..+infinity);
+

k=0
1
k!
> value(%);
e
59
60 CAPITOLO 9. SOMME E PRODOTTI
Il comando add si usa in modo simile al comando sum, con la dierenza che esso utilizzabile
solo con somme denite (ossia: come risultato non pu restituire una formula).
Esempio 9.1.2
> add(i, i=1..100);
5050
> add(i, i=1..n);
Error, unable to execute add
Se la variabile usata per lindice i ha gi un valore potrebbero sorgere dei problemi nel
calcolo del valore della somma (ci avviene anche per altri comandi che fanno uso di variabili
indice). Il problema si risolve facilmente usando come indice una variabile non assegnata
oppure, pi elegantemente, quotando lindice i (ossia scrivendo i tra accenti acuti) ad ogni
occorrenza: questo modo di procedere fortemente consigliato!
Esempio 9.1.3
> i := 1: # la variabile i ha un valore
> sum(1/i, i=1..10);
Error, (in sum) summation variable previously assigned, second argument
evaluates to 1=1..10
> sum(1/i, i=1..10);
7381
2520
9.2 Prodotti
Il comando product(f(k), k=a..b) permette di calcolare il prodotto (denito o indeni-
to)
b

k=a
f(k) (esiste anche la forma inerte Product).
Esempio 9.2.1
> Product(k, k=1..10);
10

k=1
k
> value(%);
3628800
9.2. PRODOTTI 61
Il comando mul si usa in modo simile al comando product, con la dierenza che esso
utilizzabile solo con prodotti deniti (ossia: come risultato non pu restituire una formula).
Esempio 9.2.2
> mul(k, k=1..10);
3628800
> mul(k, k=1..n);
Error, unable to execute mul
62 CAPITOLO 9. SOMME E PRODOTTI
CAPITOLO 10
Algebra lineare
Anch sia possibile trattare gli oggetti dellalgebra lineare predeniti in Maple neces-
sario caricare la libreria linalg. Per far ci bisogna eseguire il comando with(linalg):
( consigliabile terminare il comando con un due punti poich in caso contrario verr
mostrata sullo schermo la lista di tutti i comandi della libreria linalg).
Per tutto il capitolo si assume che allinizio di ogni paragrafo siano stati impartiti i comandi
restart: e with(linalg):.
10.1 Denizione di matrici
Una matrice , per Maple, una lista di righe e ogni riga , a sua volta, una lista. Si pu
denire una matrice mediante il comando matrix, che pu avere diversi argomenti.
Esempio 10.1.1
La seguente matrice A denita come una lista di liste:
> A := matrix([ [1,2,3], [3,4,5], [6,5,8], [9,7,2]]);
A :=
_

_
1 2 3
3 4 5
6 5 8
9 7 2
_

_
Esempio 10.1.2
La seguente matrice B denita indicando come argomenti del comando matrix il numero
di righe, il numero di colonne e la lista degli elementi della matrice:
63
64 CAPITOLO 10. ALGEBRA LINEARE
> B := matrix(2, 3, [1, 2, 3, 4, 5, 6]);
B :=
_
1 2 3
4 5 6
_
Esempio 10.1.3
La seguente matrice C denita indicando come argomenti del comando matrix il numero
di righe, il numero di colonne e una funzione degli indici degli elementi della matrice (in
questo caso: la somma degli indici):
> C := matrix(3, 3, (i, j) -> i + j);
C :=
_
_
2 3 4
3 4 5
4 5 6
_
_
Esempio 10.1.4
> f := proc(i, j)
if i < j then i^j else j^i; end if;
end proc:
> F := matrix(4, 3, f);
F :=
_

_
1 1 1
1 4 8
1 8 27
1 16 81
_

_
Esempio 10.1.5
Ecco un modo per denire la matrice identit di ordine n:
> id := n -> matrix(n, n,
proc(i, j) -> if i=j then 1 else 0; end if; end proc):
> id(2);
_
1 0
0 1
_
> id(3);
_
_
1 0 0
0 1 0
0 0 1
_
_
10.2. OPERAZIONI CON LE MATRICI 65
Per visualizzare gli elementi della matrice A non suciente digitare A; al prompt di
Maple ma bisogna utilizzare il comando evalm (evaluate matrix) oppure print.
Esempio 10.1.6
> A;
A
> evalm(A);
_

_
1 2 3
3 4 5
6 5 8
9 7 2
_

_
Con il comando A[i,j]; possibile accedere allelemento A
ij
della matrice A.
Esempio 10.1.7
> A[2, 3];
5
> A[4, 1] := -3;
A
4,1
:= 3
> evalm(A);
_

_
1 2 3
3 4 5
6 5 8
3 7 2
_

_
10.2 Operazioni con le matrici
Deniamo dapprima due matrici A e B che ci serviranno nei prossimi esempi.
> A := matrix(3, 3, [1,2,3,4,5,6,7,8,9]);
A :=
_
_
1 2 3
4 5 6
7 8 9
_
_
66 CAPITOLO 10. ALGEBRA LINEARE
> B := matrix(3, 3, ilcm);
B :=
_
_
1 2 3
2 2 6
3 6 3
_
_
Per sommare due matrici si usa il simbolo +, per sottrarre due matrici si usa il simbolo
-, per moltiplicare uno scalare per una matrice si usa il simbolo *, per moltiplicare due
matrici si usa il simbolo &*.
Esempio 10.2.1
Sommiamo le matrici A e B:
> A + B;
A + B
> evalm(%);
_
_
2 4 6
6 7 12
10 14 12
_
_
Mediante il comando matadd possibile visualizzare subito il risultato della somma di due
matrici:
> matadd(A, B);
_
_
2 4 6
6 7 12
10 14 12
_
_
Esempio 10.2.2
Calcoliamo A B:
> A - B:
> evalm(%);
_
_
0 0 0
2 3 0
4 2 6
_
_
In alternativa si poteva usare il comando matadd(A, -B); che avrebbe visualizzato subito
il risultato sullo schermo.
10.2. OPERAZIONI CON LE MATRICI 67
Esempio 10.2.3
Calcoliamo 3A:
> 3*A:
> evalm(%);
_
_
3 6 9
12 15 18
21 24 27
_
_
In alternativa si poteva usare il comando scalarmul(A, 3); che avrebbe visualizzato
subito il risultato sullo schermo.
Esempio 10.2.4
Calcoliamo A B:
> A &* B:
> evalm(%);
_
_
14 24 24
32 54 60
50 84 96
_
_
In alternativa si poteva usare il comando multiply(A, B); che avrebbe visualizzato subito
il risultato sullo schermo.
Ricordiamo che il prodotto di matrici non commutativo.
Esempio 10.2.5
> evalm((A &* B) - (B &* A));
_
_
16 12 18
20 8 12
2 24 24
_
_
anche possibile calcolare le potenze di matrici quadrate.
Esempio 10.2.6
> A^3:
> evalm(%);
_
_
468 576 684
1062 1305 1548
1656 2034 2412
_
_
68 CAPITOLO 10. ALGEBRA LINEARE
La matrice trasposta di una matrice M la matrice M
t
che si ottiene scambiando ordi-
natamente le righe e le colonne di M. In Maple denito, per tale scopo, il comando
transpose.
Esempio 10.2.7
> transpose(A);
_
_
1 4 7
2 5 8
3 6 9
_
_
Per ogni matrice quadrata possiamo calcolare il determinante mediante il comando det e
la traccia mediante il comando trace (la traccia di una matrice quadrata la somma degli
elementi della diagonale principale).
Esempio 10.2.8
> det(A);
0
> trace(A);
15
> det(B);
12
> trace(B);
6
Una matrice quadrata M di ordine n detta regolare (o non singolare o invertibile) se il
suo determinante diverso da 0. In tal caso esiste una (e una sola) matrice quadrata di
ordine n, detta matrice inversa di M e indicata con M
1
, tale che
M M
1
= M
1
M = I
n
dove con I
n
indichiamo la matrice identit di ordine n.
Linversa della matrice quadrata M si calcola mediante il comando inverse(M); oppure
mediante il comando M^(-1); (nel secondo caso la matrice risultato non sar visualizzata).
10.2. OPERAZIONI CON LE MATRICI 69
Esempio 10.2.9
> A^(-1);
1
A
> evalm(%);
Error, (in linalg[inverse]) singular matrix
> inverse(B);
_

_
5
2
1
1
2
1
1
2
0
1
2
0
1
6
_

_
Il rango di una matrice si calcola mediante il comando rank. Dallalgebra lineare noto
che una matrice quadrata di ordine n invertibile se e solo il suo rango n.
Esempio 10.2.10
La matrice A non invertibile poich il suo rango diverso da 3:
> rank(A);
2
La matrice aggiunta della matrice quadrata M = (m
ij
) la matrice adg(M) = (m

ij
)
che si ottiene da M nel modo seguente: lelemento m

ij
uguale al prodotto fra (1)
i+j
e il determinante che si ottiene eliminando da M la iesima riga e la jesima colonna.
In Maple la matrice aggiunta si ottiene tramite il comando adjoint oppure tramite il
comando adj.
Esempio 10.2.11
> adjoint(A);
_
_
3 6 3
6 12 6
3 6 3
_
_
Dallalgebra lineare noto che, se M invertibile, vale:
M
1
=
1
det(M)
adg(M).
Esempio 10.2.12
Verichiamo quanto appena detto con la matrice B:
70 CAPITOLO 10. ALGEBRA LINEARE
> inverse(B);
_

_
5
2
1
1
2
1
1
2
0
1
2
0
1
6
_

_
> scalarmul(adjoint(B), 1/det(B));
_

_
5
2
1
1
2
1
1
2
0
1
2
0
1
6
_

_
Con il comando submatrix(M, a..b, c..d) si costruisce una matrice i cui elementi ven-
gono dalle righe con indice i tale a i b e dalle colonne con indice j tale che c j d
della matrice M.
Esempio 10.2.13
> submatrix(A, 2..3, 2..3);
_
5 6
8 9
_
> submatrix(A, 1..3, 2..3);
_
_
2 3
5 6
8 9
_
_
10.3 Matrici simboliche
Mediante il comando matrix(m, n); possibile denire una matrice simbolica con m righe
e n colonne.
Esempio 10.3.1
> M := matrix((3, 3);
M := array(1..3, 1..3, [ ])
> evalm(M);
10.4. MATRICI PARTICOLARI 71
_
_
M
1,1
M
1,2
M
1,3
M
2,1
M
2,2
M
2,3
M
3,1
M
3,2
M
3,3
_
_
Le matrici simboliche possono essere utili per dimostrare alcune propriet delle matrici.
Esercizio 10.3.1
Siano X, Y e Z tre matrici quadrate di ordine 3. Dimostrare, usando Maple, che:
1. det(X Y ) = det(X) det(Y );
2. tr(X + Y ) = tr(X) + tr(Y ) (con tr(X) si intende la traccia di X);
3. (X Y )
t
= Y
t
X
t
;
4. (X Y )
1
= Y
1
X
1
, con X e Y invertibili;
5. (X Y ) Z = X (Y Z);
6. (X + Y ) Z = X Z + Y Z.
10.4 Matrici particolari
Mediante il comando array(identity, 1..n, 1..n); si pu ottenere la matrice identit
di ordine n.
Esempio 10.4.1
> array(identity, 1..3, 1..3);
_
_
1 0 0
0 1 0
0 0 1
_
_
Con il comando diag, che ha per argomento una sequenza di elementi, si pu ottenere una
matrice diagonale.
Esempio 10.4.2
> diag(-5, 2, 3);
_
_
5 0 0
0 2 0
0 0 3
_
_
72 CAPITOLO 10. ALGEBRA LINEARE
Dato un vettore con n componenti si pu costruire la matrice quadrata di ordine n avente
come elementi della jesima colonna le potenze di ordine j 1 delle componenti del vettore:
una siatta matrice detta matrice di Vandermonde. Il comando vandermonde, che ha
come argomento una lista, permette di calcolare la matrice di Vandermonde relativa agli
elementi dati.
Esempio 10.4.3
> vandermonde([x, y, z]);
_
_
1 x x
2
1 y y
2
1 z z
2
_
_
La matrice di Hilbert di ordine n una matrice quadrata H = (h
ij
) di ordine n tale che
h
ij
=
1
i+j1
per 1 i, j n. Il comando hilbert, che ha come argomento la dimensione
della matrice, permette di calcolare la matrice di Hilbert dellordine desiderato.
Esempio 10.4.4
> hilbert(3);
_

_
1
1
2
1
3
1
2
1
3
1
4
1
3
1
4
1
5
_

_
Mediante il comando randmatrix si possono creare matrici di qualsiasi dimensione con
elementi casuali. Negli esempi che seguono illustriamo i vari argomenti che pu avere il
comando randmatrix.
Esempio 10.4.5
Se come unici argomenti di randmatrix diamo le dimensioni della matrice, verr restituita
una matrice della dimensione desiderata con elementi casuali interi compresi tra 99 e 99.
> randmatrix(5, 3);
_

_
85 55 37
35 97 50
79 56 49
63 57 59
45 8 93
_

_
Esempio 10.4.6
Il comando seguente restituisce una matrice di ordine 5 3 con elementi casuali interi
compresi tra 5 e 10:
10.4. MATRICI PARTICOLARI 73
> randmatrix(5, 3, entries = rand(5..10));
_

_
6 5 8
8 10 5
5 5 6
8 6 5
7 10 7
_

_
Esempio 10.4.7
Il comando seguente restituisce una matrice sparsa di ordine 5 3 (ossia una matrice con
gli elementi quasi tutti nulli) con elementi casuali interi compresi tra 1 e 9:
> randmatrix(5, 3, sparse, entries = rand(1..9));
_

_
5 0 2
0 0 0
0 0 7
1 7 6
9 0 0
_

_
Esempio 10.4.8
Il comando seguente restituisce una matrice simmetrica di ordine 3 (ossia una matrice
quadrata i cui elementi sono simmetrici rispetto alla diagonale principale) con elementi
casuali interi compresi tra 1 e 9:
> randmatrix(3, 3, symmetric, entries = rand(1..9));
_
_
2 9 1
9 2 7
1 7 3
_
_
Esempio 10.4.9
Il comando seguente restituisce una matrice antisimmetrica di ordine 3 (ossia una matrice
quadrata i cui elementi soddisfano lequazione m
ij
= m
ji
) con elementi casuali interi
compresi tra 1 e 9:
> randmatrix(3, 3, antisymmetric, entries = rand(1..9));
_
_
0 1 9
1 0 5
9 5 0
_
_
Esempio 10.4.10
Il comando seguente restituisce una matrice unimodulare di ordine 53 (ossia una matrice
i cui elementi soddisfano le condizioni m
ii
= 1 e m
ij
= 0 per i < j) con elementi casuali
interi compresi tra 1 e 9:
74 CAPITOLO 10. ALGEBRA LINEARE
> randmatrix(3, 3, unimodular, entries = rand(1..9));
_

_
1 5 9
0 1 2
0 0 1
0 0 0
0 0 0
_

_
10.5 Denizione di vettori
Per denire un vettore con Maple si usa il comando vector. Gli esempi seguenti mostrano
i possibili argomenti per tale comando.
Esempio 10.5.1
Il seguente vettore a denito indicando come argomenti del comando vector il numero
di elementi e la lista degli elementi del vettore:
> a := vector(3, [1, 2, 3]);
a := [1, 2, 3]
Esempio 10.5.2
Il seguente vettore

b denito indicando come argomento del comando vector solo la lista


degli elementi del vettore:
> b := vector([4, 5, 6]);
b := [4, 5, 6]
Esempio 10.5.3
Il seguente vettore c denito indicando come argomenti del comando vector il numero di
elementi e una funzione dellindice degli elementi del vettore (in questo caso: il quadrato
dellindice):
> c := vector(3, i -> i^2);
c := [1, 4, 9]
Esempio 10.5.4
possibile denire un vettore simbolico usando come unico argomento del comando vector
il numero di elementi del vettore.
> d := vector(3);
10.5. DEFINIZIONE DI VETTORI 75
d := array(1..3, [ ])
Per visualizzare gli elementi di un vettore v non suciente digitare v; al prompt di Maple
ma, come nel caso delle matrici, bisogna utilizzare il comando evalm oppure print.
Esempio 10.5.5
> print(d);
[d
1
, d
2
, d
3
]
Per accedere alla iesima componente del vettore v si usa il comando v[i];
Esempio 10.5.6
> c[2];
4;
> c[2] := 23;
c
2
:= 23
> evalm(c);
[1, 23, 9]
Mediante il comando randvector possibile denire un vettore con componenti casuali
(per difetto le componenti casuali saranno degli interi compresi tra 99 e 99).
Esempio 10.5.7
> randvector(3);
[85, 55, 37]
Esempio 10.5.8
Il seguente comando genera un vettore con 10 componenti casuali comprese tra 1 e 9:
> randvector(10, entries = rand(1..10));
[4, 7, 9, 6, 9, 2, 10, 6, 4, 8]
76 CAPITOLO 10. ALGEBRA LINEARE
10.6 Operazioni con i vettori
Deniamo dapprima tre vettori che ci serviranno per gli esempi di questo paragrafo:
> a := randvector(3, entries = rand(-10..10));
b := randvector(3, entries = rand(-10..10));
c := randvector(3, entries = rand(-10..10));
a := [4, 7, 8]
b := [10, 6, 8]
c := [5, 7, 6]
La somma di vettori si calcola usando loperatore + oppure il comando matadd (in questo
caso il risultato delloperazione sar visualizzato sullo schermo).
Esempio 10.6.1
> a + b;
evalm(%);
a + b
[6, 1, 0]
> matadd(a, b);
[6, 1, 0]
La dierenza di vettori si calcola usando loperatore -.
Esempio 10.6.2
> a - b;
evalm(%);
a b
[14, 13, 16]
> matadd(a, -b);
[14, 13, 16]
La moltiplicazione di uno scalare per un vettore si calcola con il simbolo * oppure con
il comando scalarmul (in questo caso il risultato delloperazione sar visualizzato sullo
schermo).
10.6. OPERAZIONI CON I VETTORI 77
Esempio 10.6.3
> 2 * a;
evalm(%);
2a
[8, 14, 16]
> scalarmul(a, 2);
[8, 14, 16]
Il prodotto scalare di due vettori v e w, in simboli v, w), si calcola con il comando dotprod
oppure con il comando innerprod.
Esempio 10.6.4
> dotprod(a, b);
146
La lunghezza (o norma o modulo) di un vettore v, in simboli [[v[[, si calcola con il comando
norm(v, 2) (nota: largomento 2 necessario poich esistono diversi tipi di norme).
Esempio 10.6.5
> norm(a, 2);

129
Langolo, in radianti, tra due vettori a e

b si calcola con il comando angle.
Esempio 10.6.6
> angle(a, b);
arccos(
73
12900

129

200)
> evalf(convert(%, degrees));
155.3615157degrees
Esercizio 10.6.1
Sia langolo fra i vettori a e

b. Vericare che:
= arccos
a,

b)
[[a[[ [[

b[[
78 CAPITOLO 10. ALGEBRA LINEARE
Il comando normalize(v) restituisce un vettore parallelo e concorde al vettore v e di
lunghezza 1.
Esempio 10.6.7
> normalize(a);
[
4
129

129,
7
129

129,
8
129

129 ]
Per vettori di uno spazio vettoriale tridimensionale denito pure il prodotto vettoriale,
calcolabile con Maple mediante il comando crossprod.
Esempio 10.6.8
> crossprod(a, b);
[8, 48, 46]
Esercizio 10.6.2
Denire una funzione per il calcolo del prodotto misto di tre vettori di uno spazio vettoriale
tridimensionale.
10.7 Manipolazioni con vettori e matrici
Deniamo dapprima quattro vettori simbolici che ci serviranno per gli esempi di questo
paragrafo:
> a := vector(3):
b := vector(3):
c := vector(3):
d := vector(3):
Il comando augment (o, equivalentemente, concat) unisce orizzontalmente due o pi ma-
trici o vettori (i vettori sono trattati come vettoricolonna). Le matrici e i vettori devono
avere lo stesso numero di righe.
Esempio 10.7.1
La matrice A costruita partendo dai vettoricolonna a e

b:
> A := augment(a, b);
10.7. MANIPOLAZIONI CON VETTORI E MATRICI 79
A :=
_
_
a
1
b
1
a
2
b
2
a
3
b
3
_
_
La matrice B costruita aggiungendo a destra della matrice A il vettorecolonna c:
> B := augment(A, c);
B :=
_
_
a
1
b
1
c
1
a
2
b
2
c
2
a
3
b
3
c
3
_
_
La matrice C costruita aggiungendo a destra della matrice A la matrice B:
> C := augment(A, B);
C :=
_
_
a
1
b
1
a
1
b
1
c
1
a
2
b
2
a
2
b
2
c
2
a
3
b
3
a
3
b
3
c
3
_
_
Il comando stackmatrix unisce verticalmente due o pi matrici o vettori (i vettori sono
trattati come vettoririga). Le matrici e i vettori devono avere lo stesso numero di colonne.
Esempio 10.7.2
La matrice X costruita partendo dai vettoririga a e

b:
> X := stackmatrix(a, b);
X :=
_
a
1
a
2
a
3
b
1
b
2
b
3
_
La matrice Y costruita aggiungendo sotto la matrice X il vettoreriga c:
> Y := stackmatrix(X, c);
Y :=
_
_
a
1
a
2
a
3
b
1
b
2
b
3
c
1
c
2
c
3
_
_
La matrice Z costruita aggiungendo sotto la matrice X la matrice Y :
> Z := stackmatrix(X, Y);
Z :=
_

_
a
1
a
2
a
3
b
1
b
2
b
3
a
1
a
2
a
3
b
1
b
2
b
3
c
1
c
2
c
3
_

_
80 CAPITOLO 10. ALGEBRA LINEARE
Il comando addrow(M, i, k, lambda); moltiplica la iesima riga di M per e somma il
risultato alla kesima riga di M. Il comando addcol lanalogo per le colonne.
Esempio 10.7.3
> M := concat(a, b, c, d);
M :=
_
_
a
1
b
1
c
1
d
1
a
2
b
2
c
2
d
2
a
3
b
3
c
3
d
3
_
_
> addrow(M, 1, 2, 3);
_
_
a
1
b
1
c
1
d
1
3a
1
+ a
2
3b
1
+ b
2
3c
1
+ c
2
3d
1
+ d
2
a
3
b
3
c
3
d
3
_
_
> addcol(M, 1, 2, 3);
_
_
a
1
3a
1
+ b
1
c
1
d
1
a
2
3a
2
+ b
2
c
2
d
2
a
3
3a
3
+ b
3
c
3
d
3
_
_
Il comando mulrow(M, i, lambda); moltiplica la iesima riga di M per . Il comando
mulcol lanalogo per le colonne.
Esempio 10.7.4
> mulrow(M, 1, 2);
_
_
2a
1
2b
1
2c
1
2d
1
a
2
b
2
c
2
d
2
a
3
b
3
c
3
d
3
_
_
> mulcol(M, 1, 2);
_
_
2a
1
b
1
c
1
d
1
2a
2
b
2
c
2
d
2
2a
3
b
3
c
3
d
3
_
_
Il comando swaprow(M, i, j); scambia di posto la iesima riga e la jesima riga di M.
Il comando swapcol lanalogo per le colonne.
Esempio 10.7.5
> swaprow(M, 1, 2);
10.8. RISOLUZIONE DI SISTEMI DI EQUAZIONI LINEARI 81
_
_
a
2
b
2
c
2
d
2
a
1
b
1
c
1
d
1
a
3
b
3
c
3
d
3
_
_
> swapcol(M, 1, 2);
_
_
b
1
a
1
c
1
d
1
b
2
a
2
c
2
d
2
b
3
a
3
c
3
d
3
_
_
10.8 Risoluzione di sistemi di equazioni lineari
Per risolvere il sistema matriciale A X =

b si pu usare il comando linsolve.


Esempio 10.8.1
> A := matrix([
[4, 6, 3, 2],
[1, 3, 0, 1],
[8, 3, 0, 4],
[5, 1, 5, 4]]):
> b := vector([9, 0, 2, 2]):
> linsolve(A, b);
[
139
65
,
142
195
,
307
195
,
281
65
]
Dato un sistema di equazioni lineari possiamo generare la matrice del sistema e la matrice
incrementata del sistema mediante il comando genmatrix.
Esempio 10.8.2
> sistema := {
-2*x + 2*y + 7*z = 0,
x - y - 3*z = 1,
3*x + 2*y + 2*z = 5}:
Generiamo ora la matrice del sistema:
> M0 := genmatrix(sistema, [x, y, z]);
M0 :=
_
_
2 2 7
1 1 3
3 2 2
_
_
Aggiungendo flag come terzo argomento di genmatrix otteniamo la matrice incrementata
del sistema:
82 CAPITOLO 10. ALGEBRA LINEARE
> M := genmatrix(sistema, [x, y, z], flag);
M :=
_
_
2 2 7 0
1 1 3 1
3 2 2 5
_
_
Con il comando gausselim (metodo di eliminazione di Gauss) possiamo ridurre la matrice
in forma a gradini:
> gausselim(M);
_
_
2 2 7 0
0 5
25
2
5
0 0
1
2
1
_
_
Mediante backsub si ottiene poi la soluzione:
> backsub(%);
[3, 4, 2]
Si poteva, in alternativa, usare il comando rref per ridurre la matrice M in forma canonica
a gradini e leggere la soluzione del sistema dallultima colonna della matrice ottenuta:
> rref(M);
_
_
1 0 0 3
0 1 0 4
0 0 1 2
_
_
Data invece una matrice si possono generare le equazioni lineari corrispondenti tramite il
comando geneqns.
Esempio 10.8.3
> N := matrix(3, 3, [0,8,5,4,9,0,9,4,6]);
_
_
0 8 5
4 9 0
9 4 6
_
_
Generiamo un sistema omogeneo nelle variabili x, y, z:
> geneqns(N, [x, y, z]);
8y + 5z = 0, 4x + 9y = 0, 9x + 4y + 6z = 0
Se invece volessimo creare un sistema inomogeneo basta aggiungere come terzo argomento
di geneqns il vettore dei termini noti:
10.9. AUTOVALORI E AUTOVETTORI 83
> v := vector(3, [7, 1, 7]):
> geneqns(N, [x, y, z], v);
8y + 5z = 7, 4x + 9y = 1, 9x + 4y + 6z = 7
Con il comando kernel(A) (o, equivalentemente, nullspace(A)) possibile determinare
il nucleo della matrice A, ossia linsieme dei vettori v che soddisfano lequazione lineare
A v =

0.
Esempio 10.8.4
Consideriamo la matrice seguente:
> A := > matrix(4,3,[1,1,1,-1,0,1,1,2,3,1,-1,-3]);
_

_
1 1 1
1 0 1
1 2 3
1 1 3
_

_
Allora:
> kernel(A);
[1, 2, 1]
che va cos interpretato: il vettore
_
1
2
1
_
una base del nucleo di A.
10.9 Autovalori e autovettori
Data una matrice quadrata A di ordine n si chiama matrice caratteristica di A la matrice
I
n
A, dove uno scalare e I
n
la matrice identit di ordine n.
Il determinante della matrice caratteristica di A si chiama polinomio caratteristico di A.
Le radici del polinomio caratteristico si chiamano autovalori (o valori propri ) di A, mentre
i vettori che soddisfano lequazione caratteristica
A v = v
si chiamano autovettori (o vettori propri ).
Lo spazio vettoriale generato dagli autovettori relativi allautovalore si chiama autospazio
(o spazio proprio) relativo a .
Nellesempio seguente vediamo i comandi che Maple mette a disposizione per trattare gli
oggetti deniti sopra.
84 CAPITOLO 10. ALGEBRA LINEARE
Esempio 10.9.1
Deniamo dapprima una matrice quadrata A di ordine 3:
> A := matrix(3,3,[1,-3,3,3,-5,3,6,-6,4]);
_
_
1 3 3
3 5 3
6 6 4
_
_
Ecco la matrice caratteristica di A:
> B := charmat(A, lambda);
B :=
_
_
1 3 3
3 + 5 3
6 6 4
_
_
Ecco il polinomio caratteristico di A:
> charpoly(A, lambda);

3
12 16
Verica:
> det(B);

3
12 16
Ecco gli autovalori di A:
> eigenvalues(A);
4, 2, 2
Verica:
> solve(det(B) = 0, lambda):
4, 2, 2
Ecco gli autovettori di A:
> eigenvectors(A);
[4, 1, [1, 1, 2]], [2, 2, [0, 1, 1], [1, 1, 0]]
Lultimo risultato va interpretato cos:
[4, 1, [1, 1, 2]] signica: 4 lautovalore di molteplicit 1,
__
1
1
2
__
una base del-
lautospazio relativo allautovalore 4;
[2, 2, [0, 1, 1], [1, 1, 0]] signica: -2 lautovalore di molteplicit 2,
__
0
1
1
_
,
_
1
1
0
__

una base dellautospazio relativo allautovalore 2.
10.10. LA LIBRERIA LINEARALGEBRA 85
10.10 La libreria LinearAlgebra
A partire dalla versione 6 di Maple V stata potenziata la numerica dellalgebra lineare,
grazie allalleanza commerciale di Maple con il NAG (Numerical Algorithms Group). Ci
ha portato a migliori e pi ecienti algoritmi numerici, soprattutto per il trattamento di
matrici molto grandi: queste nuove capacit sono comprese nella libreria LinearAlgebra.
Siccome non siamo interessati alluso di queste nuove capacit rimandiamo gli interessati
alla guida in linea di Maple.
86 CAPITOLO 10. ALGEBRA LINEARE
CAPITOLO 11
Limiti di funzioni
In questo capitolo avremo bisogno della rappresentazione graca di funzioni reali e per
questo motivo diamo qualche accenno sul comando plot.
Data una funzione reale f(x) si pu tracciarne il graco mediante il comando
> plot(f(x), x=a..b, y=c..d, opzioni);
dove con x=a..b si intende lintervallo delle ascisse [a, b], con y=c..d si intende lintervallo
delle ordinate [c, d] (questo intervallo facoltativo: se non viene dato, Maple sceglie
automaticamente un intervallo per le ordinate) e opzioni sono possibili opzioni che si
possono dare (titolo del graco, colore e tipo di linea, . . . ; consultare la guida).
possibile disegnare su uno stesso graco pi funzioni: basta dare come primo argomento
del comando plot linsieme delle funzioni da rappresentare.
Nota: tutte le gure saranno poste, per motivi di impaginazione, al termine del capitolo.
11.1 Motivazione
Consideriamo la funzione razionale F(x) =
2x
3
5x
2
+ x + 2
x 2
. evidente che non possia-
mo valutarla per x = 2:
> F := (2*x^3 - 5*x^2 + x + 2)/(x - 2);
F :=
2x
3
5x
2
+ x + 2
x 2
87
88 CAPITOLO 11. LIMITI DI FUNZIONI
> subs(x=2, F);
Error, division by zero
I limiti sono usati per scoprire quale valore dovrebbe assumere unespressione se fosse
denita. Nel nostro caso il valore perso si rappresenta con
> Limit(F, x=2);
lim
x2
2x
3
5x
2
+ x + 2
x 2
che viene valutato in
> value();
5
In molti casi il valore perso pu essere indovinato grazie ad una rappresentazione graca
della funzione. Disegnando il graco della nostra funzione nellintervallo [1, 3] possiamo
notare che la retta verticale passante per x = 2 non interseca il graco di F(x), ossia in
corrispondenza di x = 2 il graco di F(x) presenta un buco (vedi gura 1):
> plot(F, x = 1..3);
Il graco di F(x) identico, tranne che nel punto x = 2, al graco della funzione
> normal(F);
2x
2
x 1
(il numeratore e il denominatore di F(x) avevano in comune il fattore x 2).
Non sempre il risultato di un calcolo di limiti un valore nito; la rappresentazione graca
utile per confermare anche questo fatto. Se consideriamo, per esempio, G(x) =
F(x)
x 2
evidente che G(x) assume valori innitamente grandi per x che si avvicina a 2, come
conferma il graco (vedi gura 2):
> plot(F/(x-2), x=1..3, y=-10..10);
Talvolta si desidera stimare il valore di una funzione per valori di x molto grandi.
Esempio 11.1.1
Consideriamo la funzione razionale
> H := (4*x^2 + 1/x)/(3*x^2 - x);
H :=
4x
2
+
1
x
3x
2
x
Tracciando il graco di H nellintervallo [1, 10] si pu notare che esso decresce rapidamente
quando x cresce, no a stabilizzarsi ad un valore vicino a 1.4 (vedi gura 3):
> plot(H, x=1..10);
11.2. CALCOLO DI LIMITI CON MAPLE 89
Tale comportamento confermato dal graco di H nellintervallo [1, 100] (vedi gura 4):
> plot(H, x=1..100);
Facendo calcolare il limite da Maple si ottiene:
> Limit(H, x=infinity);
lim
x
4x
2
+
1
x
3x
2
x
che viene valutato in
> value();
4
3
Dunque: pi x si avvicina a , pi lespressione si avvicina a
4
3
. Questo fatto si pu
spiegare in questo modo: il termine x
2
presente nel numeratore e nel denominatore di H
cresce molto pi rapidamente di quanto fanno x oppure
1
x
. Assumendo grossolanamente
che tutti i termini piccoli possono essere ignorati e sostituiti con 0, lespressione che resta
pu essere semplicata in
4
3
.
11.2 Calcolo di limiti con Maple
Il comando limit(f(x), x=a, opzione) permette di calcolare lim
xa
f(x). Le opzioni che
ci interessano sono:
left, per calcolare il limite sinistro;
right, per calcolare il limite destro;
real, per calcolare il limite bidirezionale reale.
Se non viene specicata alcuna opzione il limite sar calcolato come limite reale bidirezio-
nale, a meno che a sia + o .
Il risultato di limit pu essere un numero, unespressione, , , undefined oppure un
intervallo p..q (questultima possibilit si presenta quando non pu essere trovato il limite
ma Maple sa che i valori di f sono nellintervallo [p, q] quando x tende ad a).
Esempio 11.2.1
> limit(x^2 + 2*x + 3, x=1);
6
> limit(1/x, x=0, right);

> limit(1/x, x=0, left);

90 CAPITOLO 11. LIMITI DI FUNZIONI


> limit(1/x, x=0, real);
undened
> limit(sin(1/x^2), x=0);
1 .. 1
Esiste anche il comando Limit, che la forma inerte di limit (ossia: Maple riscrive
semplicemente il limite, senza calcolarlo).
Esempio 11.2.2
> Limit(x^2 + 2*x + 3, x=1);
lim
x1
x
2
+ 2x + 3
> Limit(x^2 + 2*x + 3, x=1) = limit(x^2 + 2*x + 3, x=1);
lim
x1
x
2
+ 2x + 3 = 6
Talvolta pu essere necessario aiutare Maple a calcolare i limiti nei quali gurano dei
parametri indicando il segno del parametro: ci possibile mediante il comando assume.
Esempio 11.2.3
> limit(exp(a*x) * cos(b*x), x=-infinity);
lim
x()
e
ax
cos(bx)
> # Maple non stato in grado di calcolare il limite. Aiutiamolo!
> assume(a>0);
a
> limit(exp(a*x) * cos(b*x), x=-infinity);
0
Osservazione 11.2.1
Se la variabile x stata manipolata mediante assume, essa verr visualizzata come x, per
evidenziare il fatto che su di essa esistono delle restrizioni imposte dallutente.
Si possono calcolare anche limiti multidirezionali: in tal caso bisogner indicare i punti in
un insieme. Ogni punto verr raggiunto dalla stessa direzione; Maple ritorna indenito
se il limite dipende dalla direzione.
Esempio 11.2.4
> limit((x^2 - y^2) / (x^2 + y^2), x=0, y=0);
undened
> limit((x^2 - y^2) / (x^2 + y^2), x=1, y=2);

3
8
11.3. DEFINIZIONE FORMALE DI LIMITE 91
11.3 Denizione formale di limite
Diamo la denizione matematica rigorosa del concetto di limite, ossia dellespressione
f(x) si avvicina a L quando x si avvicina ad a.
Definizione 11.3.1
Si dice che il limite della funzione f(x) (avente dominio D
f
R)vale L, in simboli
lim
xa
f(x) = L,
se per ogni > 0 esiste un > 0 tale che [x a[ < implica [f(x) L[ < .
La denizione appena data serve per per dimostrare che il valore di un limite corretto.
Possiamo applicare questa denizione come se fosse un gioco tra due persone:
La prima persona sceglie un valore per , il pi cattivo possibile (solitamente
un valore molto piccolo!). La seconda persona scommette che in grado di
trovare un adeguato valore , come richiesto dalla denizione, da usare con .
Naturalmente la seconda persona vuole vincere la scommessa e dunque lunica possibilit
che ha per vincere il gioco quella di trovare una regola che fornisca per ogni valore di
(la regola deve essere valida per ogni x ]a , a + [D
f
).
Esempio 11.3.1
Vogliamo dimostrare che lim
x7
(x 4) = 3.
Sia dunque > 0 pressato. Dobbiamo trovare un > 0 tale che
[x 7[ < [(x 4) 3[ < .
Quanto scritto sopra valido se scegliamo = . Avremmo potuto, per esempio, scegliere
anche =

2
oppure =

5
, ma non = 2.
Esempio 11.3.2
Vogliamo dimostrare che lim
x1
(x
2
+ 1) = 2.
Carichiamo dapprima, mediante listruzione with, il package student che contiene dei
comandi per trattare problemi di analisi a livello licealepreuniversitario:
> restart: with(student):
Deniamo ora la funzione e il valore del limite proposto:
> f := x -> x^2 + 1; L := 2;
f := x x
2
+ 1
92 CAPITOLO 11. LIMITI DI FUNZIONI
L := 2
Dobbiamo trovare una restrizione per [x1[ in modo tale che la seguente disequazione sia
soddisfatta per quei valori di x che sono usati:
> abs(f(x) - L) < epsilon;
[x
2
1[ <
> factor();
[(x 1)(x + 1)[ <
> expand();
[x 1[[x + 1[ <
da cui si ottiene:
> isolate(, abs(x-1));
[x 1[ <

[x + 1[
La parte destra di questa disequazione
> B := rhs();
B :=

[x + 1[
una restrizione che dipende purtroppo da x e questo non ammissibile. Tuttavia le
osservazioni seguenti ci permettono di eliminare ogni riferimento a x in B:
Possiamo sempre scegliere la pi piccola fra due restrizioni. La regola che cerchiamo
deve specicare cosa succede nelle vicinanze di x = 1. Cos possiamo ignorare ogni
valore di x esterno ad una regione arbitraria, per esempio [x 1[ <
1
2
, anche se per
tali valori di x la f(x) si avvicina a L = 2.
Nella regione [x1[ <
1
2
possiamo sistematicamente sottostimare il valore di B usando
come unico valore di B il peggiore che possiamo determinare nellintero intervallo
(ossia: il pi piccolo).
Il numeratore di B la costante positiva , che stata scelta dal nostro avversario nel
gioco. Possiamo cos stimare B esaminando il comportamento di
> g := subs(epsilon=1, B);
1
[x + 1[
sulla regione [x 1[ <
1
2
e moltiplicando poi il risultato per .
Dal graco di g (vedi gura 5)
> plot(g, x=-0.5 .. 0.5);
segue che il valore minimo lo si ha per x =
1
2
: esso diventa il secondo candidato per la
nostra seconda restrizione. La nostra restrizione sar allora:
11.4. PROPRIET DEI LIMITI 93
> min(1/2, subs(x=1/2, B));
min
_
1
2
,
2
3

_
.
Scegliamo dunque = min
_
1
2
,
2
3

_
. Per questa restrizione abbiamo: [f(x) L[ < sempre
che [x 1[ < . Infatti:
[x 1[ < [x 1[ <

[x + 1[
[x 1[[x + 1[ = [x
2
+ 1 L[ <
Abbiamo cos trovato una regola per calcolare , dato un positivo qualsiasi.
Esercizio 11.3.1
Dimostrare, in modo analogo a quanto fatto nellesercizio precedente, che:
lim
x2
(23x
5
+ 105x
4
10x
2
+ 17x) = 2410 .
11.4 Propriet dei limiti
Nel seguito elenchiamo alcuni teoremi che riguardano le operazioni elementari con i limiti.
Si suppone che i limiti seguenti siano tutti deniti.
> restart: with(student):
Teorema 11.4.1 Il limite di una costante la costante stessa:
> Limit(k, x=c);
lim
xa
c
> expand();
c
Teorema 11.4.2 Le costanti possono essere messe in evidenza nel calcolo dei limiti:
> Limit(c*f(x), x=a);
lim
xa
cf(x)
> expand();
c lim
xa
f(x)
Teorema 11.4.3 Il limite di una somma uguale alla somma dei limiti:
> Limit((f(x) + g(x)), x=a);
lim
xa
(f(x) + g(x))
> expand();
lim
xa
f(x) + lim
xa
g(x)
94 CAPITOLO 11. LIMITI DI FUNZIONI
Teorema 11.4.4 Il limite di un prodotto uguale al prodotto dei limiti:
> Limit((f(x) * g(x)), x=a);
lim
xa
(f(x) g(x))
> expand();
lim
xa
f(x) lim
xa
g(x)
Teorema 11.4.5 Il limite di un quoziente uguale al quoziente dei limiti:
> Limit((f(x) / g(x)), x=a);
lim
xa
f(x)
g(x)
> expand();
lim
xa
f(x)
lim
xa
g(x)
Teorema 11.4.6 Limite di una potenza:
> Limit(f(x)^(g(x))), x=a);
lim
xa
f(x)
g(x)
> expand();
lim
xa
f(x)
lim
xa
g(x)
Teorema 11.4.7 Limite di una radice quadrata:
> Limit(sqrt(f(x), x=a);
lim
xa
_
f(x)
> expand();
_
lim
xa
f(x)
11.5 Il teorema sandwich
Teorema 11.5.1 Sia f(x) g(x) h(x) per ogni x vicino ad a.
Se lim
xa
f(x) = L = lim
xa
h(x) allora lim
xa
g(x) = L.
11.6. LIMITI DI SUCCESSIONI 95
Esempio 11.5.1
Vogliamo dimostrare che lim
x0
x sin(1/x) = 0.
Esaminiamo il graco della funzione nelle vicinanze di 0 (vedi gura 6):
> f := x -> x*sin(1/x);
f := x x sin(x
1
)
> plot(f(x), x=-0.5 .. 0.5);
Dal graco sembrerebbe che il limite sia 0 in x = 0.
Possiamo calcolare tale limite esattamente in x = 0 poich
[x[ x sin(x
1
) [x[, per ogni x vicino a 0.
Il graco della gura 7 mostra che [x[ un limite superiore per f. In modo analogo: [x[
un limite inferiore per f.
Siccome x sin(x
1
) [x[ abbiamo:
lim
x0
x sin(x
1
) lim
x0
[x[.
Analogamente:
lim
x0
[x[ lim
x0
x sin(x
1
).
Si pu dunque concludere che lim
x0
x sin(1/x) = 0.
La gura 8 rappresenta i tre graci insieme:
> plot({f(x), abs(x), -abs(x)}, x=-1..1);
11.6 Limiti di successioni
Una successione numerica (a
n
)
nN
non altro che una funzione avente linsieme N (o un
suo sottoinsieme) come dominio, ossia:
a : N R, n a(n) := a
n
Il termine a
n
della successione (a
n
)
nN
detto termine generale: esso, solitamente, fornisce
la regola per costruire tutti i termini della successione. Scriveremo, per comodit, (a
n
)
invece di (a
n
)
nN
.
Siamo interessati al comportamento della successione (a
n
) quando n . Si dice che la
successione (a
n
) converge verso il limite a per n e si scrive lim
n
a
n
= a se per ogni
> 0 esiste un M > 0 tale che per ogni n > M valga [a
n
a[ < .
Esempio 11.6.1
Consideriamo la successione dei reciproci dei numeri interi positivi:
96 CAPITOLO 11. LIMITI DI FUNZIONI
> a := n -> 1/n;
a := n
1
n
I primi dieci termini della successione sono:
> seq(a(i), i=1..10);
1,
1
2
,
1
3
,
1
4
,
1
5
,
1
6
,
1
7
,
1
8
,
1
9
,
1
10
e il limite della successione vale:
> Limit(a(n), n=infinity) = limit(a(n), n=infinity);
lim
n
1
n
= 0
come si pu ricavare anche dal graco della successione (vedi gura 9):
> punti := [seq([i, a(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
Esempio 11.6.2
Consideriamo la successione
> b := n -> n/(n+1);
b := n
n
n + 1
i cui primi dieci termini sono:
> seq(b(i), i=1..10);
1
2
,
2
3
,
3
4
,
4
5
,
5
6
,
6
7
,
7
8
,
8
9
,
9
10
,
10
11
Possiamo ipotizzare che (b
n
) converga verso 1 per n . Il graco della successione (vedi
gura 10) conferma la nostra ipotesi:
> punti := [seq([i, b(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
Vogliamo ora dimostrare rigorosamente che lim
n
b
n
= 1.
Comunichiamo dapprima a Maple che n sempre positivo (ci sar utile per le sempli-
cazioni automatiche, laddove appaiono valori assoluti):
> assume(n>0):
Sia dunque > 0 pressato. Dobbiamo determinare un M > 0 tale che per ogni n > M
valga:
> abs(b(n) - 1) < epsilon;

n
n +1
1

<
11.6. LIMITI DI SUCCESSIONI 97
> normal();
1
n +1
<
Per risolvere la disequazione precedente rispetto ad n dobbiamo dapprima caricare in
memoria la procedura isolate:
> readlib(isolate):
> isolate(, n+1);
n 1 <
1

> sol := solve(, n);


sol :=
_
+ 1

< n
_
Baster scegliere:
> M := lhs(sol[1]);
M :=
+ 1

Sia per esempio:


> epsilon := 0.0001;
:= .0001
Allora sar:
> M = M;
M = 9999.000000
Ci signica che per n > 9999 vale:
> abs(b(n) - 1) < epsilon;

n
n +1
1

< .0001
Proviamo con n = 10000:
> evalf(abs(b(10000) - 1)); is(abs(b(10000) - 1) < epsilon);
.00009999000100
true
Esempio 11.6.3
Consideriamo la successione
> restart: c := n -> (-1)^n/n;
c := n
(1)
n
n
98 CAPITOLO 11. LIMITI DI FUNZIONI
i cui primi 10 termini sono
> seq(c(i), i=1..10);
1,
1
2
,
1
3
,
1
4
,
1
5
,
1
6
,
1
7
,
1
8
,
1
9
,
1
10
converge evidentemente verso 0 per n . Il graco della successione (vedi gura 11 )
mostra un tipo di convergenza che si potrebbe dire alternato:
> punti := [seq([i, c(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
Una successione che non converge detta divergente. Negli esempi che seguono vogliamo
vedere vari modi nei quali una successione pu divergere.
Esempio 11.6.4
La successione
> d := n -> (n^3 + 3)/(20*n + 1);
d := n
n
3
+ 3
20n + 1
divergente. Infatti:
> Limit(d(n), n=infinity) = limit(d(n), n=infinity);
lim
n
n
3
+ 3
20n + 1
=
Il graco della successione (vedi gura 12) mostra il tipo di divergenza di (d
n
):
> punti := [seq([i, d(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
Esempio 11.6.5
Consideriamo ora la successione
> e := n -> 2^((-1)^n);
e := n 2
((1)
n
))
i cui primi dieci termini sono
> seq(e(i), i=1..10);
1
2
, 2,
1
2
, 2,
1
2
, 2,
1
2
, 2,
1
2
, 2
Calcolando il limite con Maple si ottiene una risposta un po strana:
> Limit(e(n), n=infinity) = limit(e(n), n=infinity);
lim
n
2
((1)
n
))
=
1
2
.. 2
11.6. LIMITI DI SUCCESSIONI 99
Ci signica che Maple riconosce che la successione limitata nellintervallo [0.5, 2], ma
il limite non esiste. La successione detta oscillante; i punti
1
2
e 2 sono i punti di ac-
cumulazione di (e
n
). La gura 13 mostra la rappresentazione graca della successione
(e
n
):
> punti := [seq([i, e(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
Esempio 11.6.6
Consideriamo la successione
> f := n -> (-1)^n * n/(n+1);
f := n
(1)
n
n
n + 1
i cui primi 10 termini sono
> seq(f(i), i=1..10);

1
2
,
2
3
,
3
4
,
4
5
,
5
6
,
6
7
,
7
8
,
8
9
,
9
10
,
10
11
Calcolando il limite si ottiene:
> Limit(f(n), n=infinity) = limit(f(n), n=infinity);
lim
n
(1)
n
n
n + 1
= 1 .. 1
Il graco della successione (vedi gura 14) conferma che 1 e 1 sono punti di accumulazione
di (f
n
):
> punti := [seq([i, f(i)], i=1..50)]:
> plot(punti, color=red, style=point, symbol=circle);
100 CAPITOLO 11. LIMITI DI FUNZIONI
CAPITOLO 12
Derivate
12.1 Introduzione
Sia data, tramite equazione, la funzione y = f(x). La retta tangente al graco di f(x) nel
punto x = a pu essere approssimata dalle rette secanti passanti per un secondo punto, di
ascissa x = b, che si avvicina a x = a.
> with(student):
> P := [a,f(a)]; Q := [b,f(b)];
P := [a, f(a)]
Q := [b, f(b)]
La pendenza della secante :
> pendenza := slope(Q,P);
pendenza :=
f(b) f(a)
b a
e questa pendenza approssima la pendenza della tangente nel punto x = a.
Esempio 12.1.1
Sia data la funzione
> f := x -> (x-1)*(x-2)*x;
f := x (x 1)(x 2)x
101
102 CAPITOLO 12. DERIVATE
Vogliamo approssimare la pendenza della tangente al graco di f(x) nel punto x =
1
5
.
Posto a =
1
5
consideriamo una successione di punti b = a + h, per piccoli valori di h:
> a := 1/5: b := a + h;
b :=
1
5
+ h
> h := 0.1: slope([b,f(b)], [a,f(a)]);
0.6900000000
> h := 0.01: slope([b,f(b)], [a,f(a)]);
0.8961000000
> h := 0.001: slope([b,f(b)], [a,f(a)]);
0.9176010000
Per calcolare il vero valore della pendenza della tangente in x =
1
5
bisogna calcolare il
limite delle pendenze precedenti per h tendente a 0:
> h := h: Limit(slope([b,f(b)], [a,f(a)]), h=0);
lim
h0
_

4
5
+ h
_ _

9
5
+ h
_ _
1
5
+ h
_

36
125
h
che vale
> m := value();
23
25
(si dice che questo valore la derivata di f(x) nel punto x =
1
5
). Lequazione della tangente
al graco di f(x) nel punto x =
1
5
dunque
> y = solve(y - f(a) = m * (x - a), y);
y =
13
125
+
23
25
x
La gura 1 mostra la situazione gracamente:
> showtangent(f(x), x=1/5, x=-1..1, y=-1..1);
(disegna la tangente al graco di f(x) nel punto x =
1
5
, nella regione piana [1, 1][1, 1]).
Nel seguito sia f(x) una funzione generica e x = a un punto generico. Se scegliamo un
secondo punto b come
> restart: with(student): b := a + h;
b := a + h
12.2. CALCOLO DELLE DERIVATE CON MAPLE 103
allora la pendenza della retta secante
> pendenza := slope([b,f(b)], [a,f(a)]);
pendenza :=
f(a + h) f(a)
h
Se b si avvicina ad a allora h si avvicina a 0 e quindi la pendenza della tangente data da
> m := Limit(pendenza, h=0);
m := lim
h0
f(a + h) f(a)
h
che viene semplicato da Maple in
> value();
D(f)(a)
Si dice che la derivata di f(x) nel punto x = a , sempre che esista, il limite visto sopra.
Si scrive:
f

(a) = lim
h0
f(a + h) f(a)
h
(invece di f

si usa anche
df
dx
o D(f)). evidente che:
f

(a) = lim
ba
f(b) f(a)
b a
(basta sostituire b con a + h).
12.2 Calcolo delle derivate con Maple
Il comando per derivare una funzione diff(f, x) (esiste anche la forma inerte Diff). Il
primo argomento di diff pu essere unespressione di Maple nella variabile x oppure una
funzione di Maple e in tal caso bisogner aggiungere la variabile tra parentesi.
Esempio 12.2.1
> f := x * sin(x); # f unespressione di Maple
f := x sin(x)
> Diff(f, x) = diff(f, x);

x
x sin(x) = sin(x) + x cos(x)
> g := x -> x + tan(x); # g una funzione di Maple
g := x x + tan(x)
104 CAPITOLO 12. DERIVATE
> diff(g, x); # Sintassi sbagliata e quindi risposta errata!
0
> diff(g(x), x);
2 + tan(x)
2
possibile derivare una funzione n volte rispetto alla variabile x scrivendo x$n come
secondo argomento del comando diff.
Esempio 12.2.2
> h := x^4 - 3*x^2 - 5*x + 12;
h := x
4
3x
2
5x + 12
> diff(h, x$3);
24x
Mediante diff(f, x, y, ...) possibile derivare f rispetto alle variabili x, y, ...
(naturalmente per derivate di ordine superiore si usa la sintassi descritta precedentemente).
diff(f, x, y) equivalente al comando diff(diff(f, x), y) (chiamata ricorsiva).
Esempio 12.2.3
> F := x * sin(y) + 3 * x^2 * y^3;
F := x sin(y) + 3x
2
y
3
> diff(F, x);
sin(y) + 6xy
3
> diff(F, y);
x cos(y) + 9x
2
y
2
> diff(F, x, y);
cos(y) + 18xy
2
> diff(F, x$2, y$3);
36
Osservazione 12.2.1
Da notare che il risultato di diff(f, x) non una funzione (di Maple) ma solo unespres-
sione, anche se f una funzione. Mediante il comando unapply si pu tuttavia trasformare
unespressione in una funzione.
Esempio 12.2.4
> G := x -> x*sin(x);
G := x x sin(x)
12.2. CALCOLO DELLE DERIVATE CON MAPLE 105
> dG := diff(G(x), x);
dG := sin(x) + x cos(x)
> type(dG, procedure);
false
> dG := unapply(dG, x);
dG := x sin(x) + x cos(x)
> type(dG, procedure);
true
Esiste anche loperatore dierenziale D che, nella sua forma pi generale ha la sintassi
D[i](f), dove i un intero o una successione di interi che designa le variabili rispetto alle
quali deve essere applicato loperatore (nota: D[i, j](f) = D[i](D[j](f))) e f una
funzione di Maple. Il risultato di D[i](f) una funzione di Maple.
Esempio 12.2.5
> D(sin);
cos
> D(f + g);
D(f) + D(g)
> D(f * g);
D(f)g + fD(g)
> D(f / g);
D(f)
g

fD(g)
g
2
> D(f@g); # @ loperatore per la composizione di funzioni
D(f)@g D(g)
> h := (x, y, z) -> x * y * cos(z);
h := (x, y, z) xy cos(z)
> D[1](h);
(x, y, z) y cos(z)
> D[1,2,3](h);
(x, y, z) sin(z)
> D[1,3$4](h);
y cos(z)
Osservazione 12.2.2
Essenzialmente D(f) equivale a unapply(diff(f(x), x)). diff deriva unespressione e
restituisce unespressione; D deriva una funzione di Maple e restituisce una funzione di
Maple.
106 CAPITOLO 12. DERIVATE
12.3 Derivate di funzioni implicite
Maple non in grado di calcolare direttamente le derivate implicite; tuttavia lo pu fare
con qualche piccolo aiuto. Vediamo come nel caso particolare in cui si volesse calcolare
dy
dx
dallequazione 5x
2
y
3
+ 2xy = x
2
7.
Deniamo dapprima lequazione:
> eq := 5 * x^2 * y^3 + 2 * x * y = x^2 - 7;
eq := 5x
2
y
3
+ 2xy = x
2
7
Per sottolineare il fatto che y una funzione di x facciamo la sostituzione seguente:
> eq2 := subs(y = y(x), eq);
eq2 := 5x
2
y(x)
3
+ 2xy(x) = x
2
7
Ora dovremmo derivare ogni sommando rispetto a x. Fortunatamente Maple mette a
disposizione il comando map(f, expr, arg1, arg2, ...) che applica la funzione f ad
ogni operando di expr rispettando eventuali ulteriori argomenti arg1, arg2, ... di f.
Dunque:
> eq3 := map(diff, eq2, x);
eq3 := 10xy(x)
3
+ 15x
2
y(x)
2
_

x
y(x)
_
+ 2y(x) + 2x
_

x
y(x)
_
= 2x
A questo punto risolviamo eq3 rispetto a
dy
dx
:
> solve(eq3, diff(y(x), x));

10xy(x)
3
+ 2y(x) 2x
15x
2
y(x)
2
+ 2x
dy
dx
vale cos:
> subs(y(x) = y, );

10xy
3
+ 2y 2x
15x
2
y
2
+ 2x
12.4 Estremi di una funzione
Si dice che una funzione reale f, di dominio D
f
, possiede il valore massimo assoluto nel
punto x = c se f(c) f(x), per ogni x D
f
.
Si dice che una funzione reale f, di dominio D
f
, possiede il valore minimo assoluto nel
punto x = c se f(c) f(x), per ogni x D
f
.
12.4. ESTREMI DI UNA FUNZIONE 107
Massimi e minimi assoluti sono detti estremi assoluti. Essi possono anche non essere unici,
come ben si pu vedere dalla gura 2:
> plot(cos(x), x=-17..17, y=-2..2);
oppure non essere niti (vedi gura 3):
> plot(x^3 - x^2 + 4*x + 4, x=-6..6);
Maple mette a disposizione i comandi minimize e maximize per determinare il minimo e
il massimo di una funzione. Prima di poter usare questi comandi necessario caricare in
memoria, mediante readlib(minimize), la libreria che contiene questi comandi.
Esempio 12.4.1
> restart: readlib(minimize):
> minimize(cos(x), {x});
1
> maximize(cos(x), {x});
1
> minimize(x^2, {x});
0
> maximize(x^2, {x});

Si dice che una funzione reale f, di dominio D


f
, possiede il valore massimo locale nel punto
x = c se esiste un > 0 con f(c) f(x), per ogni x [x , x + ].
Si dice che una funzione reale f, di dominio D
f
, possiede il valore minimo locale nel punto
x = c se esiste un > 0 con f(c) f(x), per ogni x [x , x + ].
Massimi e minimi locali sono detti estremi locali o relativi.
Come ben noto gli estremi locali si possono riconoscere facilmente dal graco di una fun-
zione f: sono quei punti che hanno la tangente orizzontale (parallela cio allasse x). I
candidati ad essere estremi locali si ricavano risolvendo lequazione f

(x) = 0.
Esempio 12.4.2
La gura 4 mostra che la funzione f(x) = 7x
3
+ 14x
2
7x 14 possiede un massimo e un
minimo locali nellintervallo [2, 2]:
> f := x -> 7*x^3 + 14*x^2 - 7*x - 14;
f := x 7x
3
+ 14x
2
7x 14
> plot(f(x), x=-2..2);
Risolvendo lequazione
> D(f)(x) = 0;
21x
2
+ 28x 7 = 0
108 CAPITOLO 12. DERIVATE
si possono trovare gli estremi locali:
> estremi := solve(, x);

2
3
+
1
3

7,
2
3

1
3

7
ossia, approssimandoli e ordinandoli:
> estremi := sort(evalf([]));
[1.548583770, 0.2152504369]
La gura 5 mostra il graco di f(x) e le tangenti orizzontali negli estremi locali:
> gr1 := showtangent(f(x),x=estremi[1],x=-2..2):
> gr2 := showtangent(f(x),x=estremi[2],x=-2..2):
> with(plots): display({gr1, gr2});
Le soluzioni di f

(x) = 0 sono i punti critici di f(x) (pi precisamente sarebbero le


ascisse di tali punti): oltre agli estremi locali potrebbero esserci anche punti di esso (o
semplicemente essi, ossia punti nei quali la tangente attraversa il graco della funzione.
Osservazione 12.4.1
I comandi minimize e maximize richiedono molto attenzione, soprattutto quando intervie-
ne la funzione valore assoluto oppure quando le derivate della funzione non possono essere
facilmente uguagliate a zero. Per esempio:
> minimize(abs(sin(x)));
1
Il risultato corretto era, ovviamente, 0.
> f := x^2 + sin(x) + cos(2*x);
f := x
2
+ sin x + cos(2x)
> minimize(f);
Nessuna risposta viene fornita da Maple. Aggiungendo come terzo parametro del comando
minimize un intervallo si ottiene:
> minimize(f);
4 + cos(4) sin(2)
> evalf();
2.437058952
che sbagliato, come si pu vedere dalla gura 6:
> plot(f, x=-2..2);
12.4. ESTREMI DI UNA FUNZIONE 109
Attenzione: non necessariamente un massimo locale maggiore di un minimo locale.
Esempio 12.4.3
> restart: with(student):
> f := x -> -x^5/5 + x^4 - x^3/3 - 3*x^2 + 2;
f :=
1
5
x
5
+ x
4

1
3
x
3
3x
2
+ 2
Gli estremi locali si ottengono risolvendo lequazione
> D(f)(x) = 0;
x
4
+ 4x
3
x
2
6x = 0
> estremi := solve(, x);
estremi := 0, 2, 3, 1
> estremi := sort([]);
estremi := [1, 0, 2, 3]
La gura 7 mostra che in x = 1 c un minimo locale che maggiore del massimo locale
situato in x = 3:
> gr1 := showtangent(f(x), x=estremi[1], x=-4..4, y=-10..10):
> gr2 := showtangent(f(x), x=estremi[2], x=-4..4, y=-10..10):
> gr3 := showtangent(f(x), x=estremi[3], x=-4..4, y=-10..10):
> gr4 := showtangent(f(x), x=estremi[4], x=-4..4, y=-10..10):
> display({gr1,gr2,gr3,gr4});

Potrebbero piacerti anche