Tracé de fonctions discontinues
Modérateur : xcasadmin
Tracé de fonctions discontinues
Bonjour,
je cherche à tracer des fonctions porte définies à l'aide de piecewise. Mais je n'arrive pas à supprimer les segments verticaux. Sous maple, il suffit d'ajouter discont=true. Y-a-t'il une option permettant de faire la même chose sous xcas ?
Merci d'avance pour vos réponses.
Lionel
je cherche à tracer des fonctions porte définies à l'aide de piecewise. Mais je n'arrive pas à supprimer les segments verticaux. Sous maple, il suffit d'ajouter discont=true. Y-a-t'il une option permettant de faire la même chose sous xcas ?
Merci d'avance pour vos réponses.
Lionel
Re: Tracé de fonctions discontinues
Non, en fait le moteur de calcul essaie de reperer les discontinuites tout seul. Quelle est votre fonction?
Re: Tracé de fonctions discontinues
C'est la fonction indicatrice qui vaut 1 sur l'intervalle réel [-a;a] et 0 ailleurs. J'aimerais enlever les segments verticaux en -a et a.
Pour a=2, j'ai fait :
porte1:=unapply(piecewise(x<=-a,0,x<a,1/2/a,0),x);
Lionel
Pour a=2, j'ai fait :
porte1:=unapply(piecewise(x<=-a,0,x<a,1/2/a,0),x);
Lionel
Re: Tracé de fonctions discontinues
En fait le test de discontinuite n'est pas adapte aux fonctions definies par morceaux, il est prevu pour les singularites. Je vais reflechir a ce que je peux faire pour piecewise.
Re: Tracé de fonctions discontinues
Merci d'avance.
Lionel
Lionel
Re: Tracé de fonctions discontinues
salut,
un de mes anciens programmes dont voici le code me semble encore marcher
On peut le trouver ici
https://drive.google.com/drive/folders/ ... 1ZvUWE3UWs
Il s'agit de GrapheFonctionIntervalles
un de mes anciens programmes dont voici le code me semble encore marcher
On peut le trouver ici
https://drive.google.com/drive/folders/ ... 1ZvUWE3UWs
Il s'agit de GrapheFonctionIntervalles
Code : Tout sélectionner
/******************************************************************
********** Graphe d'une fonction définie par intervalles **********
******************************************************************/
/* A mettre en ligne */
// f(x):=piecewise(x<=0,3+sqrt(-x),x<1,2x+3,x<3,-x+5,x<=7,x,5);GraphePiecewise(f);
// f(x):=piecewise(x<-2,undef,x<=0,3+sqrt(-x),x<1,2x+3,x<3,-x+5,x<=7,x,undef);GraphePiecewise(f);
// undef seulement aux extremites
Rayon():={ // détermination du rayon des demi-cercles
/*on cherche la longueur minimale des segments en excluant les extrémités*/
local k,X1,Y1,X2,Y2,L,T,s;
L:=NULL;
T:=f(x);
s:=size(f(x));
si s=3 alors
return 2;//modifier 2 ?
fsi;
si s>=4 alors
pour k de 1 jusque (s-3)/2 faire
X1:=T[2k-1][1];
X2:=T[2k+1][1];
Y1:=subst(T[2k+2],x=X1);
Y2:=subst(T[2k+2],x=X2);
L:=L,longueur(point(X1,Y1),point(X2,Y2));
fpour;
si s<8 alors return min(L)/10;sinon return min(L)/5;fsi;
//modifier 8,10,5 ?
fsi;
}
:;
Demi_cercle_gauche(a,E,b):={
local R,m,A,C;
R:=Rayon();
m:=evalf(subst(diff(E,x),x=a));
A:=point(a,subst(E,x=a));
//tester si m=undef ou m=inf
si type(m)!=DOM_IDENT et type(m)!=DOM_SYMBOLIC alors
C:=point(a-R/sqrt(1+m^2),subst(E,x=a)-R*m/sqrt(1+m^2));
return plot(E,x=a..b),cercle(C,R,-pi/2+arctan(m),pi/2+arctan(m));
sinon
si subst(E,x=a)-subst(E,x=a+0.001)<0 alors
m:=inf;
C:=point(a,subst(E,x=a)-R);
return plot(E,x=a..b),cercle(C,R,-pi/2+arctan(m),pi/2+arctan(m));
sinon
m:=inf;
C:=point(a,subst(E,x=a)+R);
return plot(E,x=a..b),cercle(C,R,-pi/2-arctan(m),pi/2-arctan(m));
fsi;
fsi;
}
:;
Demi_cercle_droite(a,E,b):={
local R,m,B,C;
R:=Rayon();
m:=evalf(subst(diff(E,x),x=b));
B:=point(b,subst(E,x=b));
//tester si m=undef ou m=inf
si type(m)!=DOM_IDENT et type(m)!=DOM_SYMBOLIC alors
C:=point(b+R/sqrt(1+m^2),subst(E,x=b)+R*m/sqrt(1+m^2));
return plot(E,x=a..b),cercle(C,R,pi/2+arctan(m),3*pi/2+arctan(m));
sinon
si subst(E,x=b-0.001)-subst(E,x=b)>0 alors
m:=inf;
C:=point(b,subst(E,x=b)-R);
return plot(E,x=a..b),cercle(C,R,-pi/2+arctan(m),pi/2+arctan(m));
sinon
m:=inf;
C:=point(b,subst(E,x=b)+R);
return plot(E,x=a..b),cercle(C,R,-pi/2-arctan(m),pi/2-arctan(m));
fsi;
fsi;
}
:;
GraphePiecewise(f):={
local T,s,L,k;
affichage(epaisseur_ligne_3);
T:=f(x);L:=NULL;
s:=size(f(x));
si s==3 alors
si simplifier(subst(T[2],x=T[1][1])-subst(T[3],x=T[1][1]))!=0 et T[1][0]=='>' alors
L:=L,Demi_cercle_droite(T[1][1]-5,T[2],T[1][1]);
fsi;
si simplifier(subst(T[2],x=T[1][1])-subst(T[3],x=T[1][1]))!=0 et T[1][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[1][1],T[3],T[1][1]+5);
fsi;
return L:=L,plot(T[2],x=T[1][1]-5..T[1][1]),plot(T[3],x=T[1][1]..T[1][1]+5);
fsi;
si s>=4 alors
si T[2]!=undef alors
si simplifier(subst(T[2],x=T[1][1])-subst(T[4],x=T[1][1]))!=0 et T[1][0]=='>' alors
L:=L,Demi_cercle_droite(T[1][1]-5,T[2],T[1][1]);
fsi;
L:=L,plot(T[2],x=T[1][1]-5..T[1][1]);
fsi;
si T[s]!=undef alors
si simplifier(subst(T[s-1],x=T[s-2][1])-subst(T[s],x=T[s-2][1]))!=0 et T[s-2][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[s-2][1],T[s],T[s-2][1]+5);
fsi;
L:=L,plot(T[s],x=T[s-2][1]..T[s-2][1]+5);
fsi;
si simplifier(subst(T[s-1],x=T[s-2][1])-subst(T[s],x=T[s-2][1]))!=0 et T[s-2][0]=='>' alors
L:=L,Demi_cercle_droite(T[s-4][1],T[s-1],T[s-2][1]);
fsi;
pour k de 2 jusque (s-1)/2 faire
si simplifier(subst(T[2k-2],x=T[2k-3][1])-subst(T[2k],x=T[2k-3][1]))!=0 et T[2k-3][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[2k-3][1],T[2k],T[2k-1][1]);
fsi;
si k!=(s-1)/2 alors
si simplifier(subst(T[2k],x=T[2k-1][1])-subst(T[2k+2],x=T[2k-1][1]))!=0 et T[2k-1][0]=='>' alors
L:=L,Demi_cercle_droite(T[2k-3][1],T[2k],T[2k-1][1]);
fsi;
fsi;
L:=L,plot(T[2k],x=T[2k-3][1]..T[2k-1][1]);
fpour;
return L;
fsi;
}
:;
Re: Tracé de fonctions discontinues
Je ne comprends pas ce code, a quoi servent les cercles?
J'ai ajoute du code dans le source du plotter pour gerer les piecewise dont les conditions sont des inegalites lineaires en la variable (en adaptant le code qui integre ce genre d'expressions).
J'ai ajoute du code dans le source du plotter pour gerer les piecewise dont les conditions sont des inegalites lineaires en la variable (en adaptant le code qui integre ce genre d'expressions).
Re: Tracé de fonctions discontinues
pour exclure l'extremite du morceau de courbe à droite ou à gauche selon la definition de la fonction fJe ne comprends pas ce code, a quoi servent les cercles?
en classe en utilise un crochet ouvert
Re: Tracé de fonctions discontinues
Wow, c'est chiade! Je ne vais pas faire aussi bien!
Re: Tracé de fonctions discontinues
Salut,
ça marche super. J'ai juste un petit problème, je n'arrive pas à modifier les échelles des axes.
J'ai essayé de mettre gl_x=-a..a, gl_y=-0.25..1/a dans la dernière fonction, mais ça ne change rien (le maximum de ma fonction est 1/(2a) sur [-a;a] et la fonction vaut 0 ailleurs).
Lionel
ça marche super. J'ai juste un petit problème, je n'arrive pas à modifier les échelles des axes.
J'ai essayé de mettre gl_x=-a..a, gl_y=-0.25..1/a dans la dernière fonction, mais ça ne change rien (le maximum de ma fonction est 1/(2a) sur [-a;a] et la fonction vaut 0 ailleurs).
Lionel
Re: Tracé de fonctions discontinues
pour changer d'echelle le mieux est d'utiliser les fleches du pave situe à droite du graphe
si le repere n'est pas orthonorme mes cercles sont deformes
si le repere n'est pas orthonorme mes cercles sont deformes
Re: Tracé de fonctions discontinues
La syntaxe devrait plutot etre avec un point virgule
et attention, la commande de trace doit etre apres les commandes gl_x/y
Code : Tout sélectionner
gl_x=-a..a; gl_y=-0.25..1/a;
Re: Tracé de fonctions discontinues
Il ne veut rien savoir. J'ai toujours le même repère. J'utilise qcas (je n'ai pas pu installer xcas sur ma debian).
Voici la syntaxe :
J'ai ajouté l'image du graphe obtenu.
Lionel
Voici la syntaxe :
Code : Tout sélectionner
GraphePiecewise(f,coul,a):={
local T,s,L,k;
affichage(epaisseur_ligne_3);display(coul);
gl_x=-a..a;
gl_y=0..1/a;
T:=f(x);L:=NULL;
s:=size(f(x));
si s==3 alors
si simplifier(subst(T[2],x=T[1][1])-subst(T[3],x=T[1][1]))!=0 et T[1][0]=='>' alors
L:=L,Demi_cercle_droite(T[1][1]-5,T[2],T[1][1]);
fsi;
si simplifier(subst(T[2],x=T[1][1])-subst(T[3],x=T[1][1]))!=0 et T[1][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[1][1],T[3],T[1][1]+5);
fsi;
return L:=L,plot(T[2],x=T[1][1]-5..T[1][1]),plot(T[3],x=T[1][1]..T[1][1]+5);
fsi;
si s>=4 alors
si T[2]!=undef alors
si simplifier(subst(T[2],x=T[1][1])-subst(T[4],x=T[1][1]))!=0 et T[1][0]=='>' alors
L:=L,Demi_cercle_droite(T[1][1]-5,T[2],T[1][1]);
fsi;
L:=L,plot(T[2],x=T[1][1]-5..T[1][1]);
fsi;
si T[s]!=undef alors
si simplifier(subst(T[s-1],x=T[s-2][1])-subst(T[s],x=T[s-2][1]))!=0 et T[s-2][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[s-2][1],T[s],T[s-2][1]+5);
fsi;
L:=L,plot(T[s],x=T[s-2][1]..T[s-2][1]+5);
fsi;
si simplifier(subst(T[s-1],x=T[s-2][1])-subst(T[s],x=T[s-2][1]))!=0 et T[s-2][0]=='>' alors
L:=L,Demi_cercle_droite(T[s-4][1],T[s-1],T[s-2][1]);
fsi;
pour k de 2 jusque (s-1)/2 faire
si simplifier(subst(T[2k-2],x=T[2k-3][1])-subst(T[2k],x=T[2k-3][1]))!=0 et T[2k-3][0]=='>=' alors
L:=L,Demi_cercle_gauche(T[2k-3][1],T[2k],T[2k-1][1]);
fsi;
si k!=(s-1)/2 alors
si simplifier(subst(T[2k],x=T[2k-1][1])-subst(T[2k+2],x=T[2k-1][1]))!=0 et T[2k-1][0]=='>' alors
L:=L,Demi_cercle_droite(T[2k-3][1],T[2k],T[2k-1][1]);
fsi;
fsi;
L:=L,plot(T[2k],x=T[2k-3][1]..T[2k-1][1]);
fpour;
return L;
fsi;
}
:;
Lionel
- Pièces jointes
-
- Exemple de tracés de fonctions porte
- PbFctPorte.png (6.69 Kio) Consulté 15741 fois
Re: Tracé de fonctions discontinues
qcas ne reconnait probablement pas les options de trace.
Par contre c'est etonnant que vous n'arriviez pas a installer xcas sur une debian: il y a 3 depots possibles stable et testing correspondent a debian 7 et devraient marcher au-dela, old devrait fonctionner pour des debian plus anciennes (le package 64 bits n'y est pas a jour).
Par contre c'est etonnant que vous n'arriviez pas a installer xcas sur une debian: il y a 3 depots possibles stable et testing correspondent a debian 7 et devraient marcher au-dela, old devrait fonctionner pour des debian plus anciennes (le package 64 bits n'y est pas a jour).
Re: Tracé de fonctions discontinues
J'avais xcas sur mon ancienne debian. Il y a un problème avec une librairie qui a disparue lors du passage à la version 8 stable :parisse a écrit :qcas ne reconnait probablement pas les options de trace.
Par contre c'est etonnant que vous n'arriviez pas a installer xcas sur une debian: il y a 3 depots possibles stable et testing correspondent a debian 7 et devraient marcher au-dela, old devrait fonctionner pour des debian plus anciennes (le package 64 bits n'y est pas a jour).
http://xcas.e.ujf-grenoble.fr/XCAS/view ... f=1&t=1624
Comme j'avais qcas, je me suis dit que j'allais rester comme ça. Je dois ré-installer un autre ordi, je verrai avec la version 8.7.
Lionel