Introduzione all`uso di Mathematica.nb

annuncio pubblicitario
Antonino Polimeno, Marco Ruzzi
Dipartimento di Scienze Chimiche - Università degli Studi di Padova
Metodi di Calcolo per la Chimica - A.A. 2015-2016
Mathematica: un ambiente di lavoro
per l’analisi di dati sperimentali
e lo sviluppo di modelli teorici.
2
Introduzione all'uso di Mathematica.nb
Introduzione all'uso di Mathematica.nb
Sommario
Premessa
1. Introduzione
2. Nozioni di base sull’uso di Mathematica
2.1 Input e output
2.2 La funzione Help
3. Calcolo Numerico e calcolo simbolico
3.1 Preliminari
3.2 Aritmetica degli interi
3.3 Aritmetica dei razionali e degli irrazionali
3.4 Calcolo esatto e calcolo approssimato
3.5 Algebra
4. Equazioni e sistemi di equazioni lineari
4.1 Risoluzione di equazioni in forma esatta
4.2 Risoluzione di equazioni in forma approssimata
4.3 Sistemi di equazioni (cenni)
5. Funzioni reali
5.1 Premessa: l’uguaglianza
5.2 Funzioni libreria predefinite
5.3 Calcolo e rappresentazione di funzioni da in 5.4 Elementi di calcolo infinitesimale: limiti di funzioni da in 5.5 Elementi di calcolo infinitesimale: derivate di funzioni da in 5.6 Elementi di calcolo infinitesimale: primitive di funzioni da in 5.7 Calcolo di integrali definiti esatto ed approssimato
5.8 Integrali generalizzati (cenni)
5.9 Equazioni differenziali (cenni)
6. Rappresentazione di curve nel piano e nello spazio e di superfici nello spazio
6.1 Equazioni parametriche di curve in 2 e 3
6.2 Equazioni parametriche di superfici in 3
6.3 Rappresentazione di curve e superfici in forma implicita
6.4 Rappresentazione di funzioni a più variabili
7. Elementi di matematica discreta
7.1 Successioni
7.2 Serie
8. Elementi di algebra lineare
8.1 Liste
8.2 Operazioni con vettori e matrici
3
4
Introduzione all'uso di Mathematica.nb
Premessa
Mathematica è un linguaggio interpretato ad alto livello utilizzabile sia per il calcolo numerico che per il calcolo
simbolico e dotato di funzioni grafiche duttili e complete per la rappresentazione grafica bidimensionale e tridimensionale di espressioni e di dati. Esso pertanto costituisce un buon ambiente di lavoro per chi necessiti di uno
strumento potente, completo e versatile per eseguire analisi di dati, sviluppo di metodologie di calcolo o modelli
teorici. Lo scopo di questa dispensa è quello di fornire in modo semplice e immediato i primi elementi per eseguire
con Mathematica le più comuni operazioni di calcolo, algebra ed analisi elementare. Naturalmente questa introduzione a Mathematica non può prescindere dalla conoscenza della matematica elementare rimanendo, quest’ultima, la condizione necessaria per comprendere nel dettaglio le vere potenzialità del programma.
Questa introduzione a Mathematica è rivolta a lettori colti nelle discipline matematiche ma non necessariamente
addentro ai loro tecnicismi. Il testo e i relativi esempi si possono tranquillamente leggere in autoapprendimento,
possibilmente con un computer su cui implementare Mathematica a un livello di complessità via via crescente. E’
importante ricordare tuttavia che l’approccio puramente introduttivo tenuto in questa sede ha indotto a tralasciare
completamente gli aspetti di Mathematica inerenti in modo specifico la programmazione, aspetti questi ultimi che
costituiscono probabilmente il valore aggiunto del poter operare con un linguaggio simbolico ad alto livello quale
quello di Mathematica.
1. Introduzione
Mathematica è un sistema integrato di calcolo simbolico. Rispetto ad un sistema di calcolo tradizionale Mathematica è concepito per lavorare con espressioni piuttosto che esclusivamente con dati ed elementi numerici. A seguito
di un’elaborazione, un qualsiasi linguaggio di programmazione (C, C++, Java, Pascal, Fortran, ecc.) o un qualsiasi
programma di calcolo (Excel, Matlab) produce un output necessariamente numerico. In generale gli output
numerici sono espressi in notazione esponenziale ossia in una forma che prevede la definizione di al massimo 16
cifre decimali (la mantissa) e una potenza 10 p (la caratteristica) con un esponente p variabile al massimo da -308 a
308. Va da se che lavorando con numeri molto grandi o molto piccoli, razionali ed irrazionali, la notazione esponenziale con mantissa porta forzatamente al dover introdurre delle approssimazioni (la mantissa può disporre al
massimo di 16 cifre). I linguaggi citati e i programmi di calcolo introducono un’approssimazione sul risultato
dovendo lavorare esclusivamente con numeri che in molti casi devono forzatamente essere approssimati per poter
essere rappresentati e gestiti dalla macchina. Tuttavia, programmi di calcolo numerici così conceiti presentano il
vantaggio di essere particolarmente performanti e efficienti nel caso sia richiesta una veloce elaborazione piuttosto
che un’elevato livello di precisione.
Gli algoritmi di Mathematica sono stati concepiti per poter produrre in ogni caso risultati esatti. In particolare a
seguito di un’elaborazione Mathematica produce risultati numerici solo se esprimibili in forma esatta (in termini di
numeri interi) e restituisce risultati ricorrendo ad una notazione simbolica in tutti quei casi in cui la notazione
numerica non permette la definizione esatta del risultato (risultati esprimibili in termini di frazioni, radicali, logaritmi, esponenti, valori di funzioni trascendenti o trigonometriche). Il risultato espresso attraverso simboli è
comunque considerato esatto. Da questo punto di vista la capacità di Mathematica di manipolare espressioni
simboliche offre la possibilità di produrre in ogni caso risultati esatti. Altri programmi in grado di lavorare, al pari
di Mathematica, con espressioni piuttosto che con forme nuneriche sono Derive e Maxima, quest’ultimo scaricabile
liberamente da Internet.
Un secondo aspetto importante da sottolineare è che Mathematica è in grado, se richiesto dall’utente, di fornire
risultati numerici approssimati con un livello di approssimazione piccolo a piacere. In altre parole, in alternativa al
risultato esatto espresso in notazione simbolica, il programma può produrre, se richiesto dall’utente, il risultato di
una qualsiasi elaborazione in termini numerici con una approssimazione piccola a piacere. Da questo punto di vista
Mathematica è in grado di fornire i risultati numerici con un livello di precisione anche superiore a quella restituita
dai linguaggidi programmazione o dai programmi di calcolo citati. D’altra parte i tempi di calcolo richiesti vanno
via via aumentando al al crescere della precisione desiderata e rispetto ai linguaggi e ai programmi di calcolo, a
Introduzione all'uso di Mathematica.nb
5
via via aumentando al al crescere della precisione desiderata e rispetto ai linguaggi e ai programmi di calcolo, a
parità di precisione richiesta, Mathematica risulta certamente meno performante ed efficientenella velocità di
elaborazione.
Altri punti di forza che hanno indiscutibilmente favorito la diffusione di Mathematica all’interno della comunità
scientifica riguardano la versatilità del sistema ovvero la possibilità di essere eseguito su molte piattaforme (PC
IBM compatibili, Macintosh, sistemi UNIX, etc.) e di essere integrato con altri programmi esterni (ad es. in
FORTRAN o in C).
Da quanto detto si capisce come Mathematica rappresenti un ambiente avanzato ideale per lo sviluppo di modelli
analitici in ambito teorico e al contempo per l’analisi, la rappresentazione e la modellistica di dati dove la precisione del calcolo (piuttosto che la velocità) sia una condizione non prescindibile. La disponibilità in rete di pacchetti contenenti funzioni aggiuntive specializzate per i vari ambiti disciplinari (Chimica, Fisica, Ingegneria,
Biologia, etc.) contribuisce a rendere il programma uno strumento dalle enormi potenzialità per qualsiasi ambitodi
ricerca.
2. Nozioni di base sull'uso di Mathematica
2.1 Input e output
L’architettura di Mathematica è articolata in due applicazioni distinte ma collegate tra loro: il Front End e il
Kernel. Il FrontEnd costituisce l'interfaccia con l'utente e si avvale di un programma di elaborazione testi che
gestisce i comandi di Input/Output verso la parte di sistema (il Kernel) che esegue materialmente l'elaborazione. Il
Kernel è essenzialmente un manipolatore di espressioni simboliche in grado di restituire risultati in termini di
simboli, numeri, stringhe, grafici, suoni e animazioni. L'architettura descritta permette di avere il Kernel e FrontEnd su diverse piattaforme con il vantaggio di poter realizzare ambienti Mathematica multiutente, dotati di un
unico Kernel su una macchina particolarmente performante collegato a molti Front End su macchine personali.
L'interfaccia con l'utente è realizzata dal Front End tramite fogli di lavoro Notebook su cui l'utente scrive i comandi
e le stringhe di input da inviare al Kernel e su cui vengono visualizzati i risultati prodotti dall'elaborazione. Il
Notebook è organizzato in celle segnalate da parentesi quadre visibili sulla destra del foglio di lavoro. Ogni cella
può a sua volta essere partita in sottocelle. Celle e sottocelle sono automaticamente generate da Mathematica
scrivendo sul Notebook un qualsiasi comando generico o stringa. Se si vuole che l’Input sia elaborato dal Kernel,
con produzione di un Output, è necessario dare l’invio all’espressione di input scritta utilizzando il comando
Shift+Invio. Mathematica a questo punto elabora istantaneamente l’espressione inviata e restituisce l’Output
risultante. Gli input inviati e gli output restituiti sono rappresentati e progressivamente numerati sul Notebook in
coppie di sottocelle In[n] e Out[n] con n numero progressivo di input inviati e output ricevuti nella sessione di
lavoro. I risultati ottenuti nel corso di una sessione di lavoro sono salvati in un file notebook con estensione .nb. Si
noti che quando un file notebook viene salvato, chiuso e successivamente riaperto, i tags In[n] e Out[n] identificativi delle sottocelle non ricompaiono nel notebook finchè eventualmente l'utente non richieda di valutare di nuovo
le stringhe di input.
2.2 La funzione Help
Esistono molte risorse per intraprendere lo studio di Mathematica. I libri inerenti l’utilizzo del programma nei più
disparati settori della matematica, della fisica o delle diverse discipline scientifiche e tecniche è certamente rilevante. Si veda a tal riguardo i testi e gli articoli disponibili su Internet e in particolare sul sito della casa produttrice
www.wolfram.com. Un risorsa fondamentale è costituita dalla guida in linea del programma, alla quale si può
accedere premendo il tasto F1 o attivando la funzione Help dal menù pricipale. All’interno della guida si può
trovare per intero il libro The Mathematica Book versione 10 di S. Wolfram, all’interno del quale si può facilmente
navigare in base all’argomento a cui si è interessati. Libri simili sono disponibili per tutte le versioni precedenti di
Mathematica , a partire dalla prima nel 1988 a quella più recente (versione 10.0) del 9 luglio 2014.
Introduzione all'uso di Mathematica.nb
6
Mathematica , a partire dalla prima nel 1988 a quella più recente (versione 10.0) del 9 luglio 2014.
Da un punto di vista operativo le ricerche su uno specifico argomento possono essere eseguite in diverse modalità,
tra le altre attivando ricerche generali su uno specifico argomento dal menù generale (HelpØDocumentation Center
con click sulla funzione Search), attivando la ricerca mediante selezione di un espressione o comando nel Notebook e conseguente comando dal menù principale (HelpØFind Selected Function) o ancora digitando su un cella di
input il comando o l'espressione da ricercare preceduto dal simbolo?. L'esempio seguente illustra la ricerca attivata
tramite la terza modalità indicata.
Esempio 2.2.1
Utilizzando l’operatore
? associato alla funzione Help si esegua la ricerca di informazioni inerenti l’operatore
Manipulate.
? Manipulate
Manipulate [expr, {u,umin,umax}]
generates a version of expr with controls added to allow interactive manipulation of the value of u.
manipulate [expr,{u,...},{v...},...]
provides controls to manipulate each of the u, v, ...
Manipulate@Plot@8A Sin@2 Pi a t + bD<, 8t, 0, 6<,
PlotRange → 8− 5, 5<, PlotStyle −> 8Thick, Red<D,
8A, 0, 5<, 8a, 1, 4<, 8b, 0, 10<D
A
4.65
a
2.
b
0.
4
2
1
2
3
4
5
6
−2
−4
à
Introduzione all'uso di Mathematica.nb
Esempio 2.2.2
Sempre utilizzando l’operatore ? si esegua la ricerca di informazioni circa l’espressione ChemicalData.
? ChemicalData
ChemicalData[]”name”,”propery”]
gives the value of the specified property for the chemical “name”.
ChemicalData@"C60", "Properties"D
8AcidityConstant, AcidityConstants, AdjacencyMatrix,
AlternateNames, AtomPositions, AutoignitionPoint,
BeilsteinNumber, BoilingPoint, BondTally, CASNumber,
CHColorStructureDiagram, CHStructureDiagram, CIDNumber,
Codons, ColorStructureDiagram, CombustionHeat,
CompoundFormulaDisplay, CompoundFormulaString,
CriticalPressure, CriticalTemperature, Density,
DensityGramsPerCC, DielectricConstant, DOTHazardClass,
DOTNumbers, EdgeRules, EdgeTypes, EGECNumber,
ElementMassFraction, ElementTally, ElementTypes, EUNumber,
FlashPoint, FlashPointFahrenheit, FormalCharges,
FormattedName, GmelinNumber, HBondAcceptorCount,
HBondDonorCount, HenryLawConstant, HildebrandSolubility,
HildebrandSolubilitySI, InChI, IonEquivalents,
Ions, IonTally, IsoelectricPoint, IsomericSMILES,
IUPACName, LogAcidityConstant, LowerExplosiveLimit,
MDLNumber, MeltingBehavior, MeltingPoint,
Memberships, MolarVolume, MolecularFormulaDisplay,
MolecularFormulaString, MolecularWeight, MoleculePlot,
Name, NFPAFireRating, NFPAHazards, NFPAHealthRating,
NFPALabel, NFPAReactivityRating, NonHydrogenCount,
NonStandardIsotopeCount, NonStandardIsotopeNumbers,
NonStandardIsotopeTally, NSCNumber, OdorThreshold,
OdorType, PartitionCoefficient, pH, Phase, RefractiveIndex,
Resistivity, RotatableBondCount, RTECSClasses,
RTECSNumber, SideChainAcidityConstant, SMILES, Solubility,
SolubilityType, SpaceFillingMoleculePlot, StandardName,
StructureDiagram, SurfaceTension, TautomerCount,
ThermalConductivity, TopologicalPolarSurfaceArea,
UpperExplosiveLimit, VanDerWaalsConstants, VaporDensity,
VaporizationHeat, VaporPressure, VaporPressureTorr,
VertexCoordinates, VertexTypes, Viscosity<
ChemicalData@"C60", "Name"D
buckminsterfullerene
ChemicalData@"C60", "AlternateNames"D
8buckminsterfullerene−C60, fullerene C60,
footballene, soccerballene, HC60−IhL@5,6Dfullerene<
7
Introduzione all'uso di Mathematica.nb
8
ChemicalData@"C60", "MolecularWeight"D
720.642
ChemicalData@"C60", "Density"D
1.65 × 103
ChemicalData@"C60", "StructureDiagram"D
ChemicalData@"C60", "MoleculePlot"D
ChemicalData@"C60", "SpaceFillingMoleculePlot"D
à
Introduzione all'uso di Mathematica.nb
9
3. Calcolo numerico e calcolo simbolico
3.1 Preliminari
Il modo più semplice di lavorare con Mathematica è usarlo come calcolatore in grado di svolgere calcolo numerico
esatto ed approssimato a qualunque grado di precisione richiesto dall’utente. Per seguire le più comuni operazioni
aritmetiche è necessario seguire alcune semplici regole lessicali per evitare errori sulle stringhe di input.
a. le stringhe di input utilizzano caratteri alfa-numerici del codice ASHI;
b. le quattro operazione sono rappresentate dai simboli +, -, *, / . Per la moltiplicazione l’asterico è facoltativo: se
si tralascia l’asterisco i fattori devono essere separati da uno spazio;
c. l’elevamento a potenza è espresso con il simbolo ^ ;
d. il separatore decimale è il punto;
e. le uniche parentesi algebriche sono quelle tonde, sempre bilanciate, eventualmente annidate;
f. le parentesi quadre sono utilizzate per racchiusere gli argomenti delle numerose funzioni predefinite (built-in
functions) presenti nelle librerie di Mathematica. Le espressioni per il calcolo di logaritmi ed esponenziali (Log[
], Exp[ ]), della radice quadrata (Sqrt[ ]), di valori di seni, coseni ed altre espressioni trigonometriche (Sin[
], Cos[ ], Tan[ ], ArcSin[ ], ArcCos[ ], ArcTan[ ], Sinh[ ], Cosh[ ], Tanh[ ]...) sono alcuni
esempi di funzioni libreria predefinite. Si noti che tutti questi elementi vanno scritti con la lettera iniziale in maiuscolo;
g. le parentesi graffe vanno utilizzate principalmente per contenere gli elementi che costituiscono una lista. Il
concetto di lista in Mathematica identifica una collezione ordinata di oggetti (simboli) di natura non necessariamente numerica. Mathematica utilizza liste per definire e manipolare, tra le altre cose, grandezze vettoriali e
matrici;
h. i commenti di testo all'interno del Notebooks vanno posti tra due asterischi (stringa del tipo * commento * ).
Esempio 3.1.1
Sperimentare le caratteristiche di mathematica provando le seguenti stringhe di input.
2 H3 ∗ 4L^ 2 − 64 ê 2
256
Sqrt@256D
16
8 Log@1 ê ED + Log@ED
−7
HLog@ED + Log@10, 10DL ^3
8
4 HCos@Pi ê 4DL^ 2 + Sin@Pi ê 2D
3
ArcSin@0D + ArcCos@1D + ArcTan@0D
0
à
Da un punto di vista operativo, allo scopo di velocizzare le operazioni di scrittura delle stringhe di input, Mathematica dispone di alcuni operatori che permettono di richiamare nella cella attiva Out[n] i contenuti di input o di output
Introduzione all'uso di Mathematica.nb
10
ica dispone di alcuni operatori che permettono di richiamare nella cella attiva
i contenuti di input o di output
presenti in una delle celle precedenti. Le operazioni di richiamo sono eseguite tramite comandi conteneti il simbolo
%.
%
%%
%n
indica l'ultimo output prodotto;
indica il penultimo output prodotto;
indica l'n-esimo output prodotto;
Esempio 3.1.2
Sperimentare l'utilizzo dell'operatore % su una sequenza di operazioni inviate al Kernel con (caso a) lo stesso ordine
con cui sono state scritte sul Notebook e (caso b) con ordine inverso.
Si considerino ad esempio le operazioni 3! e 4! e le si invii al Kernel una ad una seguendo l’ordine con cui sono
state scritte. Si esegua di seguito l’operatore % .
3!
6
4!
24
%
24
Come atteso l' operatore % scritto sulla cella attiva richiama l’ultimo output prodotto.
Si considerino ora le stesse operazioni ma eseguendo l’invio in ordine inverso rispetto all’ordine con cui sono state
scritte (si dia l'invio prima all'espressione scritta nella cella sotto e solo successivamente alla cella sopra):
3!
6
4!
24
in tal caso l’operatore % continua a richiamare la cella scritta per ultima anche se scritta sopra.
%
24
à
3.2 Aritmetica degli interi
Come accennato sopra in Mathematica il calcolo sugli interi è sempre esatto e completo a differenza di quanto
avviene nei linguaggi di programmazione di calcolo numerico che per interi molto grandi passano forzatamente alla
notazione esponenziale con mantissa approssimata. Da questo punto di vista la capacità di Mathematica di effettuare calcoli esatti anche con numeri molto grandi è davvero impressionante. Questo porta spesso ad ottenere
output molto pesanti dal punto di vista della memoria con conseguente possibilità di crash del programma al
momento del salvataggio del Notebook. Si noti che l’eventuale cancellazione di una cella Out[n] tramite selezione
della cella avviene solo visibilmente sul Notebook ma non in termini di contenuto di memoria. Questo significa che
nel corso di una sessione di lavoro Mathematica mantiene sempre in memoria nel Kernel l’intero insieme di Inputi
Introduzione all'uso di Mathematica.nb
11
nel corso di una sessione di lavoro Mathematica mantiene sempre in memoria nel Kernel l’intero insieme di Inputi
inviati e di Output prodotti. In altre parole Mathematica conserva l’informazione del contenuto di tutte le stringhe
numeriche o simboliche elaborate sul Notebook. Con macchime poco performanti è dunque di fondamentale
impotanza (a) evitare di richiedere precisioni troppo elevate nella definizione di dati numerici per evitare di lavorare con stringhe di output troppo pesanti dal punto di vista della memoria e (b) di eseguire spesso l’operazione di
cancellazione memoria nel Kernel. Il modo più semplice per eseguire l’annullamento della memoria nel Kernel è di
attivate dal menù principale la funzione: Evaluation -> Quit Kernel -> Local e confermare l’operazione con quit .
Esempio 3.2.1
Si testi la capacita di Mathematica nel riprodurre istantaneamnete valori numerici estremamente grandi esprimibili
in termini di exponenti con potenza superiore al 1000. Eseguire successivamente l’operazione di cancellazione di
memoria del Kernel.
13^1000;
13^10 000;
13^100 000;
Mathematica è perfettamente in gradi di produrre i risultati richiesti (assenza di errore di overflow) . Per motivi di
spazio (e di memoria...) è stato inserito il simbolo ; alla fine di ogni stringa di input per omettere la visualizzazione dell’output ottenuto. Per eseguire l’operazione di cancellazione memoria del Kernel si attivi dal menù
principale la funzione Evaluation -> Quit Kernel -> Local e si confermi l’operazione con quit .
à
L'aritmetica sugli interi prevede l'uso di un certo numero di operatori che agiscono in modo specifico per
eseguire le più comuni operazioni matematiche. Si noti che in tutti i casi, in analogia al lessico relativo alle funzioni
libreria predefinite, il nome identificativo degli operatori va scritto con la prima lettera in maiuscolo e l'argomento
dell'operatore va sempre inserito tra parentesi quadre. Alcuni operatori di uso comune su sono elencati di seguito.
: produce il quoziente intero della divisione tra due interi n1 e n2;
Mod[n1,n2]
: produce il resto intero della divisione tra gli stessi due interi;
GCD[n1,...,nk]
: produce il Massimo Comun Denominatore (Greatest Common Divosor) degli interi
n1,...nk;
LCM[n1,...,nk]
: produce il Minimo Comun Multiplo (Least Common Multiple) degli interi n1,...nk;
PrimeQ[n]
: produce la risposta in termini di True o False sulla questione inerente se n è un
numero primo;
Prime[n]
: produce l'n-esimo numero primo;
Divisors[n]
: produce l’elenco (stringa) dei divisori dell'intero n;
FactorInteger[n] : produce la scomposizione in fattori primi dell'intero n.
Quotient[n1,n2]
Esempio 3.2.2
Provare le seguenti stringhe di input relative ad alcuni operatori comunemente usati nell'ambito dell'aritmetica dei
numeri interi.
Quotient@64, 12D
5
Introduzione all'uso di Mathematica.nb
12
Mod@64, 12D
4
GCD@64, 12D
4
LCM@64, 12D
192
PrimeQ@121D
False
Prime@4D
7
Divisors@264D
81, 2, 3, 4, 6, 8, 11, 12, 22, 24, 33, 44, 66, 88, 132, 264<
FactorInteger@264D
882, 3<, 83, 1<, 811, 1<<
à
3.3 Aritmetica dei razionali e degli irrazionali
In analisi matematica un numero razionale è un numero ottenibile come rapporto tra due numeri interi a e b con b
diverso da 0. I numeri razionali formano un campo, indicato con il simbolo
, che può essere pensato come
sottocampo del campo dei numeri reali . Numeri irrazionali sono numeri reali non esprimibili in termini di
frazioni. Numeri razionali ed irrazionali sono sempre esprimibili in forma approssimata utilizzando le forme
decimali. I linguaggi di programmazione e i programmi di calcolo utilizzano la notazione esponziale con mantissa
approssimata quando si trovano a dover gestire e rappresentare espressioni numeriche razionali e irrazionali.
Come già accennato, il programma Mathematica è pensato per lavorare con espressioni simboliche piuttosto che
numeri e questa capacità di eseguire manipolazioni su espressioni non necessariamente numeriche è in realtà la
chiave per poter eseguire calcoli esatti non solo con numeri interi ma anche con numeri razionali ed irrazionali. In
particolare se il risultato di un calcolo è un numero razionale non esprimibile in forma numerica esatta Mathematica, a differenza di un programma in grado di gestire solo calcolo numerico, utilizza una notazione simbolica (con
il simbolo di frazione) piuttosto che una notazione numerica approssimata e questo gli permette di non dover
necessariamente introdurre approssimazioni sulla valutazione del risultato. In modo analogo se a seguito di un’elabotazione, Mathematica si trova a dover restituire risultati caratterizzati dalla presenza di espressioni numeriche
irrazionali (espressioni contenenti radicali, esponenziali e logaritmi o ancora funzioni trigonometriche e trascendenti valutate su argomenti razionali o irrazionali) allora i suoi algoritmi prevedono output espressi in linguaggio
simbolico (utilizzando i simboli
a , , Log[a], π) piuttosto che numerico approssimato e questo consente di
considerare il risultato ancora una volta espresso in forma esatta. Gli esempi che seguono illustrano bene come
Mathematica fornisca nei diversi casi sempre soluzioni esatte.
Introduzione all'uso di Mathematica.nb
13
Esempio 3.3.1
Si dimostri che il calcolo eseguito con Mathematica nel caso di espressioni caratterizzate dalla presenza di (a)
razionali; (b) radicali; (c) logaritmi; (d) numeri irrazionali; (e) forme trigonometriche produce soluzioni espresse
quando possibile in forma numerica esatta o in alternativa in forma simbolica (comunuqe esatta).
Si considerino ad esempio le seguenti operazioni:
1+1ê3
4
3
2 Sqrt@2D
2
2
E + Pi
+π
Cos@Pi ê 3D + Sin@Pi ê 3D
1
2
+
3
2
4 Log@ED
4
Cos@Pi ê 2D + Sin@Pi ê 2D
1
Le prime quattro operazioni sono caratterizzate da risultati non esprimibili tramite interi ossia risultati esprimibili
solo in termini di numeri razionali o irrazionali. Mathematica in questi casi restituisce output contenenti forme
simboliche in quanto non in grado di riprodurre i risultati numerici in forma esatta. Risultati simbolici sono risultati
esatti. Le ultime due operazioni, pur contenendo nell’input numeri irrazionali, producono risultati esprimibili in
termini di interi e dunque gli algoritmi di Mathematica forniscono le soluzioni in forma numerica esatta senza
dover ricorrere all’uso di simboli. In tutti i casi i risultati forniti dal programma sono risultati esatti.
à
3.4 Calcolo esatto e approssimato
In Mathematica risultati caratterizzati da espressioni contenenti numeri razionali (frazioni) e irrazionali (radicali,
logaritmi, valori di funzioni algebriche o trascendenti di argomenti razionali) sono sempre matematicamente esatti
perchè espressi o in forma numerica esatta (quando possibile) o in forma simbolica (in tutti gli altri casi). Tuttavia,
se richiesto dall’utente, Mathematica è in grado di gestire espressioni numeriche anche come un progranmma di
calcolo numerico e in tal caso fornire i risultati in forma numerica esatta (quando possibile) o in forma numerica
approssimata introducendo la notazione decimale. A differenza però dei linguaggi di programmazione o dei
migliori programmi di calcolo, veloci nell’elaborazione ma con precisione limitata, Mathematica non presenta
limiti di precisione e l’approssimazione sui decimali nella valutazione di un risultato può essere resa piccola a
piacere. L’elavata precisione è però pagata in termini di tempi di elaborazione e da questo punto di vista Mathematica non può certo competere con i programmi che lavorano esclusivamente con dat ed elementi numerici.
La valutazione dei risultati in termini decimali viene fornita (con un numero di decimali grande a piacere) solo se
Introduzione all'uso di Mathematica.nb
14
La valutazione dei risultati in termini decimali viene fornita (con un numero di decimali grande a piacere) solo se
espressamente richiesta dall’utente. In particolare la richiesta può essere eseguita o introducendo un input espresso
in notazione decimale o utilizzando l’operatore N[ ] che permette la valutazione di un’espressione
espr con
una precisione eventualmente definita dall’operatore. Ilsimbolo espr indica un’espressione contenente numeri
razionali non esprimibili in forma esatta o numeri irrazionali.
: produce l’approssimazione con 5 decimali dopo
la virgola di un’espressione espr non esprimibile
in forma esatta.
N[espr,m]
: produce l’approssimazione con un numero m di cifre
decimali dopo la virgola.di un’espressione espr
non esprimibile in forma esatta.
block[{$MaxExtraPrecision=mmax},N[espr,m]] : produce l’approssimazione con un numero m di cifre
decimali dopo la virgola.di un’espressione espr
dopo che essa sia stata espressa con un numero
nmax di cifre decimali dopo la virgola.
N[espr]
Esempio 3.4.1
Si verifiche che i numeri razionali in Mathematica sono espressi in forma numerica esatta (quando possibile) o in
forma simbolica (comunque esatta) in tutti gli altri casi.
8ê4
2
10 ê 4
5
2
11 ê 4
11
4
La prima frazione è esprimibile attraverso un intero ed in effetti gli algoritmi di Mathematica restituiscono un
risultato espresso in forma numerica esatta. Negli altri casi le frazioni non sono riconducibili a numeri interi e
Mathematica restituisce una rappresentazione dei numeri utilizzando la forma simbolica (frazione ridotta ai minimi
termini). In tutti i casi i risultati forniti sono espressi in forma esatta.
à
Esempio 3.4.2
Si verifichi che Mathematica, nel caso le frazioni non siano esprimibili in forma numerica esatta, può fornire (se
richiesto dall'utente) anche una rapresentazione dei numeri in forma numerica approssimata con un numero di
decimali grande a piacere.
L' utente può richiedere la notazione decimale direttamente inserendo la notazione decimale nelle espressioni di
input o tramite l'operatore N.
8 ê 4.
2.
Introduzione all'uso di Mathematica.nb
15
10 ê 4.
2.5
11 ê 3.
3.66667
N@8 ê 4, 15D
2.00000000000000
N@10 ê 4, 15D
2.50000000000000
N@11 ê 3, 15D
3.66666666666667
à
Esempio 3.4.3
Si verifichi che la notazione con cui è espresso il risultato di una determinata elaborazione è strettamente correlato
alla notazione delle forme numeriche di input.
5ê2−5ê2
0
5 ê 2 − 2.5
0.
2.5 − 2.5
0.
I tre casi considerati dimostrano come Mathematica elabora in modo molto diverso i numeri espressi in forma
esatta e quelli espressi in forma approssimata. In tutti i casi il risultato è lo stesso ma la notazione utilizzata da
Mathematica per esprimerlo è diversa. La differenza tra due numeri uguali, entrambi espressi in forma esatta, porta
ad un risultato espresso in forma esatta. La differenza tra due numeri uguali, uno solo dei quali espresso in forma
approssimata o entrambi espressi in forma approssimata, porta ad un risultato espresso in forma approssimata.
Nella scelta della notazione è bene tener presente che, in Mathematica, la valutazione di espressioni complesse
contenenti numeri in forma approssimata richiede un tempo tipicamente inferiore rispetto alle stesse valutazioni
eseguite in forma esatta. Tenere a mente questa differenza può portare pertanto a realizzare modelli con tempi di
esecuzione ottimizzati.
à
Esempio 3.4.4
Si verifichi che nel caso di (a) numeri etremamente grandi o estremamente piccoli; (b) radicali; (c) valori espressi
tramite funzioni trigonometriche calcolate su argomenti razionali; Mathematica, se esplicitamente richiesto dall’utente, è in grado di fornisce risultati esprimendoli in forma numerica esponenziale con mantissa approssimata con
un numero di cifre dopo la virgola grande a piacere.
Introduzione all'uso di Mathematica.nb
16
a.
3^H− 80L
1
147 808 829 414 345 923 316 083 210 206 383 297 601
N@3^H− 80LD
6.7655 × 10−39
N@3^H− 80L, 10D
6.765495701 × 10−39
N@3^H− 80L, 100D
6.76549570118537666651396927813051162547608550347538624611248
3390156825201895989694421015932752895595 × 10−39
b.
Sqrt@3D
3
N@Sqrt@3DD
1.73205
N@Sqrt@3D, 10D
1.732050808
N@Sqrt@3D, 100D
1.73205080756887729352744634150587236694280525381038062805580
6979451933016908800037081146186757248576
c.
Sin@Pi ê 3D + Cos@Pi ê 3D
1
2
+
3
2
N@Sin@Pi ê 3D + Cos@Pi ê 3DD
1.36603
N@Sin@Pi ê 3D + Cos@Pi ê 3D, 100D
1.36602540378443864676372317075293618347140262690519031402790
3489725966508454400018540573093378624288
à
Introduzione all'uso di Mathematica.nb
17
Esempio 3.4.5
Si sperimentimo le modalità con cui l'operatore block[{$MaxExtraPrecision = mmax}, N[espr, m]]
opera su un’espressione numerica estremamente piccola.
Cos@1D^2 + Sin@1D^2 − Sqrt@1 − Exp@−1000DD
−
1−
1
1000
+ Cos@1D2 + Sin@1D2
N@Cos@1D^2 + Sin@1D^2 − Sqrt@1 − Exp@−1000DDD
−1.11022 × 10−16
N@Cos@1D^2 + Sin@1D^2 − Sqrt@1 − Exp@−1000DD, 10D
— N::meprec :
Internal precision limit $MaxExtraPrecision = 50.` reached while
evaluating -
1-
1
‰
1000
+ Cos@1D2 + Sin@1D2 . à
0. × 10−60
N@Cos@1D^2 + Sin@1D^2 − Sqrt@1 − Exp@−1000DD, 100D
— N::meprec :
Internal precision limit $MaxExtraPrecision = 50.` reached while
evaluating 0. × 10
1-
1
‰
1000
+ Cos@1D2 + Sin@1D2 . à
−150
N@Cos@1D^2 + Sin@1D^2 − Sqrt@1 − Exp@−1000DD, 500D
— N::meprec :
Internal precision limit $MaxExtraPrecision = 50.` reached while
evaluating -
1-
1
‰
1000
+ Cos@1D2 + Sin@1D2 . à
2.53797944877472838264590473978716845965279964144641868091619
6922705270271487409587839831084523271433931833553415533 × 10−435
Block@8$MaxExtraPrecision = 500<,
N@Cos@1D^ 2 + Sin@1D^ 2 − Sqrt@1 − Exp@− 1000DD, 20DD
2.5379794487747283826 × 10−435
à
Introduzione all'uso di Mathematica.nb
18
3.5 Algebra
Per le sue caratteristiche Mathematica trova il suo più naturale impiego nell’ambito dell’elaborazione e della
manipolazione di espressioni algebriche. Gli algoritmi di cui è dotato permettono di trasformare una espressione
algebrica di input in un’espressione equivalente di output, sepre rimanendo nell’ambito del linguaggio simbolico. In
particolare Mathematica è in grado di sviluppare, fattorizzare e semplificare polinomi estremamente complessi,
calcolare le soluzioni di equazioni e sistemi di equazioni polinomiali e più in generale manipolare espressioni
algebriche estremamente complesse. Di seguito sono riportati gli operatori attraverso cui eseguire le più comuni
operazioni di tipo algebrico su un polinomio (indicato con il simbolo px) o più polinomi (indicati con pxi,
i=1,...,n).
Expand[px]
Factor[px]
Simplify[px]
FullSimplify[px]
Together[px]
Apart[px]
:
:
:
:
:
:
produce lo sviluppo di px ;
produce la fattorizzazione di px;
produce la semplificazione di px;
produce la semplificazione di px ad un livello superiore;
produce la composizione di un px a partire dalla somma di frazioni;
produce la scomposizione in frazioni di px;
Gli esempi che seguono illustrano l’utilizzo degli operatori visti.
Esempio 3.5.1
Si consideri la forma algebrica px = Hab + b + cL3 - 1 e si eseguano le più comuni operazioni algebriche di scomposizione in monomi e semplificazione.
Le operazioni algebriche richieste sono pressochè immediate:
Ha b + b + cL ^3 − 1
−1 + Hb + a b + cL3
Expand@Ha b + b + cL ^3 − 1D
−1 + b3 + 3 a b3 + 3 a2 b3 + a3 b3 +
3 b2 c + 6 a b2 c + 3 a2 b2 c + 3 b c2 + 3 a b c2 + c3
SimplifyA−1 + b3 + 3 a b3 + 3 a2 b3 + a3 b3 +
3 b2 c + 6 a b2 c + 3 a2 b2 c + 3 b c2 + 3 a b c2 + c3 E
−1 + H1 + aL3 b3 + 3 H1 + aL2 b2 c + 3 H1 + aL b c2 + c3
FullSimplifyA−1 + b3 + 3 a b3 + 3 a2 b3 +
a3 b3 + 3 b2 c + 6 a b2 c + 3 a2 b2 c + 3 b c2 + 3 a b c2 + c3 E
−1 + Hb + a b + cL3
Si noti che già con un’espressione semplice come quella vista è stato necessario utilizzare il comando FullSimplify per ottenere con successo la semplificazione alla forma iniziale.
à
Introduzione all'uso di Mathematica.nb
19
Esempio 3.5.2
2
Si consideri la forma algebrica px = Ix2 - 1M Ix2 - 2M Ix2 - 4M
3
e si eseguano le più comuni operazioni algebriche
di scomposizione in monomi e fattorizzazione. Si calcoli l’espressione algebrica ottenuta per x=a e se ne esegua
l’elevamento a potenza 3/2.
Hx^2 − 1L Hx^2 − 2L^2 Hx ^2 − 4L ^3
I−4 + x2 M I−2 + x2 M I−1 + x2 M
3
2
Le operazioni di scomposizione in monomi e fattorizzazione possono essere eseguite con i comandi Expand
e
Factor:
Expand@Hx^2 − 1L Hx^2 − 2L^2 Hx ^2 − 4L ^3D
256 − 704 x2 + 752 x4 − 404 x6 + 116 x8 − 17 x10 + x12
FactorA256 − 704 x2 + 752 x4 − 404 x6 + 116 x8 − 17 x10 + x12 E
H−2 + xL3 H−1 + xL H1 + xL H2 + xL3 I−2 + x2 M
2
E’ possibile a questo punto assegnare il valore a alla variabile x e successivamente calcolare il valore assunto da px
in a semplicemente richiamando il polinomio stesso:
x=a
a
FactorA256 − 704 x2 + 752 x4 − 404 x6 + 116 x8 − 17 x10 + x12 E
H−2 + aL3 H−1 + aL H1 + aL H2 + aL3 I−2 + a2 M
2
Si noti che lo stesso risultato avrebbe potuto essere raggiunto utilizzando anche l’operatore
% , ossia richiamando
la stringa che identifica il polinomio:
%%%
H−2 + aL3 H−1 + aL H1 + aL H2 + aL3 I−2 + a2 M
2
L’elevamento a potenza 3/2 dell’espressione ottenuta è immediata:
%^H3 ê 2L
JH−2 + aL3 H−1 + aL H1 + aL H2 + aL3 I−2 + a2 M N
2 3ê2
à
Esempio 3.5.3
2 ax
Si consideri la forma algebrica px = Ha−3L Ha+5L e la si elevi alla potenza 10. Si eseguano le stesse operazioni dopo
aver posto (a) a=5 e (b) a=3.
Le operazioni che seguono sono immediate se si assegna al polinomio la variabile espr:
2 ax ê HHa − 3L Ha + 5LL
2 ax
H−3 + aL H5 + aL
Introduzione all'uso di Mathematica.nb
20
expr = 2 a ê HHa − 3L Ha + 5LL
2a
H−3 + aL H5 + aL
expr^10
1024 a10
H−3 + aL10 H5 + aL10
a=5
5
expr^10
1
1024
a=3
3
expr^10
— Power::infy : Infinite expression
ComplexInfinity
1
0
encountered. à
à
4 Equazioni e sistemi di equazioni lineari
4.1 Risoluzione di equazioni in forma esatta
Mathematica è in grado di risolvere equazioni di grado uguale o superiore al primo o utilizzando algoritmi diversi a
seconda che si cerchino soluzioni esatte o approssimate. Trovare le soluzioni esatte di una equazione significa, con
passaggi algebrici opportuni, determinare il valore esatto delle sue radici (è questo il caso, ad es. delle radici fornite
dalla formula per la risoluzione delle equazioni di secondo grado). Risolvere un’equazione con approssimazione
significa determinare, con metodi dell’analisi numerica (ad es. mediante algoritmi iterativi) una soluzione approssimata o tutte le soluzioni approssimate dell’equazione. La risoluzione esatta delle equazioni è eseguita mediante gli
operatori Solve e NSolve. In caso non fosse possibile trovare le soluzioni esatte di un’equazione gli operatori
Solve e NSolve non producono risultato. Solve e NSolve si differenziano unicamente per come rappresen-
tano le soluzioni calcolate in modo esatto. L’operatore Solve produce le soluzioni esatte attraverso, quando
possibile, espressioni numeriche esatte (ossia con numeri interi) o in alternativa tramite linguaggio simbolico.
L’operatore NSolve restituisce invece le soluzioni esatte utilizzando la notazione decimale e dunque introducendo
un’approssimazione sulla rappresentazione dei numeri. Si noti che in entrambi i casi il segno di uguaglainza va
indicato, come in C e Java, raddoppiando l’usuale segno algebrico = . Ovviamente la scelta della variabile è
indifferente.
Introduzione all'uso di Mathematica.nb
21
: produce le soluzioni esatte (reali o complesse) di un’equazione di grado uguale
o superiore al primo e ne fornisce la rappresentazione in notazione esatta;
NSolve[A[x]==B[x], x] : produce le soluzioni esatte (reali o complesse) di un’equazione di grado uguale
o superiore al primo e ne fornisce la rappresentazione in notazione (decimale)
approssimata.
Solve[A[x]==B[x], x]
Esempio 4.1.1
Si calcolino le radici dell'equazione di secondo grado: x2 - 4 = 0 .
La soluzione dell'equazione porta a due radici reali e distinte. Utilizzando Solve e NSolve le due radici possono
essere espresse , rispettivamente, in notazione simbolica esatta o in notazione numerica approssimata.
x^2 − 4 == 0
−4 + x2 0
Solve@x^2 − 4 == 0, xD
88x → −2<, 8x → 2<<
NSolve@x^2 − 4 0. xD
88x → −2.<, 8x → 2.<<
à
Esempio 4.1.2
Si calcolino le radici dell'equazione di terzo grado: x3 + x2 + 1 = 0 .
In questo caso si tratta di una radice reale e due radici complesse coniugate.
x^3 + x^2 + 1 == 0
1 + x2 + x3 0
Solve@x^3 + x^2 + 1 0, xD
::x →
1
−1 −
3
:x → −
1
+
3
3×
1
3
−
29 − 3
1
6
J1 + +
22ê3
1
6
J1 − 1
2
3
J29 − 3
93 N
3N
1
2
1
2
93
3N
1−
−
1ê3
2
1ê3
1ê3
J29 − 3
93 N
>,
1ê3
J29 − 3
93 N
+
>, :x →
1ê3
J29 − 3
93 N
1+
+
3×
22ê3
J29 − 3
3
1ê3
93 N
>>
Introduzione all'uso di Mathematica.nb
22
NSolve@x^3 + x^2 + 1 0, xD
88x → −1.46557<, 8x → 0.232786 − 0.792552 <,
8x → 0.232786 + 0.792552 <<
à
Esempio 4.1.3
Si determinino le radici dell'equazione ‰2 x - 3 ‰x + 1 = 0 . Si tratta di un'equazione di secondo grado in x che
può essere calcolata esattamente. Il calcolo porta a due radici reali e distinte.
Exp@2 xD − 3 Exp@xD + 1 0
1 − 3 x + 2 x 0
Solve@Exp@2 xD − 3 Exp@xD + 1 0, xD
— Solve::ifun :
Inverse functions are being used by Solve, so some solutions may not
be found; use Reduce for complete solution information. à
::x → LogB
1
2
I3 −
5 MF>, :x → LogB
1
2
I3 +
5 MF>>
NSolve@Exp@2 xD − 3 Exp@xD + 1 0, xD
— NSolve::ifun :
Inverse functions are being used by NSolve, so some solutions may not
be found; use Reduce for complete solution information. à
88x → −0.962424<, 8x → 0.962424<<
Mathematica produce tuttavia un messaggio di testo nel quale viene suggerito di utilizzare il comando Reduce per
trovare altre possibili soluzioni.
Reduce@Exp@2 xD − 3 Exp@xD + 1 0, xD
C@1D ∈ Integers && Ix 2 π C@1D − Log@2D + LogA3 −
x 2 π C@1D − Log@2D + LogA3 +
5 EM
5 E »»
In effetti il comando Reduce produce l'insieme delle radici complesse cercate.
à
Introduzione all'uso di Mathematica.nb
23
Esempio 4.1.4
Si determinino le radici dell'equazione 1 - 2 x2 + ax3 = 0.
Si tratta di un'equazione simbolica di terzo grado di cui Mathematica è in grado di calcolare le radici (una radice
reale e due complesse coniugate).
a x^3 − 2 x^2 + 1 0
1 − 2 x2 + a x3 0
Solve@a x^3 − 2 x^2 + 1 0, xD
::x →
1
2
3
a
4 × 21ê3
+
+
1ê3
a 16 − 27 a2 + 3
−32 a2 + 27 a4
3
1ê3
16 − 27 a2 + 3
− 32 a2 + 27 a4
3
>,
21ê3 a
:x →
2
2 × 21ê3 J1 + −
3N
−
1ê3
3a
3 a 16 − 27 a2 + 3
J1 − −32 a2 + 27 a4
3
1ê3
3 N 16 − 27 a2 + 3
−32 a2 + 27 a4
3
>,
6 × 21ê3 a
:x →
2
2 × 21ê3 J1 − −
3a
J1 + 3N
−
1ê3
3 a 16 − 27
a2
+3
3 N 16 − 27 a2 + 3
−32
3
a2
+ 27
a4
1ê3
3
6 × 21ê3 a
−32 a2 + 27 a4
>>
Introduzione all'uso di Mathematica.nb
24
NSolve@a x^3 − 2 x^2 + 1 0, xD
::x → 0.333333
2.
a
5.03968
+
+
1ê3
a 16. − 27.
a2
+ 5.19615
− 32.
a2
+ 27.
a4
1ê3
0.793701 16. − 27. a2 + 5.19615
−32. a2 + 27. a4
>,
a
:x →
0.666667
a
a 16. − 27. a2 + 5.19615
− 32. a2 + 27. a4
H0.132283 − 0.229122 L
1ê3
16. − 27. a2 + 5.19615
:x →
0.666667
1
a
−
1ê3
a
1
0.839947 + 1.45483 −
a
−32. a2 + 27. a4
>,
0.839947 − 1.45483 −
−
1ê3
a 16. − 27.
a2
+ 5.19615
−32.
a2
+ 27.
a4
H0.132283 + 0.229122 L
1ê3
16. − 27. a2 + 5.19615
−32. a2 + 27. a4
>>
In entrambi i casi le soluzioni fornite da Mathematica appaiono estremamente complesse non essendo il programma in grado di produrre ulteriori semplificazioni delle soluzioni in assenza di una migliore identificazione del
simbolo a.
Con a=1, per esempio, le soluzioni, tutte reali, assumono forma semplificata.
Solve@x^3 − 2 x^2 + 1 0, xD
1
1
:8x → 1<, :x →
I1 − 5 M>, :x →
I1 +
2
2
5 M>>
NSolve@x^3 − 2 x^2 + 1 0, xD
88x → −0.618034<, 8x → 1.<, 8x → 1.61803<<
à
Introduzione all'uso di Mathematica.nb
25
Esempio 4.1.5
Verificare che nel caso dell’equazione x5 - x3 + 1 = 0 Mathematica è in grado di produrre il calcolo delle radici
esatte ma non è in grado di rappresentarne le radici in forma esatta.
x^5 − x^3 + 1 == 0
1 − x3 + x5 0
Solve@x^5 − x^3 + 1 == 0, xD
99x → RootA1 − 13 + 15 &, 1E=,
9x → RootA1 − 13 + 15 &, 2E=, 9x → RootA1 − 13 + 15 &, 3E=,
9x → RootA1 − 13 + 15 &, 4E=, 9x → RootA1 − 13 + 15 &, 5E==
Le espressioni sopra evidenziano l'impossibilità di ottenere da Mathematica radici esatte dell'equazione espresse in
forma esatta. Il calcolo delle radici in forma decimale approssimata con l'operatore NSolve fornisce invece il
risultato richiesto. Si tratta di una soluzione reale e quattro soluzioni complesse, a due a due complesse coniugate.
NSolve@x^5 − x^3 + 1 == 0, xD
88x → −1.23651<, 8x → − 0.340795 − 0.785423 <,
8x → −0.340795 + 0.785423 <,
8x → 0.959048 − 0.428366 <, 8x → 0.959048 + 0.428366 <<
à
4.2 Risoluzione di equazioni in forma approssimata
Quando per un'equazione non è possibile ottenere soluzioni esatte, Mathematica fornisce soluzioni calcolate in
forma approssimata con l’operatore FindRoot. Il comando trova soluzioni approssimate dell'equazione utilizzando
algoritmi iterativi calcolati a partire da un determinato valore iniziale x0 fornito dall'utente. Essendo il valore di
convergenza dell'algoritmo (valore approssimato della soluzione) dipendente dal valore iniziale del calcolo, la
soluzione trovata necessita di una verifica eseguita a posteriori per via grafica. L’operatore Plot permette di
rappresentare graficamente le espressioni A(x) e B(x) che compongono l’equazione da risolvere per evidenziare
l’effettiva coincidenza delle radici calcolate con i punti di intersezione dei due grafici. L’esempio 4.3.1 illustra bene
il metodo.
FindRoot[A[x]==B[x],x,x0]
Plot[{A[x],B[x]},{x,a,b}]
: produce le soluzioni approssimate di un’equazione con soluzioni
non calcolabili analiticamente;
: produce la rappresentazione grafica delle espressioni A[x] e B[x]
nell'internallo [a,b] della variabile indipendente x.
Esempio 4.2.1
Si determinino le soluzioni dell’equazione sen HxL =
x
2
L’espressione è un'equazione trascendente il cui calcolo delle radici non è fattibile in termini analitici. L'operatore
FindRoot permette di calcolarne le soluzioni in forma approssimata.
Sin@xD x ê 2
x
Sin@xD 2
Introduzione all'uso di Mathematica.nb
26
Il calcolo delle radici in forma approssimata è sensibilmente dipendente dal punto iniziale x0 da cui gli l’algoritmi
di Mathematica intraprendono il calcolo iterativo. Per valori di x0 diversi il calcolo iterativo delle radici porta a
soluzioni diverse, come si evince dai seguneti casi.
FindRoot@Sin@xD x ê 2, 8x, 1.5<D
8x → 1.89549<
FindRoot@Sin@xD x ê 2, 8x, 1.<D
8x → 0.<
FindRoot@Sin@xD x ê 2, 8x, −1.<D
8x → 0.<
FindRoot@Sin@xD x ê 2, 8x, −1.5<D
8x → −1.89549<
A partire da diversi valori di x0 il calcolo iterativo produce soluzioni numeriche. La rappresentazione grafica delle
espressioni A[x] e B[x] che compongolo l’equazione permette la verifica a posteriori dell’effettiva correttezza delle
radici calcolate (punti di intersezione dei grafici A[x] e B[x]).
Plot@8Sin@xD, x ê 2<, 8x, −2 Pi, 2 Pi<,
PlotStyle −> 8Thick, Red<, PlotStyle −> 8Thick, Blue<D
3
2
1
−6
−4
−2
2
4
6
−1
−2
−3
In effetti il grafico prodotto conferma che le radici ({x→-1.89549},{x→0},{x→-1.89549}) calcolate dagli
algoritmi di Mathematica, a partire da diversi valori di x0, cpoincidono con i punti di intersezione delle curve.
à
Introduzione all'uso di Mathematica.nb
27
Esempio 4.2.2
Si calcolino in forma approssimata le radici dell'equazione tg HxL = x.
Tan@xD x
Tan@xD x
FindRoot@Tan@xD x, 8x, Pi ê 4<D
9x → 2.03897 × 10−8 =
FindRoot@Tan@xD x, 8x, Pi ê 12<D
9x → 1.48945 × 10−8 =
FindRoot@Tan@xD x, 8x, H5 ê 4L Pi<D
8x → 4.49341<
FindRoot@Tan@xD x, 8x, H18 ê 12L Pi<D
8x → 4.71239<
FindRoot@Tan@xD x, 8x, H5 ê 3L Pi<D
8x → 7.72525<
Le radici calcolate con metodi iterativi appaiono di difficile interpretazione in riferimento al valore del parametro
x0 scelto. In questa situazione la verifica grafica è essenziale per comprendere la natura delle radici e dell'equazione data.
Plot@8Tan@xD, x<, 8x, −4 Pi, 4 Pi<,
PlotStyle −> 8Thick, Red<, PlotStyle −> 8Thick, Blue<D
20
10
−10
−5
5
10
− 10
− 20
Il grafico ottenuto è esplicativo delle radici ({x→-1.89549},{x→0},{x→-1.89549}) calcolate dagli algoritmi di
Mathematica, a partire da diversi valori di x0.
à
Introduzione all'uso di Mathematica.nb
28
4.3 Sistemi di equazioni (cenni)
In modo analogo a quanto fatto con le equazioni ma con comprensibile cambio di sintassi Mathematica è in grado
di risolvere sistemi di equazioni lineari e (talvolta) non lineari. Gli operatori Solve e NSolve permettono di
ottenere le soluzioni esatte del sistema rappresentate in forma esatta e decimale approssimata, rispettivamente. Si
noti come siano state utilizzate le liste { } per indicare la presenza di più equazioni del tipo A1 ( x1 ,
... xn ) = B1 (x1 ,
... xn ) , ... , An (x1 , ... xn ) = Bn (x1 , ... xn ) da risolvere simultaneamente.
Solve[{A1[x1,...,xn]==B1[x1,...,xn],...,An[x1,...,xn]==Bn[x1,...,xn]},{x1,...,xn}]
produce le soluzioni esatte (reali o complesse) di un sistema di equazioni e ne fornisce la rappresentazione in
notazione esatta;
NSolve[{A1[x1,...,xn]==B1[x1,...,xn],...,An[x1,...,xn]==Bn[x1,...,xn]},{x1,...,xn}]
produce le soluzioni esatte (reali o complesse) di un sistema di equazioni e ne fornisce la rappresentazione in
notazione (decimale) approssimata;
Esempio 4.3.1
Si verifichi che la soluzione esatta dei seguenti sistemi è immediata.
8x ê 2 + y ê 3 3 a, H1 ê 3L x − y 1<
x y
x
: + 3 a,
− y 1>
2 3
3
Solve@8x ê 2 + y ê 3 3 a, H1 ê 3L x − y 1<, 8x, y<D
6
9
18 a
::x →
H1 + 9 aL, y → −
+
>>
11
11
11
NSolve@8x ê 2 + y ê 3 3 a, H1 ê 3L x − y 1<, 8x, y<D
88x → 0.545455 + 4.90909 a, y → − 0.818182 + 1.63636 a<<
Esempio 4.3.2
Come l’esempio 4.3.1 ma con un sistema più complicato da risolvere e spingendo l’approssimazione numerica a 20.
8x^2 ê 2 + y^ 3 ê 3 3, H1 ê 3L x − y 1<
x2 y3
x
:
+
3,
− y 1>
2
3
3
Introduzione all'uso di Mathematica.nb
29
Solve@8x^2 ê 2 + y^ 3 ê 3 3, H1 ê 3L x − y 1<, 8x, y<D
::x →
3
−7 +
2
1
y→
−9 +
2
:x →
3
15
1
J3
J− 29 + 2 15
1
J3
−14 −
4
J−29 + 2 1
J3
J−29 + 2 15 J1 + 4
:x →
3
J−29 + 2 −14 −
4
71 NN
71 NN
71 N
3N
71 NN
1ê3
−
1ê3
+ 32ê3 J−29 + 2 71 N
1
4
−
1ê3
J 3 J−29 + 2 3 31ê6 J−29 + 2 15 J1 − 4 J 3 J−29 + 2 3N
71 NN
1ê3
−
1ê3
1
4
J− 29 + 2 32ê3 J1 − 71 NN
71 N
15 35ê6
− 32ê3 J−29 + 2 15
1
1
1ê3
71 N
15
3 31ê6 J−29 + 2 1
J3
71 NN
1ê3
+ 32ê3 J− 29 + 2 +
1ê3
71 N
71 N
1ê3
− 32ê3 J−29 + 2 1ê3
, y→−
9
−
2
71 N
71 N
>,
+
3 N J− 29 + 2 J− 29 + 2 ,
1ê3
15 35ê6
32ê3 J1 + 1ê3
71 N
1ê3
>,
−
1ê3
1ê3
, y→−
3 N J− 29 + 2 9
−
2
71 N
1ê3
>>
NSolve@8x^2 ê 2 + y^ 3 ê 3 3, H1 ê 3L x − y 1<, 8x, y<D
88x → −30.3156, y → − 11.1052<,
8x → 2.45033, y → − 0.183224<, 8x → −3.63474, y → −2.21158<<
NSolve@8x^2 ê 2 + y^ 3 ê 3 3, H1 ê 3L x − y 1<, 8x, y<, 20D
88x → −30.315582348461309331, y → − 11.105194116153769777<,
8x → 2.4503266536476877954, y → − 0.18322444878410406819<,
8x → −3.634744305186378465, y → −2.2115814350621261549<<
à
Introduzione all'uso di Mathematica.nb
30
5 Funzioni reali
5.1 Premessa: l'uguaglianza
In Mathematica esistono tre tipi di uguaglianza e ciascuna di esse svolge un ruolo ben preciso: la definizione, la
definizione differita, l'uguaglianza in una equazione.
In particolare:
la definizione semplice si ottiene con il simbolo = . L’espressione alla sinistra del simbolo = diventa immediatamente uguale all’espressione che compare alla sua destra e l’identità asserita è fissa nel senso che ogni qualvolta
venga richiamata l’espressione di sinistra Mathematica automaticamente e istantaneamente esegue l’associazione
con l’espressione a destra.
La definizione differita si ottiene con il simbolo := . Il suo significato è profondamente diverso dalla definizione
semplice. Dopo aver eseguito la definizione differita ad ogni richiamo successivo dell’espressione di sinistra
Mathematica non restituisce immediatamente ed automaticamente l’espressione di destra ma la valuta di volta in
volta tenendo conto di eventuali aggiornamenti eseguiti nel frattempo in riferimento alle espressioni o alle variabili
presenti nell’identificazione.
L’uguaglianza in un’equazione si ottiene con il simbolo == . Si tratta dell’operatore logico utilizzato per scrivere e
gestire equazioni o sistemi di equazioni.
In particolare le operazioni di definizione permettono di assegnare nomi a espressioni matematiche (ad es. a
funzioni) o valori a variabili. Le definizioni su espressioni possono essere successivamente annullate tramite
l’operatore Clear. Le definizioni su variabili possono essere annullate utilizzando il simbolo =. .
Gli esempi che seguono sono importanti per comprendere il significato dei tre tipi di uguaglianza e i loro rispettivi
ruoli.
Esempio 5.1.1
Si verifichino le modalità di esecuzione, richiamo ed annullamento dell’operazione di definizione semplice.
L’assegnazione di un nome ad un’espressione (ad es. ad una funzione) e l’assegnazione del valore ad una variabile
sono due tipiche situazioni dove viene utilizzata la definizione semplice.
f = Hx^2 − 1L^2
I−1 + x2 M
2
x=2
2
2
Dopo le assegnazioni richiamando l'espressione f Mathematica restituisce la funzione f = I-1 + x2 M calcolata in
x=2:
f
9
Liberando la variabile x:
x =.
l'espressione f torna ad essere una funzione simbolica:
f
I−1 + x2 M
2
Annullando la definizione di f :
Clear@fD
Introduzione all'uso di Mathematica.nb
31
il simbolo f torna ad essere libero:
f
f
à
Esempio 5.1.2
Si verifichino le modalità di esecuzione, richiamo ed annullamento dell’operazione di definizione differita.
Nelle righe che seguono la derivata della funzione f è calcolata attraverso l’operatore D[ ].
f = Hx^2 − 1L^2
I−1 + x2 M
2
D@f, xD
4 x I−1 + x2 M
Si esegua ora la definizione di h come la derivata di f utilizzando l’operazione di definizione semplice. Immeditamamente Mathemathica restituisce l’espressione della derivata di f:
h = D@f, xD
4 x I−1 + x2 M
Si definisca g allo stesso modo ma utilizzando questa volta l’operazione di definizione differita. Mathematica in
questo caso non fornisce output. Per avere l’output (la derivata) è inftti necessario richiamare esplicitamente g . In
altre parole con la definizione differita g non è immediatamente uguale all’espresione derivata ma lo diventa solo se
(e quando) viene richiamata.
g := D@f, xD
g
4 x I−1 + x2 M
Le due identificazioni hanno implicazioni diverse rispetto alle successive operazioni inerenti la funzione f. Ad
esempio richiamando h e g dopo aver modificato f si ottengono risultati diversi:
f = f^2
I−1 + x2 M
4
h
4 x I−1 + x2 M
g
8 x I−1 + x2 M
3
Richiamando h si è ottenuta l’espressione derivata calcolata sulla funzione f senza tener conto della modifica f = f 2
eseguita ossia sull’espressione di f presente nel momento dell’identificazione. Richiamando g si è ottenuta invece
l’espressione derivata della funzione f tenendo conto della modifica f = f 2 eseguita dopo la dichiarazione. La
4
funzione g, se richiamata, è la derivata della funzione f al momento del richiamo (ossia di f = I-1 + x2 M ) e non di f
2
nel momento della dichiarazione (ossia di f = I-1 + x2 M ).
à
Introduzione all'uso di Mathematica.nb
32
Esempio 5.1.3
Si verifichino le modalità di esecuzione dell’operatore di uguaglia in un’equazione.
L’uguaglianza in un’equazione si comporta come un operatore logico:
23
False
33
True
Il simbolo == è utilizzato per formulare e risolvere un'equazione o un sistema di equazioni. Per risolvere un'equazione è buona regola prima assicurarsi che la variabile x sia una variabile libera e poi utilizzare, come visto in
precedenza, con l’operatore Solve[ ]:
x =.
Solve@2 x^2 + 3 x − 2 0, xD
1
:8x → −2<, :x → >>
2
Le soluzioni sono date sotto forma di regole di sostituzione per la variabile x, che rimane non assegnata.
x
x
à
5.2 Funzioni libreria predefinite
Mathematica è in grado di studiare e rappresentare graficamente funzioni reali di variabile reale da a . Le
funzioni più comuni sono già contenute nella librerie del programma (funzioni libreria predefinite) e possono essere
utilizzate semplicemente dopo essere state richiamate in modo corretto. Per richiamare una funzione libreria è
sufficiente scrivere l’identificatore con la prima lettera maiuscola e l’argomento inserito tra parentesi quadrate. La
notazione comunemente usata è F[x]. In particolare, dopo essere state richiamate, le funzioni libreria possono
essere tabulate, graficate, utilizzate per risolvere equazioni o per definire altre funzioni senza richiedere prima
alcuna dichiarazione. Di seguito sono illustrate le funzioni libreria più comuni.
Sqrt[x]
: funzione esponenziale di base e;
: funzione logaritmo in base e;
: funzione logaritmo in base a;
: funzioni trigonometriche;
: funzioni trigonometriche inverse;
: funzioni iperboliche;
: funzione radice quadrata;
Abs[x]
: funzione valore assoluto;
Exp[x]
Log[x]
Log[x,a]
Sin[x], Cos[x], Tan[x]
ArcSin[x], ArcCos[x], ArcTan[x]
Sinh[x], Cosh[x], Tanh[x]
Le funzioni libreria e le funzioni con esse costruite possono essere valutate in un determinato punto a con l’operatore /.x->a . La tabulazione delle stesse funzioni calcolandone i valori numerici punto per punto attraverso l’operatore Table . Gli operatori MatrixForm e ColumnForm consentono di ottenere i dati, rispettivamente, in forma
Introduzione all'uso di Mathematica.nb
Table
MatrixForm
33
ColumnForm
matriciale o come collezione di liste. La rappresentazione grafica delle funzioni è eseguita tramite l’operatore
Plot .
F[x]/.x->a
Table[{x,F[x]},{x,a,b}]
MatrixForm[Table[{x,F[x]},{x,a,b}]]
: valuta la funzione nel punto x=a ;
: calcola la funzione punto per punto nel dominio [a,b]
della variabile indipendente x e fornisce la collezione
di dati numerici in forma di lista di liste;
: fornisce la collezione di dati numerici in forma matri-
ciale;
ColumnForm[Table[{x,F[x]},{x,a,b}]]
Plot[{F[x]},{x,a,b}]
: fornisce la collezione di dati numerici in forma di colonna
di liste;
: produce il grafico nel piano xOy della funzione F[x] nel
dominio [a,b] della variabile indipendente x;
Esempio 5.2.1
Riprendendo l’equazione dell’Esempio 5.1.3 si verifichi la validità del Teorema di Ruffini.
E' sufficiente utilzzare l'operatore di sostituzione /.-> x1 per verificare che le radici dell' equazione verificano la
segenbte espressione Una regola di sostituzione, mediante il comando /. , permette di valutare l' espressione f nel
punto x = 2. Si ottiene :
2 x^2 + 3 x − 2 0
−2 + 3 x + 2 x2 0
Solve@2 x^2 + 3 x − 2 0, xD
1
:8x → −2<, :x → >>
2
La modalità con cui l’operatore Solve restituisce le radici non assegna la variable x alle radici:
x
x
Per assegnare le due soluzioni a due variabili si può usare la regola di sostituzione eseguita mediante l’operatore
/.x->
x ê. 88x → −2<, 8x → 1 ê 2<<
1
:−2, >
2
8a, b< = 8−2, 1 ê 2<
1
:−2, >
2
adesso a e b sono le due soluzioni.
La verifica può essere eseguita come segue:
2 x^2 + 3 x − 2 ê. x → a
0
Introduzione all'uso di Mathematica.nb
34
2 x^2 + 3 x − 2 ê. x → b
0
Naturalmente è di immediata verifica il Teorema di Ruffini, ossia che l’epressione 2 (x-a) (x-b) coincide con il
polinomio che costituisce l’equazione iniziale.
2 Hx − aL Hx − bL
1
2 − + x H2 + xL
2
Expand@%D
−2 + 3 x + 2 x2
à
Esempio 5.2.2
Si consideri la funzione f(x) = cos HxL log H-1 + xL +
Sin@xD
x
. Si tabulino i valori di f in forma (a) di lista di liste, (b)
matricale, (c) di colonna di liste e se ne rappresenti il grafico.
Cos@xD Log@x − 1D + Sin@xD ê x
Sin@xD
Cos@xD Log@−1 + xD +
x
La tabulazione della funzione in termini (a) di lista di liste, (b) matriciali, (c) di colonna di liste e si ottengono
tramite esecuzione degli operatori Table, MatrixForm e ColumnForm:
Table@8x, Cos@xD Log@x − 1D + Sin@xD ê x<, 8x, 0.01, 15<D
880.01, 0.989934 + 3.14144 <, 81.01, −1.61086<,
82.01, 0.446063<, 83.01, −0.648506<,
84.01, − 0.90225<, 85.01, 0.216419<, 86.01, 1.50679<,
87.01, 1.43501<, 88.01, −0.179262<, 89.01, −1.85953<,
810.01, − 1.88769<, 811.01, − 0.0575874<,
812.01, 1.99304<, 813.01, 2.27811<, 814.01, 0.396197<<
MatrixForm@
Table@8x, Cos@xD Log@x − 1D + Sin@xD ê x<, 8x, 0.01, 20<DD;
ColumnForm@
Table@8x, Cos@xD Log@x − 1D + Sin@xD ê x<, 8x, 0.01, 20<DD;
Il simbolo di
; alla fine delle due stringhe precedenti permette di evitare la visualizzazione di tutti i dati nell’out-
put ed in tal modo risparmiare spazio nel Notebook..
Introduzione all'uso di Mathematica.nb
35
Il grafico della funzione è ottenuto attraverso l’operatore Plot e la seguente stringa di input:
Plot@8Cos@xD Log@x − 1D + Sin@xD ê x<, 8x, 0.01, 20<,
PlotRange → 8−4, 4<, PlotStyle → 8Thick, Red<D
4
2
5
10
15
20
−2
−4
à
5.3 Calcolo e rappresentazione di funzioni da in In aggiunta alle funzioni libreria (built-in functions) Mathematica lavora con qualsiasi funzione f[x] a patto che
essa venga correttamente definita dall’utente. Si noti che nel caso di funzioni definite dall’utente è bene utilizzare
un’identificatore (nome simbolico) scritto con prima lettera minuscola (identificatori con prima lettera maiuscola,
come si è visto, indicano le funzioni libreria). Per la dichiarazione di nuove funzioni esistono precise regole di
sintassi. Quando si è definita una nuova funzione la si può utilizzare come quelle di libreria per calcolarne i valori
specifici, per tabularla, per graficarla, per risolvere equazioni, per definire altre funzioni. Per definire una funzione
è necessario stabilirne l’intestazione e il corpo: l’intestazione è data da un identificatore del tipo f[x_], il corpo è
l’espressione matematica che rappresenta effettivamente la funzione. Naturalmente il nome della variabile indipendente è arbitrario (in questo caso si è scelto x). L’associazione tra l’identificatore e il corpo viene eseguita tramite il
simbolo := . Una volta dichiarata la funzione f[x] è possibile calcolarne i valori numerici punto per punto e
ottenerne la rappresentazione in forma di lista di liste attraverso l’operatore Table. Gli operatori MatrixForm e
ColumnForm consentono di ottenere i dati in forma matriciale o come colonna di liste. La rappresentazione grafica
di funzioni è eseguita tramite l’operatore Plot.
f[x_]:= espressione
Table[{x,f[x]},{x,a,b}]
MatrixForm[Table[{x,f[x]},{x,a,b}]]
ColumnForm[Table[{x,f[x]},{x,a,b}]]
Plot[{f[x]},{x,a,b}]
: dichiara una funzione f[x] generica non predefinita;
: calcola la funzione punto per punto nel dominio [a,b]
della variabile x e fornisce la collezione di dati
numerici in forma di lista di liste;
: calcola la funzione punto per punto nel dominio [a,b]
della variabile x e fornisce la collezione di dati
numerici in forma matriciale;
: calcola la funzione punto per punto nel dominio [a,b]
della variabile x e fornisce la collezione di dati
numerici in forma di colonna di liste;
: produce il grafico della funzione f[x] non predefinita nel
dominio [a,b] della variabile indipendente x;
Quando si esegue la dichiarazione di una funzione (f[x_]:= espressione) o si assegna il valore ad una variabile (x=a), Mathematica continua a mantenere valida l’assegnazione fatta per l’intera sessione di lavoro. In taluni
Introduzione all'uso di Mathematica.nb
36
x=a
casi questo può costituire un problema (ad esempio nel caso in cui si debbano dichiarare molte funzioni senza
dover necessariamente cambiare sempre il nome). In questi casi è utile interrompere l’assegnazione fatta in precedenza per poter associare un nome già usato ad una nuova espressione. Una dichiarazione di funzione precedentemente eseguita può essere annullata tramite l'operatore Clear. In modo analogo, è necessario a volte dover interrompere un'assegnazione precedentemente eseguita su una variabile (ad esempio quando a seguito di un'assegnazione eseguita del tipo x=a si voglia evitare che una funzione f(x), definita, porti automaticamente al calcolo di
f(a)). L'annullamento della dichiarazione su una variabile può essere eseguita con l'operatore x=. .
Clear[f]
x=.
: annulla una dichiarazione precedentemente eseguita sulla funzione f[x];
: annulla una dichiarazione precedentemente eseguita sulla variabile x ;
Esempio 5.3.1
Si consideri la funzione f(x) = x2 - x3 . Si tabulino i valori di f in forma (a) di lista di liste, (b) matricale, (c) di
colonna di liste e se ne rappresenti il grafico.
La funzione f[x] non è una funzione predefinita appartenente alle librerie di Mathematica e necessita di essere
dichiarata tramite uguaglianza differita:
f@x_D := x^2 − x^3
f@xD
x2 − x3
Dopo aver dichiarato la funzione è possibile calcolare il valore di f[x] molto facilmente su qualsiasi punto a:
f@aD
a2 − a3
La tabulazione di f[x] in termini di di lista di liste, (b) matricale, (c) di colonna di liste e si ottengono tramite
esecuzione degli operatori Table, MatrixForm e ColumnForm. Per ragioni di spazio nella tabulazione della
funzione f viene omessa la rappresentazione esplicita dei dati. Per fare questo alla fine delle stringhe relative agli
operatori Table, MatrixForm e ColumnForm è stato inserito il simbolo ; . Per evidenziare in modo esplicito i
valori numerici è sufficiente eliminare tale simbolo dalla fine di ogni stringa.
Table@8x, f@xD<, 8x, −10, 10<D;
MatrixForm@Table@8x, f@xD<, 8x, −10, 10<DD;
ColumnForm@Table@8x, f@xD<, 8x, −10, 10<DD;
Introduzione all'uso di Mathematica.nb
37
La rappresentazione grafica della funzione è eseguita con il comando Plot .
Plot@8f@xD<, 8x, − 10, 10<,
PlotRange → 8−800, 800<, PlotStyle −> 8Thick, Red<D
500
−10
−5
5
10
− 500
La dichiarazione eseguita della funzione f[x] (f[x] = x2 − x3 ) se non annullata è mantenuta nella memoria del
Notebook per l'intera sessione di lavoro. Volendo dichiarare una nuova funzione mantenendo il nome f[x] è
necessario, prima della nuova dichiarazione, annullare la dichiarazione precedente:
f@xD
x2 − x3
Clear@fD
f@xD
f@xD
à
Esempio 5.3.2
Si consideri la funzione f(x) =
Sin@xD
x
. Si tabulino i valori di f in forma (a) di lista di liste, (b) matricale, (c) di
colonna di liste e se ne rappresenti il grafico.
La funzione f(x) è una funzione costruita con la funzione sen(x) predefinita appartenente alle librerie di Mathematica. In generale funzioni di questo tipo devono essere dichiarate tramite uguaglianza differita:
f@x_D := Sin@xD ê x
f@xD
Sin@xD
x
La funzione dichiarata è comunque una funzione nota a Mathematica. Nel punto di discontinuità x0 =0 Mathematica associa il corretto valore calcolato dal limite per x tendente a x0 :
f@0D = 1
1
Introduzione all'uso di Mathematica.nb
38
Per rappresentare il grafico della funzione si utilizza l’operatore plo[ ]. L’argomento dell’operatore contiene le
informazioni inerenti lo stile del grafico:
Plot@8f@xD<, 8x, − 10 Pi, 10 Pi<,
PlotStyle −> 8Thick, Red<, PlotRange → 8−0.3, 1.1<D
1.0
0.8
0.6
0.4
0.2
−30
−20
−10
10
20
30
−0.2
à
Una particolare categoria di funzioni importanti per le applicazioni in elettronica e teoria dei segnali solo le funzioni a tratti. In Mathematica le funzioni a tratti si ottengono con l’uso dell’operatore
If abbinato al comando di
uguaglianza imposta = . L’operatore If richiede la definizione di tre argomenti: la condizione, l’azione nel caso di
verifica della condizione, l’azione in caso di falsità della condizione. La struttura è fondamentalmente quella dell’if
...then...else... dei linguaggi di programmazione. Nella definizione di funzioni discontinue il comando di
uguaglianza imposta = viene utilizzato per eliminare le discontinuità eliminabili ossia per imporre un determinato
valore assunto dalla funzione in una sua singolarità x0 (punto di discontinuità). La corretta defnizione di una
funzione a tratti necessita ovviamente della sintassi appropriata.
h[x_]:=If[condizione,f1[x],f2[x]] : dichiara una funzione a tratti del tipo f[x]=f1[x] se la
h[x0]= h0
condizione è verificata, f[x]=f2[x] se la condizione
è negata;
: dichiara il valore imposto h0 della funzione h[x] in
una sua singolarità x0 (punto di discontinuità);
Esempio 5.3.3
senxê x per x < 0
0
per x = 0 e se ne rappresenti il grafico.
Si consideri la funzione a tratti f(x) =
-senxê x per x > 0
h@x_D := If@x  0, Sin@xD ê x, −Sin@xD ê xD
h@0D = 0
0
Per rappresentare il grafico della funzione si utilizza l’operatore plot[ ]. L’argomento dell’operatore contiene le
Introduzione all'uso di Mathematica.nb
39
plot[ ]
informazioni inerenti lo stile del grafico:
Plot@8h@xD<, 8x, − 10 Pi, 10 Pi<,
PlotRange → 8−1.1, 1.1<, PlotStyle −> 8Thick, Red<D
1.0
0.5
− 30
− 20
− 10
10
20
30
−0.5
−1.0
à
5.4 Elementi di calcolo infinitesimale: limiti di funzioni da in Mathematica è in grado di eseguire il calcolo di limiti mediante l’operatore Limit . La freccia si ottiene digitando
- seguito da > . Se il limite destro e il limite sinistro sono diversi Mathematica calcola di defaul il limite destro. Nel
caso Mathematica fornisca un risultato è necessario porre attenzione che il limite potrebbe esistere anche solo da
destra. Per chiedere esplicitamente a Mathematica di calcolare un limite destro o sinistro si usa l’opzione Direction->1 per il limite sinistro o Direction->-1 per il limite destro.
Limit[f, x->x0, Direction->1]
: calcolo di limite per x tendente ad una singolarità x0 da destra.
Limit[f, x->x0, Direction->-1] : calcolo di limite per x tendente ad una singolarità x0 da sinistra.
Limit[f, x->infinity]
Limit[f, x->-infinity]
: calcolo di limite per x tendente a + infinito.
: calcolo di limite per x tendente a - infinito.
Esempio 5.4.1
I seguenti esempi illustrano la corretta sintassi nel calcolo dei limiti.
Limit@Sin@xD ê x, x → 0, Direction −> 1D
1
Limit@Sin@xD ê x, x → 0, Direction −> −1D
1
Limit@x ê Abs@xD, x → 0, Direction −> 1D
−1
Limit@x ê Abs@xD, x → 0, Direction −> −1D
1
Introduzione all'uso di Mathematica.nb
40
Limit@Hx^2 + 2^xL ê H1 + x^ 3L, x −> InfinityD
∞
Limit@Hx^2 + 2^xL ê H1 + x^ 3L, x −> −InfinityD
0
à
Esempio 5.4.2
Nel caso si provi a calcolare un limite che non esiste Mathematica restituisce un output che significa che il limite
1
non esite. Si calcolino ad esempio i limiti delle funzioni (a) f HxL = sen I x M e (b) f HxL = x sen HxL per x che tende a
zero e ad infinito, rispettivamente.
(a)
Sin@1 ê xD
1
SinB F
x
Limit@ Sin@1 ê xD, x → 0D
Interval@8−1, 1<D
L’output significa che il limite non esite e la classe limite è l’intervallo [-1,1].
Plot@8Sin@1 ê xD<, 8x, −3, 3<, PlotStyle −> 8Thick, Red<D
1.0
0.5
−3
−2
−1
1
2
3
−0.5
−1.0
(b)
x Sin@xD
x Sin@xD
Limit@ x Sin@xD, x → InfinityD
Interval@8−∞, ∞<D
L’output significa che il limite non esite e la classe limite è l’intervallo (-Infinito,Infinito).
Introduzione all'uso di Mathematica.nb
41
Plot@8x Sin@xD<, 8x, − 80, 80<, PlotStyle −> 8Thick, Red<D
50
−50
50
−50
à
5.5 Elementi di calcolo infinitesimale: derivate di funzioni da in Mathematica è in grado di eseguire il calcolo di derivate di funzione reali di libreria F[x] o di funzioni f[x] precedentemente dichiarate dall’utente. Per eseguire la derivata è utilizzato l’operatore D con argomenti racchiusi tra parentesi quadre dati dall’espressione della funzione da derivare e dalla variabile rispetto cui derivare. Se la derivata è
di ordine superiore al primo (derivata seconda, terza, ecc.) è necessario specificare, all’interno delle parentesi
quadre, l’espressione della funzione da derivare e la lista costituita dalla variabile e dall’ordine di derivazione. Il
differenziale della funzione si ottiene omettendo di definire la variabile e l’ordine.
D[f[x],x]]
D[f[x],{x,n}]]
D[f[x]]]
: produce la derivata prima della funzione f rispetto a x;
: produce la derivata n-esima della funzione f rispetto a x;
: produce il differenziale della funzione f ;
Esempio 5.5.1
Si consideri la funzione f(x)=
sin HxL
x
sin HxL 2
cos HxL log HxL+
1+log Ix
M
e se ne calcoli la derivata f '(x) . Si rappresentino graficamente
la funzione f (x) e f '(x).
Conviene prima dichiarare la funzione:
f@x_D := HCos@xD Log@xD + Sin@xD ê xL ê H1 + Log@x^ HSin@xDLD^2L
verificare la dichiarazione eseguita:
f@xD
Cos@xD Log@xD +
Sin@xD
x
1 + LogAxSin@xD E
2
Introduzione all'uso di Mathematica.nb
42
e poi eseguirne la derivata:
D@f@xD, xD
−
2 LogAxSin@xD E ICos@xD Log@xD +
Sin@xD 2
M
x
J1 + LogAxSin@xD E N
+
2 2
2 Cos@xD
x
−
Sin@xD
x2
− Log@xD Sin@xD
1 + LogAxSin@xD E
2
I grafici di f (x) e f '(x) permettono di verificare la correttezza del calcolo eseguito. Ancora una volta conviene
prima dichiarare la funzione derivata:
derf@x_D := −
2 LogAxSin@xD E ICos@xD Log@xD +
2
J1 + LogAxSin@xD E N
2 Cos@xD
x
−
Sin@xD
x2
Sin@xD 2
M
x
+
2
− Log@xD Sin@xD
1 + LogAxSin@xD E
2
verificare la dichiarazione eseguita:
derf@xD
−
2 LogAxSin@xD E ICos@xD Log@xD +
Sin@xD 2
M
x
J1 + LogAxSin@xD E N
+
2 2
2 Cos@xD
x
−
Sin@xD
x2
− Log@xD Sin@xD
1 + LogAxSin@xD E
2
e solo successivamente rappresentare, come richiesto, il grafico delle funzioni f[x] e derf[x] dechiarate:
Plot@8f@xD, derf@xD<, 8x, −0.1 Pi, 10 Pi<, PlotRange → 8−8., 8.<,
PlotStyle −> 8Thick, Red<, PlotStyle −> 8Thick, Blue<D
5
5
10
15
20
25
30
−5
à
Introduzione all'uso di Mathematica.nb
43
5.6 Elementi di calcolo infinitesimale: primitive di funzioni da in Mathematica calcola l’integrale indefinito di una funzione f[x] mediante l’uso dell’operatore Integrate con
argomenti dati dalla funzione integranda e dalla variabile rispetto alla quale integrare. Gli integrali indefiniti
prodotti da Mathematica non riportano la costante addittiva indeterminata. Nel caso la primitiva non fosse una
funzione elementare Mathematica non produce risultato.
: produce il calcolo della primitiva della funzione f[x] a meno di una costante
addittiva arbitraria.
Integrate[f[x],x]
Esempio 5.6.1
1+x
Si calcoli la primitiva della seguente funzione integrabile in : f(x)= 1+x+x
;
2
f@xD = H1 + xL ê H1 + x + x^ 2L
1+x
1 + x + x2
Integrate@f@xD, xD
ArcTanB
1+2 x
3
F
1
+
2
3
LogA1 + x + x2 E
Per verificare che il risultato è corretto eseguiamo la derivata della primitiva trovata a meno di una costante arbitraria k:
ArcTanB
1+2 x
3
Fx =
1+2 x
3
k+
F
2
I1 + x + x2 M
+
1
2
3
D@Fx, xD
1+2 x
+
1
2
3
ArcTanB
F
+
LogA1 + x + x2 E + k
LogA1 + x + x2 E
2
3 I1 +
1
3
H1 + 2 xL2 M
FullSimplify@%D
1+x
1 + x + x2
à
Esempio 5.6.2
Si calcoli la primitiva della funzione f HxL =
f@xD = 1 ê HArcTan@xDL
1
ArcTan@xD
1
arctan HxL
:
Introduzione all'uso di Mathematica.nb
44
Integrate@f@xD, xD
1
x
‡
ArcTan@xD
La primitiva non è una funzione elementare e Mathematica restituisce la funzione integranda inalterata.
à
Esempio 5.6.3
Si calcoli la primitiva della funzione f HxL =
1
log HxL
:
In questo caso Mathematica è in grado di fornire il risultato anche se la primitiva non una funzione elementare.
f@xD = 1 ê Log@xD
1
Log@xD
Integrate@1 ê Log@xD, xD
LogIntegral@xD
Per Mathematica LogIntegral[x] è la funzione f(x)=log(Ÿ x x) ed in effetti questa è la primitiva, definita a meno
della costante arbitraria, della dunzione f iniziale.
Il risultato trovato è di immediata verifica:
D@ LogIntegral@xD, xD
1
Log@xD
à
5.7 Calcolo di integrali definiti esatto ed approssimato
La sintassi per il calcolo dell'integrale definito di una funzione f[x] nell'intervalloa [a,b] prevede l'utilizzo dell'operatore Integrate con argomento costituito dal corpo della funzione da integrare e da una stringa contenente la
variabile di integrazione e gli estremi. Il comando Integrate calcola, se possibile, un integrale definito in modo
esatto, passando attraverso la primitiva o con altri metodi esatti. Quando questo non fosse possibile, ossia nel caso
di integrali definiti caratterizzati da calcoli di primitive non elementari, Mathematica non produce risultato. In tal
caso è possibile eseguire il calcolo approssimato dell’integrale definito coi metodi dell’analisi numerica. Il calcolo
del valore approssimato utilizza l’operatore NIntegrate con lo stesso argomento utilizzato nel caso del calcolo
dell’integrale esatto.
: produce il calcolo dell'integrale definito di una funzione f[x] nell'intervallo
di integrazione [a,b] ;
NIntegrate[f[x],{x,a,b}] : produce il calcolo approssimato dell’integrale definito di una funzione f[x]
nell’intervallo di integrazione [a,b] ;
Integrate[f[x],{x,a,b}]
Esempio 5.7.1
Si calcoli il valore dell'integrale definito della funzione f HxL =
1+x
1+x+x2
nell’intervallo di integrazione [0,1].
Introduzione all'uso di Mathematica.nb
45
f@xD = H1 + xL ê H1 + x + x^ 2L
1+x
1 + x + x2
Integrate@f@xD, 8x, 0, 1<D
1
J 3 π + 9 Log@3DN
18
Per capire l'entità del numero calcolato è utile avere il risultato in termini di numeri decimali.
1
J 3 π + 9 Log@3DNF
18
0.851606
NB
à
Esempio 5.7.2
Si calcoli il valore dell’integrale definito della funzione f HxL =
1
1+‰x +x
nell’intervallo di integrazione [0,1].
Nel caso della funzione considerata calcolo della primitiva con metodi esatti non produce risultato:
f@xD = 1 ê H1 + Exp@xD + xL
1
1 + x + x
Integrate@f@xD, 8x, 0, 1<D
1
1
x
‡
x
0 1+ +x
Al contrario il calcolo dell’integrale approssimato produce output numerico:
NIntegrate@f@xD, 8x, 0, 1<D
0.329971
à
Esempio 5.7.3
Si consideri la funzione f HxL =
1
1+x2
si calcoli l’integrale definito nell’intervallo [0,1] in forma esatta (utilizzando
Integrate)e in forma approssimata (con NIntegrate ). Si confrontino i risultati ottenuti.
f@xD = 1 ê H1 + x ^2L
1
1 + x2
Integrate@f@xD, 8x, 0, 1<D
π
4
NIntegrate@f@xD, 8x, 0, 1<D
0.785398
Introduzione all'uso di Mathematica.nb
46
Si osservi che:
N@Pi ê 4D
0.785398
cioè il valore “approssimato” è approssimato davvero bene.
à
5.8 Integrali generalizzati (cenni)
Mathematica è in grado di calcolare integrali definiti generalizzati in forma esatta purchè, ovviamente, risultino
convergenti. In caso di non convergenza è possibile tentare il calcolo approssimato degli integrali mediante opportuni algoritmi.
Esempio 5.8.1
1
1
Si calcoli l’integrale definito generalizzato Ÿ0
x
dx .
f@xD = 1 ê Sqrt@xD
1
x
Integrate@f@xD, 8x, 0, 1<D
2
L’integrale converge ed è calcolabile esattamente.
à
Esempio 5.8.2
+¶
2
Si calcoli l’integrale definito generalizzato Ÿ-¶ ‰-x dx .
f@xD = Exp@−x^ 2D
2
−x
Integrate@f@xD, 8x, − Infinity, Infinity<D
π
L’integrale converge ed è calcolabile esattamente.
à
Esempio 5.8.3
11
Si calcoli l’integrale definito generalizzato Ÿ0
f@xD = 1 ê x
1
x
x
dx .
Introduzione all'uso di Mathematica.nb
47
Integrate@f@xD, 8x, 0, 1<D
— Integrate::idiv : Integral of
‡
1
0
1
1
x
does not converge on 80, 1<. à
x
x
L’integrale non converge. In questo caso Mathematica non produce risultato e fornisce un messaggio di testo in cui
è dichiarata la non convergenza.
Tentando di risolvendo l’integrale in forma approssimata Mathematica fornisce un risultato numerico ma mette in
guardia sul fatto che la convergenza dell’algoritmo di approssimazione è lenta.
NIntegrate@f@xD, 8x, 0, 1<D
— NIntegrate::slwcon :
Numerical integration converging too slowly; suspect one of the
following: singularity , value of the integration is 0, highly
oscillatory integrand, or WorkingPrecision too small. à
— NIntegrate::ncvb :
NIntegrate failed to converge to prescribed accuracy after 9
recursive bisections in x near 8x< = 91.22413 µ 10-225 =.
NIntegrate obtained 191612.2902185145` and
160378.51781028978` for the integral and error estimates. à
191 612.
In questa situazione l’output prodotto è certamente inattendibile.
à
5.9 Equazioni differenziali (cenni)
Mathematica è in grado di risolvere in modo esatto equazioni differenziale semplici. La sintassi per esprimere le
equazioni differenziali prevede per la funzione incognita la forma y[x]. La variabile all’interno delle parentesi
quadre è ovviamenete arbitraria. Le derivate sono espresse nella forma y'[x], y''[x], y'''[x] ... , e tra i due membri
dell’equazione è inserito il imbolo
==. Mathematica utilizza l’operatore
DSolve per risolvere le equazioni
differenziali.
: produce il calcolo di equazioni differenziali
lineari del primo ordine.
DSolve[A[x]y''[x]+B[x]y’[x]+C[x]y==D[x],y[x],x] : produce il calcolo di equazioni differenziali
lineari del secondo ordine.
DSolve[A[x]y’[x]+B[x]y[x]==D[x],y[x],x]
Esempio 5.9.1
Si calcoli l’equazione differenziale lineare del primo ordine: y'(x) + x y(x) = x .
DSolve@y'@xD + x y@xD x, y@xD, xD
::y@xD → 1 + − 2 C@1D>>
x2
Introduzione all'uso di Mathematica.nb
48
Mathematica produce le soluzioni indicando con C[1] la costante arbitraria di integrazione.
à
Esempio 5.9.2
Si calcoli l’equazione differenziale lineare, del secondo ordine, a coefficienti costanti, non omogenea: y''(x) + 3y'(x)
- 2 y(x) = sen(x) .
DSolve@y''@xD + 3 y '@xD − 2 y@xD Sin@xD, y@xD, xD
3
17
3
17
4 HCos@xD + Sin@xDL
− −
x
− +
x
::y@xD → 2 2
C@1D + 2 2
C@2D +
>>
3 J− 5 + 17 N J5 + 17 N
à
Esempio 5.9.3
Si calcoli l’equazione differenziale, del primo ordine, a variabili separabili: coefficienti costanti, anche non omogenea: y(x) y'(x) = x2 .
DSolve@y@xD y'@xD x^ 2, y@xD, xD
::y@xD → −
2
3
x3 + 3 C@1D >, :y@xD →
2
3
x3 + 3 C@1D >>
à
6 Rappresentazione di curve nel piano e nello spazio e di superfici nello spazio
6.1 Equazioni parametriche di curve in 2 e 3
2 e 3 possono essere opportunamente descritte e rappresentate attraverso equazioni parametriche. In
generale equazioni parametriche di curve in 2 e in 3 sono esprimibili, rispettivamente, come mappe da a 2
(f: Ø2 ) e da a 3 (f: Ø3 ). A seconda dei casi (e comunque nei casi più semplici) le equazioni parametCurve in
riche possono essere espresse in termini di coordinate cartesiane, polari o cilindriche. In Mathematica le equazioni
parametriche vanno scritte utilizzando il simbolo = . La rappresentazione grafica dei supporti delle curve in 2 e in
3 è eseguita in attraverso i comandi parametricPlot e parametricPlot3D , rispettivamente.
: definisce la parametrizzazione di una curva in 2 ;
f:={{x[t],y[t],z[t]},{t,a,b}}
: definisce la parametrizzazione di una curva in 3 ;
parametricPlot[{x[t],y[t]},{t,a,b}]
: produce il sostegno (grafico) di una curva in 2
descritta tramite equazioni parametriche
del tipo f[t]={x[t], y[t]} al variare di t in [a,b];
parametricPlot3D[{x[t],y[t],z[t]},{t,a,b}] : produce il sostegno di una curva in 3 descritta
tramite equazioni parametriche del tipo
f[t]={x[t], y[t], z[t]} al variare di t in [a,b];
f:={{x[t],y[t]},{t,a,b}}
Introduzione all'uso di Mathematica.nb
49
Esempio 6.1.1
Si rappresenti sul piano 2 l'arco spirale di Archimede caratterizzato da due giri e mezzo .
Le equazioni parametriche per la spirale di archimede sul piano possono essere scritte nella seguente forma:
x(t)= t cos(t)
y(t)= t sen(t)
con 0 § t § n 2p dove n rappresenta il numero dei giri della spirale. In particolare nell’esempio considerato vale 0
§ t § (5/2) 2p.
Tradotte in sintassi di Mathematica le equazioni parametriche della spirale si scrivono:
x@t_D = t Cos@tD
t Cos@tD
y@t_D = t Sin@tD
t Sin@tD
e in termini di liste:
spir@t_D = 8t Cos@tD, t Sin@tD<
8t Cos@tD, t Sin@tD<
con 0 § t § 5 p .
La rappresentazione grafica della spirale è data dal sostegno della curva in 2 :
ParametricPlot@8x@tD, y@tD<,
8t, 0, 5 Pi<, PlotStyle −> 8Thick, Red<D
10
5
− 15
− 10
−5
5
10
−5
− 10
A partire dalle equazioni parametriche di una curva è possibile calcolare la sua lunghezza. Per far questo è prima
necessario definire una funzione lunghezza. Tale funzione è esprimibile tramite la seguente stringa di comandi (la si
prenda come definizione):
lungh[curv_,a_,b_]:=Integrate[Simplify[Sqrt[D[curv,t].D[curv,t]]],{t,a,b}]
dove l’espressione curv indica la parametrizzazione della curva eseguita rispetto al parametro t variabile tra gli
estremi a e b .
Introduzione all'uso di Mathematica.nb
50
La lunghezza della spirale è quindi calcolata definendo la funzione lunghezza:
lungh@curv_, a_, b_D :=
Integrate@Simplify@Sqrt@D@curv, tD.D@curv, tDDD, 8t, a, b<D
e applicando tale funzione alle equazioni parametriche della spirale (spir[t]) con estremi a e
b , nel caso
presente, rispettivamente, 0 e 5p :
lungh@spir@tD, 0, 5 PiD
1
5 π 1 + 25 π2 + ArcSinh@5 πD
2
1
5π
2
125.344
NB
1 + 25 π2 + ArcSinh@5 πD F
à
Esempio 6.1.2
L’estensione al caso della spirale rappresentata in 3 è immediata.
Parametrizzazione dell’arco spirale di Archimede in 3 :
x(t) = t cos(t)
y(t) = t sen(t)
z(t) = t
con 0 § t § 5p .
Tradotte in sintassi di Mathematica, le equazioni parametriche della spirale in
seguente:
x@t_D = t Cos@tD
t Cos@tD
y@t_D = t Sin@tD
t Sin@tD
z@t_D = t
t
e tramite liste :
spir@t_D = 8t Cos@tD, t Sin@tD, t<
8t Cos@tD, t Sin@tD, t<
sempre con 0 § t § 5 p .
3 si possono scrivere nella forma
Introduzione all'uso di Mathematica.nb
51
La rappresentazione è data dal sostegno della curva in 3 :
ParametricPlot3D@8x@tD, y@tD, z@tD<,
8t, 0, 5 Pi<, PlotStyle −> 8Thick, Red<D
15
10
5
10
0
-10
0
0
-10
10
La lunghezza della spirale in 3 è calcolata definendo la funzione lunghezza (la stringa continua a valere anche con
curve in 3 ) :
lungh@curv_, a_, b_D :=
Integrate@Simplify@Sqrt@D@curv, tD.D@curv, tDDD, 8t, a, b<D
e applicando tale funzione alle equazioni parametriche della spirale (spir[t]) con estremi a e b , rispettivamente, 0 e 5p :
lungh@spir@tD, 0, 5 PiD
5
5π
F
π 2 + 25 π2 + ArcSinhB
2
2
NB
5
π
2
126.972
2 + 25 π2 + ArcSinhB
5π
2
FF
Appare curioso che la differenza di lunghezza tra la spirale in
intuitivamente ci sarebbe aspettata.
2 e quella in 3 appare minore di quella che
à
6.2 Equazioni parametriche di superfici in 3
Superfici in 3 possono essere opportunamente descritte e rappresentate attraverso equazioni parametriche. In
generale equazioni parametriche di superfici in 3 sono esprimibili come mappe da 2 a 3 (f: 2 Ø3 ). A
seconda dei casi (e comunque nei casi più semplici) le equazioni parametriche possono essere espresse in termini di
coordinate cartesiane, polari o cilindriche. In Mathematica le equazioni parametriche vanno scritte utilizzando il
simbolo = . La rappresentazione grafica dei supporti delle curve in 3 è eseguita tramite l’operatore parametric-
Introduzione all'uso di Mathematica.nb
52
=
parametric-
Plot3D.
f:={{x[u,v],y[u,v],z[u,v]},{u,a,b},{v,c,d}}
definisce la parametrizzazione di una superficie in
:
;
3
parametricPlot3D[x[u,v],y[u,v],z[u,v],{u,a,b},{v,c,d}] :
produce il sostegno di una superficie in 3 descritta tramite equazioni parametriche del tipo
f[u, v]={x[u, v],y[u, v],z[u, v]]} al variare di u in [a,b] e di v in [c,d];
Esempio 6.2.1
Si rappresenti un toro di raggio equatoriale R e raggio meridiano r immerso nello spazio 3 .
La parametrizzazione di un toro di raggio equatoriale R e meridiano r può essere scritta nella forma:
x(u,v) = (R+rcos(u)) cos(v)
y(u,v) = (R+rcos(u)) sen(v)
z(u,v) = sen(u)
con 0 § u § 2p , 0 § v § 2p .
tradotta in sintassi di mathematica (con R=6, r=2):
x@u_, v_D = H6 + 2 Cos@uDL Cos@vD
H6 + 2 Cos@uDL Cos@vD
y@u_, v_D = H6 + 2 Cos@uDL Sin@vD
H6 + 2 Cos@uDL Sin@vD
z@u_, v_D = Sin@uD
Sin@uD
e in termini di liste:
toro@t_D = 8x@u, vD, y@u, vD, z@u, vD<
8H6 + 2 Cos@uDL Cos@vD, H6 + 2 Cos@uDL Sin@vD, Sin@uD<
con 0 § u § 2p , 0 § v § 2p .
La rappresentazione è data dal sostegno della superficie in 3 :
ParametricPlot3D@8x@u, vD, y@u, vD, z@u, vD<,
8u, 0, 2 Pi<, 8v, 0, 2 Pi<D
Introduzione all'uso di Mathematica.nb
53
La rappresentazione del toro eseguita prende in considerazione R e r fissi. Se si vuole considerare R e r come
variabili si deve ridefinire la parametrizzazione della superficie in termini di R e r variabile:
x@R_, r_D = HR + r Cos@uDL Cos@vD
HR + r Cos@uDL Cos@vD
y@R_, r_D = HR + r Cos@uDL Sin@vD
HR + r Cos@uDL Sin@vD
z@R_, r_D = Sin@uD
Sin@uD
A questo punto la rappresentazione di tori caratterizzati da diversi valori di R e r è immediata:
Tori@R_, r_D := ParametricPlot3D@
8x@R, rD, y@R, rD, z@R, rD<, 8u, 0, 2 Pi<, 8v, 0, 2 Pi<D
Tori@6, 5D
à
Esempio 6.2.2
Si realizzi un’animazione della superfie del toro mantenendo di raggio equatoriale R fisso e facendo variare in
modo dinamico il raggio meridiano dal valore iniziale r=1 al valore finale r=6.
Mathematica realizza un’animazione su una determinata superficie utilizzando le equazioni parametriche che
descrivono la superfice stessa e iterando in modo dinamico uno dei parametri che la caratterizzano. Per introdurre
animazioni dinamiche su curve e superfici descritte mediante equazioni parametriche si usa l’operatore Manipulate.
Per realizzare l’animazione richiesta si deve considerare la parametrizzazione (realizzata nell’esempio precedente)
dei tori di raggio equatoriale R e di raggio meridiano r:
x@R_, r_D = HR + r Cos@uDL Cos@vD
HR + r Cos@uDL Cos@vD
y@R_, r_D = HR + r Cos@uDL Sin@vD
HR + r Cos@uDL Sin@vD
Introduzione all'uso di Mathematica.nb
54
z@R_, r_D = Sin@uD
Sin@uD
Tori@R_, r_D := ParametricPlot3D@
8x@R, rD, y@R, rD, z@R, rD<, 8u, 0, 2 Pi<, 8v, 0, 2 Pi<D
(con 0 § u § 2p , 0 § v § 2p )
e utilizzare il comando Manipulate per tenere fisso il raggio equatoriale (R=6) e far scorrere il parametro r (da
r=1 a r=6). Il parametro di finezza dell’animazione è stato posto in modo arbirario uguale a 0.1
Manipulate@Tori@6, rD, 8r, 1, 6, 0.1<D
r
3.
à
6.3 Rappresentazione di curve e superfici in forma implicita
Curve e superfici possono essere descritte anche attraverso equazioni espresse in forma implicita in assenza di
parametrizzazione. Equazioni del tipo f(x, y) = 0 e f(x ,y, z) = 0 possono rappresentare rispettivamente equazioni di
curve in 2 e superfici in 3 . Mathematica è in grado di rappresentare curve e superfici in forma implicita a
condizione di importare un apposito Package (Graphics’ContourPlot3D’) e utilizzando il comando ContourPlot
e ContourPlot3D. Si noti che nelle versioni di Mathematica più recenti il Package è incluso di defaul
all’interno del Kernel e in tal modo non vi è la necessita di eseguire il comando di richiamo.
: carica il package di Mathematica per
rappresentare superfici espresse in forma
implicita (i.e. da equazioni del tipo
f(x, y, z) = 0) ;
ContourPlot3D[f(x,y,z),{x,a,b},{y,c,d},{z,e,f}] : produce il grafico di una superficie in 3
espressa in forma implicita ;
<<Graphics’ContourPlot3D’
Introduzione all'uso di Mathematica.nb
55
Esempio 6.3.1
Si rappresenti la superficie della sfera descritta in forma implicita dall’equazione x2 + y2 + z2 = 4 e la si intersechi
con il piano z = x - y.
L’equazione che rappresenta in forma implicita la superfice sferica si scrive: x2 + y2 + z2 - 4 = 0. Il grafico dell’equazione in questione si ottiene con la seguente stringa di comando:
ContourPlot3D@x^2 + y^2 + z^2 − 9 0,
8x, − 3, 3<, 8y, −3, 3<, 8z, −3, 3<D;
L’equazione che rappresenta in forma implicita il piano si scrive: z - x + y = 0. Il grafico dell’equazione in questione si ottiene con la seguente stringa di comando:
ContourPlot3D@−x + y + z == 0, 8x, − 3, 3<, 8y, −3, 3<, 8z, −3, 3<D;
L’intersezione tra due superfici generiche si ottiene in modo semplice con il comando Show[s1, s2] dove con s1 e
s2 si sono indicate le stringhe di rappresentazione ContourPlot3D delle due superfici.
s1 = ContourPlot3D@x^2 + y^2 + z^2 − 9 0,
8x, −3, 3<, 8y, −3, 3<, 8z, − 3, 3<D;
s2 = ContourPlot3D@−x + y + z == 0,
8x, −3, 3<, 8y, −3, 3<, 8z, − 3, 3<D;
Show@s1, s2D
à
6.4 Rappresentazione di funzioni a più variabili
E’ noto che una funzione a due variabili f(x, y) è rappresentata da una superficie in 3 . In Mathematica la rappresentazione di una funzione f[x,y] in 3 è eseguita utilizzando l’operatore Plot3D. La sintassi richiesta nei comandi
di input segue sostanzialmente quella già vista, con l’operatore Plot, per la rappresentazione dei grafic delle
funzioni f[x] ad una variabile. Gli argomenti inseriti nelle parentesi quadre dell’operatore Plot3d devono ovviamente tenere conto del dominio di entrambe le variabili x e y.
Plot[{f[x]},{x,a,b}]
Plot3D[{f[x,y]},{x,a,b},{y,c,d}]
: produce il grafico della funzione f[x] nei domini [a,b] della
variabile indipendenti x;
: produce il grafico della funzione f[x,y] nei domini [a,b] e [c,d]
della variabili indipendenti x e y , rispettivamente;
Introduzione all'uso di Mathematica.nb
56
Esempio 6.4.1
Si rappresenti la funzione f(x,y) = x 2 - 2y2 - 5xy nel dominio C={(x,y) t.c. °x2 + y2 § 0.1 †} . La funzione f mappa punti
da C Õ 2 su 3 ed è rappresentabile da una superfice nello spazio 3 .
Dopo aver definito opportunamente la funzione la rappresentazione di f(x,y) è immediata nell’insieme Q del piano
xy corrispondente al quadrato di lato 6 e centrato sull’origine (insieme Q={(x,y) t.c. † x † § 3 † , †y † § 3 † }.
f@x_, y_D := 8 x^ 2 − 3 y^ 2 − 10 x y
f@x, yD
8 x2 − 10 x y − 3 y2
Plot3D@f@x, yD, 8x, −1, 1<, 8y, −3, 3<D
La rappresentazione di f(x,y) nel dominio C è più complicata. Per avere il grafico di f nel cerchio di raggio R=0.1
(insieme di punti C) è necessario parametrizzare f sui punti del cerchio espressi per semplicità in coordinate polari.
La rappresentazione della superficie di f espressa in forma parametrica è eseguita tramite il comando ParametricPlot.
x@r_, θ_D = r Cos@θD
r Cos@θD
y@r_, θ_D = r Sin@θD
r Sin@θD
In termini di liste la parametrizzazione può essere riscritta come segue:
sup@r_, θ_D = 8r Cos@θD, r Sin@θD<
8r Cos@θD, r Sin@θD<
con 0≤r≤0.01 e 0≤θ<5π.
Introduzione all'uso di Mathematica.nb
57
Alla fine la rappresentazione della funzione f(x,y) nel dominio C diventa:
ParametricPlot3D@8x@r, θD, y@r, θD, f@x@r, θD, y@r, θDD<,
8r, 0, 0.1<, 8θ, 0, 2 Pi<, PlotPoints −> 820, 30<D
à
Scarica