Le package TraceGraphiques procure un jeu de procédures pour faciliter la confection de graphiques incluant
	des fonctions qui ne sont pas définies partout ou qui possèdent des discontinuités;
	des droites;
	des surfaces hachurées;
	etc.

Les fonctions sont définies sur une liste d'intervalles de continuité  ]  (Subscript[a, 1]), (Subscript[b, 1])[, ]  (Subscript[a, 2]), (Subscript[b, 2])[, ..., ]  (Subscript[a, n]), (Subscript[b, n])[ qu'en Mathematica on écrit sous la forme

{{(Subscript[a, 1]), (Subscript[b, 1])}, {(Subscript[a, 2]), (Subscript[b, 2])}, ..., {(Subscript[a, n]), (Subscript[b, n])}}

<<TraceGraphiques`

L'utilisateur a maintenant accès aux fonctions graphiques supplémentaires suivantes :

Names["TraceGraphiques`*"]

Motivation

La fonction Plot[f[x],{x,a,b}] trace le graphique de la fonction f qui est DEFINIE sur l'intervalle[a; b] et qui est CONTINUE sur cet intervalle. La fonction Plot[..] donne donc des résultats qui ne sont pas satisfaisants lorsque la fonction n'est pas définie partout ou n'est pas continue partout. Voici quelques exemples.

Plot[(1/(x-2)),{x,-1,5},ImageSize->{300,200}]

La droite verticale x = 2 ne devrait pas être dessinée en trait continu car elle n'appartient pas au graphique de la fonction.

Plot[{-(Sqrt[x]),(Sqrt[x+1])},{x,-1,8},ImageSize->{300,200}]

Des messages sont affichés car la fonction  - (Sqrt[x]) n'est pas définie entre -1 et 0.

Plot[Floor[x],{x,-1,4},ImageSize->{300,200}]

Floor[x] désigne la partie entière de x. Par exemple, Floor[2.99] = 2 et Floor[3] = 3.
La figure dessinée est incorrecte car Floor est une fonction discontinue.

Une fonction définie sur ]-∞, ∞[

?fenetre

?fonction

?dessine

Clear[f];
f[x_]:=(x^3)-5 x+1

Liste des intervalles de continuité de f :

intCont={{-∞,∞}}

fenetre[-3,3,-8,8]

g1=fonction[f, intCont]

dessine[g1];

Une fonction en escalier

f(x )   =      partie entière de x        =         Floor[x]

Liste des intervalles de continuité de f :

intCont=Table[{i,i+1},{i,-2,7}]

fenetre[-2,8,-2,8]

g1=fonction[Floor,intCont]

dessine[g1,AspectRatio->Automatic];

Une fonction avec asymptotes verticale et horizontale

Clear[f];
f[x_]:=((x-2)/(x-3))

Liste des intervalles de continuité de f :

intCont={{-∞,3},{3,∞}}

fenetre[1,5,-8,10]

dessine[fonction[f,intCont],
	droite[-1,0,3,Dashing[{0.01,0.01}]],
	droite[0,-1,1,Dashing[{0.01,0.01}]]];

Une fonction définie sur un intervalle

Clear[f];
f[x_]:=(Sqrt[x+1])

Liste des intervalles de continuité de f :

intCont={{-1,∞}}

fenetre[-2,10,-2,10]

g1=fonction[f,intCont]

dessine[g1];

Une fonction possédant une accumulation dénombrable de discontinuités

Clear[h];
h[x_]:=x*Floor[(1/x)]

Liste (finie) d'intervalles de continuité de h :

intCont=Join[Table[{(1/(k+1)),(1/k)},{k,1,100}],
Table[{((-1)/k),((-1)/(k+1))},{k,1,100}]];

fenetre[-1,1,0,2]

g1=fonction[h,intCont]

dessine[g1];

Graphique de plusieurs fonctions dont l'une en traitillé :

Clear[f,g];
f[x_]:=(x^2)+(1/x);
g[x_]:=(x^2)

fenetre[-3,3,-8,10]

dessine[fonction[f,{{-∞,0},{0,∞}}],
	fonction[g,{{-∞,∞}},PlotStyle->Dashing[{0.02,0.01}]]];

Graphique d'une famille de fonctions

Clear[f,m];
f[x_]:=m (x^2)

fenetre[-4,4,-4,4]

dessine[Table[fonction[f,{{-∞,∞}}],{m,-2,2,(1/2)}]];

Graphique avec textes

La fonction dessine accepte tous les objets Mathematica de type Graphics.

Clear[f];
f[x_]:=(x^3)-5 x+1

fenetre[-3,3,-8,8]

g1=fonction[f,{{-∞,∞}}]

g2=Graphics[{Text["(Subscript[x, 1])",{-2.4,0},{0,-1}],
			Text["(Subscript[x, 2])",{0.25,0},{0,-1}],
			Text["(Subscript[x, 3])",{2.05,0},{0,-1}]}]

dessine[g1,g2];

Hachures

Motivation
Les surfaces grisées passent mal  à la photocopieuse. 
Par contre, les surfaces hachurées passent sans problème.

Clear[f,g];
f[x_]:=(x/2)-1;
g[x_]:=4-(x^2)

fenetre[-3,3,-2,4]

?hachure

Plus précisément, la surface hachurée est, respectivement,

S={(x,y)|a≤x≤b ∧   f(x)≤y≤g(x) }⋂ ([xmin,xmax]×[ymin, ymax])

S={(x,y)|a≤x≤b ∧   0≤y≤g(x) }⋂ ([xmin,xmax]×[ymin, ymax])

g1=hachure[f,g,-1,∞]

g2=fonction[f,{{-∞,∞}}]

g3=fonction[g,{{-∞,∞}}]

dessine[g1,g2,g3];

g4=hachure[g,0,∞]

dessine[g2,g4];

Remarque
	Attention, les surfaces hachurées produisent des fichiers volumineux !

Hachures délimitées par des familles de fonctions

On peut remplacer la fonction inférieure ou supérieure par une liste de fonctions {(Subscript[f, 1,]) (Subscript[f, 2]), ...}, {(Subscript[g, 1,]) (Subscript[g, 2]), ...}.

S={(x,y)|a≤x≤b ∧  (Subscript[f, 1])(x)≤y   ∧  (Subscript[f, 2])(x)≤y   ∧  ... ∧   y≤(Subscript[g, 1])(x) ∧   y≤(Subscript[g, 2])(x) ∧  ...}⋂ ([xmin,xmax]×[ymin, ymax])

S={(x,y)|a≤x≤b ∧   0≤y ∧  y≤(Subscript[g, 1])(x) ∧   y≤(Subscript[g, 2])(x) ∧  ... }⋂ ([xmin,xmax]×[ymin, ymax])

Il n'est ainsi pas nécessaire de calculer les points d'intersections.

Clear[f,g,h];
f[x_]:=4-x;
g[x_]:=3x+6;
h[x_]:=(1/4)x-1;

fenetre[-5,5,-3,7,{300,300}];
dessine[hachure[h,{f,g},-∞,2],
	                fonction[f,{{-∞,∞}}],
								fonction[g,{{-∞,∞}}],
	                fonction[h,{{-∞,∞}}],
							  AspectRatio->Automatic];

Hachures horizontales délimitées par deux ensembles d'équations

eg[x_,y_]:=y==g[x]

ed[x_,y_]:=y==f[x]∨y==h[x]

fenetre[-5,5,-3,7,{300,300}];
dessine[hachureHoriz[eg,ed,-∞,2],
	                fonction[f,{{-∞,∞}}],
								fonction[g,{{-∞,∞}}],
	                fonction[h,{{-∞,∞}}],
							  AspectRatio->Automatic];

fenetre[-5,5,-3,7,{300,300}];
dessine[hachure[h,{f,g},-∞,∞],
	              hachureHoriz[eg,ed,-∞,∞],
	                fonction[f,{{-∞,∞}}],
								fonction[g,{{-∞,∞}}],
	                fonction[h,{{-∞,∞}}],
							  AspectRatio->Automatic];

Taille de l'image

Par défaut, la taille de l'image est
		ImageSize->{500,500}
On peut modifier cette taille à l'ouverture d'une nouvelle fenêtre.
La trame du hachurage s'adapte automatiquement à la dimension de la fenêtre.

Clear[f,g];
f[x_]:=(x/2)-1;
g[x_]:=4-(x^2)

fenetre[-3,3,-2,4,{200,200}];

dessine[	hachure[f,g,-1,∞],
	                  fonction[f,{{-∞,∞}}],
									fonction[g,{{-∞,∞}}]
								];

Clear[f,g,ed,eg];
f[x_]:=-(Sqrt[1-(((x-(1/2)))^2)]);
g[x_]:=(Sqrt[1-(((x-(1/2)))^2)]);
eg[x_,y_]:=x==-(1/2)-(Sqrt[1-(y^2)]);
ed[x_,y_]:=x==-(1/2)+(Sqrt[1-(y^2)]);

fenetre[-2,2,-1,1,{400,200}];
dessine[hachure[f,g,(1/2)-1,(1/2)+1],
	              hachureHoriz[eg,ed,-1,1],
	                Graphics[{Circle[{-(1/2),0},1],Circle[{(1/2),0},1],
		Text["A",{-0.75,0}],Text["B",{0.75,0}],Text["A⋂B",{0,0}]}],
							  Axes->None,AspectRatio->Automatic];