FUNZIONI E GRAFICI

FUNZIONI E GRAFICI
Definizione di funzione
In Maple si possono utilizzare molte funzioni predefinite facendo riferimento semplicemente al
loro nome.
> restart:ln(1);sqrt(3);arcsin(sqrt(2)/2);exp(0);
> sqrt(24);
> sin(Pi/4);
> evalf(%);
> arctan(1);
> evalf(%);
> Re(3+I*5);
> Im(3+I*5);
Per creare altre funzioni che permettano di utilizzare la notazione funzionale f( x ), si utilizza
l'operatore -> .
> restart:
> h(x):=2*x+1;
> h(1);
> f:=x->x^2; #definizione di funzione
> f(0),f(1),f(2),f(3);
> g:=(x,y,z)->x+y+z;
> g(0,0,0),g(1,0,0),g(0,2,0);
Tabulazione di funzioni
Per tabulare una funzione su un insieme di valori si usa il comando map
In generale, l'istruzione map applica una funzione simultaneamente a tutti gli elementi di
qualsiasi lista.
> restart:
> f:=x->x^2;
> vals:=[1,2,3,4];
> map(f,vals);
>
> vals1:=[seq(1/i,i=1..5)];
> map(f,vals1);
>
> a:=1:b:=5:n:=6:
> vet:=[seq(a+i*(b-a)/n,i=0..3)];
> map(f,vet);
> seq(f(i),i=vet);
Plot di funzioni
Creare il grafico di una funzione equivale a costruire una rappresentazione grafica di una
tabulazione.
I grafici bidimensionali, o 2D, sono creati con il comando plot, la cui sintassi è
1
plot(f,h,v,o)
dove
-f è un'espressione oppure il nome di una funzione;
- h è un intervallo sull'asse x, espresso nella forma name= low...high;
- v (opzionale) è un intervallo sull'asse y, espresso nella forma name=low...high;
- o è un'opzione espressa come una sequenza opt1=value,opt2=value,....
L'intervallo h può essere anche illimitato e in tal caso, per definirlo, si usano le costanti
-infinity e infinity.
Quando il grafico appare troppo compresso o dilatato, è conveniente definire un intervallo v
anche per l'asse verticale .
Normalmente plot sceglie scale diverse per gli assi, per avere scale uguali si può selezionare
l'icona 1:1, nella barra dei menu, o immettere l'opzione scaling=constrained . Per
default scaling=unconstrained.
> restart;
> f:=x->cos(2*x)-sin(x);
> plot(f(x),x=-Pi..Pi);
> plot(f(x),x=-Pi..Pi,y=0..1);
>
(x − 1)
Modi equivalenti per produrre il grafico di f( x ) = e
( 2 x − 1 ) in [ −2, 2 ]:
> restart:
Si plotta una espressione
> plot(exp(x-1)*(2*x-1), x=-2..2);
Si plotta una espressione assegnata
> y:=exp(x-1)*(2*x-1);
> plot(y,x=-2..2);
Si plotta una funzione
> f:=x->exp(x-1)*(2*x-1);
> plot(f(x),x=-2..2);
Tutte le opzioni previste dal comando plot possono essere visualizzate digitando
?plot,options.
> plot(sin(x)^2,x=0..2*Pi,axes=FRAME,color=magenta,labels=[x,y]
, title="PROVA
GRAFICA",titlefont=[HELVETICA,OBLIQUE,15],style=point,symbol=
cross,legend="funzione sin(x)^2");
Esercizio (Definizione e uso di funzione)
Definire una funzione che rappresenta la distanza tra due punti (x1, y1) e (x2, y2) e usarla per
calcolare la distanza tra (2,3) e (8,11).
Soluzione
> restart;
> dist2:=(x1,y1,x2,y2)->sqrt((x1-x2)^2+(y1-y2)^2);
> dist2(2,3,8,11);
Esercizio (Definizione di funzione e grafico)
2
Definire in Maple la funzione dis( x ) = x3 + x2 + x + 1 e valutarla in x = 1 e x = −1. Tracciarne il
grafico nell'intervallo [-1,1].
Soluzione
> restart;
> dis:=x->x^3+x^2+x+1;
> dis(-1);dis(1);
> plot(dis(x),x=-1..1);
Esercizio (Definizione di funzione e grafico)
a) Rappresentare la funzione y =
1
(Sugg: utilizzare l'opzione discont per plot, dal
x
momento che la curva è discontinua).
2
( −x )
b) Rappresentare la funzione f( x ) = e
per −∞ < x < ∞ .
Soluzione
a)
> restart:plot(1/x,x,y=-10..10,discont=true);
b)
> g:=exp(-x^2);
> plot(g(x),x=-infinity..infinity);
>
Funzioni con discontinuità
I grafici di funzioni non continue richiedono maggiore attenzione, perchè Maple disegna delle
linee verticali vicino ai punti di discontinuità. Per ovviare a ciò si inserisce, nell'istruzione plot,
l'opzione discont=true.
La funzione che proviamo a disegnare ha una singolarità ed assume valori che tendono ad
infinito. Per tale funzione è opportuno inserire nel plot un range di variazione anche sull'asse y.
> restart;
> y:=x->(x^5-4*x^2+1)/(x-1/2);
> plot(y(x),x=-3..3);
> plot(y(x),x=-10..10);
# l'asintoto sembra essere sparito
> plot(y(x),x=-3..3,y=-50..50);
> plot(y(x),x=-3..3,y=-50..50,discont=true);
Esempio
La funzione tangente ha infinite singolarità in x=Pi/2+k*Pi.
> plot(tan(x),x=-2*Pi..2*Pi);
> plot(tan(x),x=-2*Pi..2*Pi,y=-4..4);
> plot(tan(x),x=-2*Pi..2*Pi,y=-4..4, discont=true);
Funzioni definite a tratti
3
Spesso in matematica si incontrano funzioni definite da espressioni analitiche non uguali in
sottointervalli diversi dell'asse reale.
Per tali funzioni si usa il comando piecewise, la cui sintassi è
piecewise(cond_1,f_1,cond_2,f_2,...,cond_n,f_n,f_otherwise)
dove
- cond_1,cond_2,...,cond_n sono le condizioni per le quali sono definite
rispettivamente le funzioni f_1,f_2,...,f_n;
- f_otherwise è la definizione della funzione se le condizioni
cond_1,cond_2,...,cond_n non sono verificate. Se f_otherwise non è specificato
dall'utente, per default Maple assegna alla funzione valore 0.
> restart:
> f:=piecewise(x<0,1+x,x>0,1-x);
> simplify(%);
> f(1);
> plot(f(x),x=-3..3);
Per poter valutare la funzione in un punto
> f1:=x->piecewise(x<=0,1+x,x>0,1-x);
> plot(f1,-3..3);
>
> g:=piecewise(x<=-1,1,x>=-1 and x<=1,1-x^2,2);
> plot(g(x),x=-5..10);
> plot(g(x),x=-5..10,discont=true);
Grafici multipli
Per plottare più di una funzione nello stesso grafico, basta plottare una lista di funzioni.
Esempio
>
>
>
>
restart;
y1:=sin(x);
y2:=x-x^3/3!+x^5/5!;
plot([y1,y2],x=0..2*Pi,title="Grafici
Multipli",color=[blue,red],style=[line,point],legend=["fun
zione seno","polinomio di Taylor di grado 3"]);
Per visualizzare più grafici contemporaneamente nello stesso sistema di riferimento, bisogna
assegnare un nome ad ogni singolo grafico, realizzato mediante una istruzione plot.
Il comando per visualizzare i grafici è display che fa parte della libreria plots e la cui
sintassi è
display(L,insequence=true,opts)
Esempio
>
>
>
>
>
restart:with(plots):
p1:=plot(x,x=-10..10):
p2:=plot(exp(x)+3,x=-5..5):
display(p1,p2);
restart;
4
> z1:=sin(x):z2:=cos(x):
> plot({z1,z2}, x=-Pi..Pi,style=[point,line]);
________________________________________________________________________
__________________________________
> restart;
> p1 := plot(sin(x), x=-Pi..Pi, style=point):
p2 := plot(cos(x), x=-Pi..Pi, style=line):
plots[display]({p1,p2});
________________________________________________________________________
__________________________________
> y1:=sin(x):
> y2:=x-x^3/3!+x^5/5!:
> p1:=plot(y1,x=0..2*Pi,y=-1..1):
> with(plots): # In alternativa a plots[display]
> display(p1,title="sin(x)"):
> p2:=plot(y2,x=0..2*Pi,y=-1..1):
> display({p1,p2},title="display grafici multipli");
>
4.9 Inserimento di testo in un grafico
Per inserire un testo in un grafico si utilizza il comando textplot, la cui sintassi è
textplot([x-coord, y-coord, "text"])
Esempio
> restart:with(plots):
> p1:=plot(sin(x)^2,x=0..2*Pi,axes=FRAME, color=magenta,
labels=[ascisse,ordinate],title="PROVA
GRAFICA",titlefont=[HELVETICA,OBLIQUE,15]):
> p2:=textplot([Pi/2,1.1,"massimo"]):
> p3:=textplot([Pi,0.1,"minimo"]):
> display([p1,p2,p3]);
Esercizio
Plottare il grafico di y = x2 nell'intervallo [−4, 4] e il grafico di y = sin( x ) nell'intervallo [0, 2 π
], nello stesso sistema di riferimento.
Soluzione
> restart;with(plots):
> gr1:=plot(x^2,x=-4..4,color=magenta,thickness=4,style=poin
t,symbol=box,legend="parabola"):
> gr2:=plot(sin(x),x=0..2*Pi,color=blue,thickness=2,style=po
int,symbol=cross,legend="seno"):
> display(gr1,gr2,title="Parabola e
seno",titlefont=[COURIER,BOLD,12],axes=NORMAL);
Esercizio
Plottare nello stesso sistema di riferimento in colori diversi le funzioni
5
y = sin( x ), y = sin( 2 x ), y = sin( 3 x ), nell'intervallo [−π, π].
Soluzione
> restart;
> plot([sin(x),sin(2*x),sin(3*x)],x=-Pi..Pi,color=[green,blu
e,red],legend=["sin(x)","sin(2x)","sin(3x)"]);
Funzioni parametriche
Per disegnare una curva parametrica si usa il comando
plot([fh,fv,t=range],opts)
dove
- fh,fv definiscono le equazioni parametriche, rispettivamente rispetto all'asse orizzontale e a
quello verticale, della funzione;
- t è il parametro;
- range è l'intervallo di variazione del parametro;
- opts sono le opzioni di plot.
Esempio
Equazione parametrica della circonferenza con centro nell'origine e raggio 1.
> restart;
> x:=cos(t); y:=sin(t);
> plot([x,y,t=0..Pi/2]);
> plot([x,y,t=0..Pi]);
> plot([x,y,t=0..2*Pi]);
>
Equazione parametrica della circonferenza con centro in (3,5) e raggio 0.5.
> restart;
> x:=3+0.5*cos(t): y:=5+0.5*sin(t):
> plot([x,y,t=0..2*Pi], scaling=CONSTRAINED);
Esempio
Equazione parametrica della retta passante per (1, −1) e direzione data dal vettore v=(3, 2).
> restart;
> x:=1+3*t; y:=-1+2*t;
> plot([x,y,t=-2..2]);
Esercizio (Funzioni parametriche)
a) Rappresentare la funzione parametrica x = cos( t ), y = sin( t ) per t ∈ [ 0, 2 π ]. Che forma
ha il grafico?
b) Rappresentare le funzioni y = cos( t ) e y = sin( t ), per t ∈ [ 0, 2 π ], nello stesso grafico.
Qual è la differenza tra questo grafico e quello precedente?
Soluzione
a)
> x:=cos(t):y:=sin(t):
> plot([x,y,t=0..2*Pi],scaling=CONSTRAINED,title="Eq.para
metrica della circonferenza");
6
b)
> f:=t->cos(t):g:=t->sin(t):
> plot({f(t),g(t)},t=0..2*Pi,title="funzioni seno e
coseno");
Esercizio (Funzioni parametriche)
La curva tracciata da un punto su un cerchio, quando questo si muove lungo una retta, è
chiamata cicloide. Le equazioni parametriche della cicloide sono
x = r ( θ − sin θ )
y = r ( 1 − cos θ )
essendo r il raggio del cerchio. Disegnare la cicloide determinata da un cerchio di raggio 1
che compie 4 giri completi.
Soluzione
> x:=r*(t-sin(t)):y:=r*(1-cos(t)):r:=1:
> plot([x,y,t=0..8*Pi],scaling=CONSTRAINED);
4.11 Grafici di funzioni implicite
L'equazione di una curva piana si presenta spesso nella forma F( x, y ) = 0 con F funzione reale
in un sottoinsieme di R2 .
Ad esempio y − ax2 = 0 definisce l'equazione di una parabola con l'asse di simmetria parallelo
all'asse delle y, mentre x − ay2 = 0 definisce l'equazione di una parabola con l'asse di simmetria
parallelo all'asse delle x. Però mentre nel primo caso ad ogni x corrisponde un unico y e ciò vuol
dire che l'equazione definisce implicitamente una funzione, nel secondo caso l'equazione
x − ay2 = 0 non determina univocamente y in funzione di x.
In entrambi i casi Maple permette di disegnare la curva definita implicitamente. Il comando
utilizzato per il grafico di funzioni implicite è implicitplot, della libreria plots, la cui
sintassi è
implicitplot(f,x=a..b,y=c..d,opts)
dove
- f è l'equazione che definisce la curva;
- a,b definiscono il range di variazione della variabile x;
- c,d sono gli estremi di variazione della variabile y;
- opts sono le opzioni del comando plot.
> restart:with(plots):
> implicitplot(y^3+x*y=1,x=-10..10,y=-3..3,numpoints=1000);
> implicitplot(x^2+y^2=1,x=-1..1,y=-1..1,scaling=constrained);
> implicitplot(x^2/4+y^2/2=3,x=-10..10,y=-3..3);
> implicitplot(x^2/4-y^2/2=3,x=-10..10,y=-3..3);
A volte è necessario intervenire sulla qualità del grafico
> implicitplot(cos(x)^2=sin(y)^2,x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=300);
7
> implicitplot(cos(x)^2=sin(y)^2,x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=500);
> implicitplot(cos(x)^2=sin(y)^2,x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=1000);
> implicitplot(cos(x)^2=sin(y)^2,x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=5000);
____________________________________________________________________________
________________________
> implicitplot(cos(x^2)=sin(y^2),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=100);
> implicitplot(cos(x^2)=sin(y^2),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=500);
> implicitplot(cos(x^2)=sin(y^2),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=1000);
> implicitplot(cos(x^2)=sin(y^2),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=5000);
> implicitplot(cos(x^2)=sin(y^2),x=-2*Pi..2*Pi,y=-2*Pi..2*Pi,nu
mpoints=10000);
4.12 Rappresentazione di dati discreti
Per rappresentare dati discreti bisogna creare una lista di liste, ciascuna delle quali contiene le
coordinate di un punto.
Esempio
> restart;
> l:=[[1,2],[2,1],[5,1],[0,0]];
> plot(l,style=point);
Per scegliere lo stile e la dimensione dei punti
> plot(l,style=point,symbol=circle,symbolsize=25);
Omettendo l'opzione style=point e di conseguenza anche le altre opzioni, i punti
vengono uniti da una linea retta, nell'ordine in cui compaiono nella lista.
> plot(l);
Per plottare un poligono chiuso
> l2:=[[1,2],[2,1],[5,1],[0,0],[1,2]]:
> plot(l2);
Si può anche utilizzare il comando
pointplot(L,opts)
della libreria plots, dove
> restart; with(plots):
> l:=[[1,2],[2,1],[5,1],[1,-2]];
> pointplot(l,symbol=CROSS,symbolsize=20);
In questo caso è superflua l'opzione style=point, e si può aggiungere style=line se
si vogliono unire i punti con una linea retta.
>
Esercizio (Plot di dati discreti)
8
Plottare la lista dei quadrati degli interi positivi da 1 a 20.
Soluzione
> punti:=[seq([k,k^2],k=1..20)];
> plot(punti,style=point,symbol=box,title="Quadrati
interi positivi 1-20");
oppure usando la libreria plots
> with(plots):
> punti:=[seq([k,k^2],k=1..20)];
> pointplot(punti,symbol=box,symbolsize=20);
>
>
9