paramétrer plot dans giac

Librairie C++ de calcul formel/ C++ symbolic computation library

Modérateur : xcasadmin

Répondre
cfm
Messages : 6
Inscription : mer. sept. 28, 2011 2:21 pm

paramétrer plot dans giac

Message par cfm » jeu. sept. 29, 2011 6:16 pm

Bonjour,

Je teste avec giac (et pas trop xcas) l'énoncé suivant :

<< Représenter dans le plan complexe les 4 racines (en z) de z^4+m*z^2+1 lorsque m décrit R. >>

Le résultat est la réunion du cercle trigonométrique et des deux axes.

Chacune des quatre racines parcourt un quart du cercle trigonométrique si -2 < m < 2.
Le parcours de l'axe réel s'effectue pour m>2 en 4 morceaux ]0,1], [1,+oo[, ]-oo, -1] et [-1,0[.
L'axe imaginaire pur est atteint pour les valeurs m<-2.

J'apprécie que giac traduise automatiquement un nombre complexe en coordonnées du plan 2d.
C'est le premier logiciel de calcul formel que je vois faire cela directement !

En revanche il me reste ces trois questions :

1/ Je n'ai pas trouvé comment superposer plusieurs courbes sur un même graphe.

La commande composée sur une même ligne semble convenir :
plotparam(...graphe_1...) ; plotparam(...graphe_2...) ;

Mais il ne semble pas possible de les saisir sur 2 lignes successives.
plotparam(...graphe_1...) ;
plotparam(...graphe_2...) ;

Le système semble bloquer en attendant que la fenêtre graphique soit fermée.

J'avoue que la méthode de maple avec des variables pouvant contenir des plots est assez efficace.
p1 := plotparam (....) ; p2 := plotparam(....) ; display (p1, p2)

Sage pousse cette logique jusqu'au bout en autorisant l'opérateur + sur les dessins.
p1+p2 est le graphe réunion de p1 et de p2. A l'usage cette synaxe est très agréable !

Comment le faire avec giac sans passer par la souris et xcas.

2/ Peut-on forcer ces graphes à être représenté dans un repère orthonormé directement,
sans devoir cliquer sur le repère orthonormé de la fenêtre du plot ?

L'option équivalente de maple scaling=constrained est à ajouter dans la commande.

La commande xyztrange(...plein de paramètres...) de giac n'a pas d'effet sur le plotparam(....) suivant.

3/ Comme beaucoup d'autres systèmes, la commande plotparam semble relier par des segments les points calculés.
Est-il possible détecter plus ou moins automatiquement ces discontinuités ?
Par exemple ne pas obtenir d'escalier dans le plotparam (t+i*floor(t), t).

Bien cordialement.

F.

frederic han
Messages : 1137
Inscription : dim. mai 20, 2007 7:09 am
Localisation : Paris
Contact :

Re: paramétrer plot dans giac

Message par frederic han » jeu. sept. 29, 2011 7:56 pm

Bonjour,

pour la 1 la reponse est simple, vous pouvez effectivement ranger les dessins dans des variables, mais la commande pour ne pas afficher (en mode xcas) est :;

donc:
3>> l1:=plot(sin(t),t):;
"Done"
// Time 0
4>> l2:=plot(cos(t),t):;
"Done"
// Time 0
5>> l1,l2
dessinera les 2 sur le meme dessin.

ou toute autre possibilites du genre:

l:=[l1,l2]:;
l*i+1; affiche en tournant et translatant le tout.

a+
Fred

parisse
Messages : 5740
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: paramétrer plot dans giac

Message par parisse » jeu. sept. 29, 2011 8:00 pm

On peut utiliser indifférement un saut de ligne ou rien pour séparer 2 commandes, l'interpréteur s'en moque et ça marche très bien dans xcas. Par contre avec giac un saut de ligne va provoquer l'exécution immédiate de la commande et donc l'ouverture de la fenêtre graphique correspondante. On peut bien sur stocker des objets graphiques dans des variables, donc faire un p1:=plotparam(...) puis p2:=plotparam(...) et afficher les 2 courbes simultanément en tapant p1; p2; (pas besoin de display donc, le + n'est pas trop conseillé sur des objets graphiques, par contre on peut soustraire 2 points et obtenir un complexe ou ajouter un complexe a un objet graphique).
On peut forcer le repère à être orthonormé avec gl_ortho=true, mais ce n'est pas conseillé car le comportement des commandes de configuration peut alors devenir bizarre pour l'utilisateur. En général, je pense qu'il faut donner au système les paramètres de calcul d'un graphique et laisser l'utilisateur régler les paramètres d'affichage.
Il n'y a pas de moyen de controler pour l'instant les sauts de discontinuité.
Sinon, je comprends que vous ayez envie de tester giac dans un environnement qui vous est familier, mais il faut bien être conscient que vous risquez de rater une partie des possibilités originales de xcas, en particulier pour tout ce qui touche à l'interface (aussi bien les graphiques, que la géométrie interactive formelle avec les curseurs symboliques, le tableur formel, l'éditeur de programmes, le debugger interactif mais aussi l'aide en ligne).

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: paramétrer plot dans giac

Message par alb » jeu. sept. 29, 2011 9:42 pm

parisse a écrit :Il n'y a pas de moyen de controler pour l'instant les sauts de discontinuité
C'est ce qui fait le charme de Xcas, il faut construire les cas particuliers soi-même.
Par exemple pour la partie entière, on peut faire (Xcas ou giac):

Code : Tout sélectionner

ep3:=display=epaisseur_ligne_3;ep2:=display=epaisseur_ligne_2;
seq([plot(k,x=k..k+1,ep3),point(k,k,display=epaisseur_point_3+point_point),
segment(k+i*(k-1.2),k+i*(k-0.8),ep2),segment(k+i*(k-1.2),k+0.1+i*(k-1.2),ep2),
segment(k+i*(k-0.8),k+0.1+i*(k-0.8),ep2)],k,-10,10,1)

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: paramétrer plot dans giac

Message par alb » ven. sept. 30, 2011 9:01 pm

Je reprends la suggestion de frederic han
frederic han a écrit :l:=[l1,l2]:;
l*i+1; affiche en tournant et translatant le tout.
mais je crains que L+1 ne translate pas tous les éléments de la liste L
Je définis un objet de base sous la forme d'une liste et je construis ses images par les translations de vecteurs k+k*i

Code : Tout sélectionner

0>> ep3:=affichage=epaisseur_ligne_3;ep2:=affichage=epaisseur_ligne_2;
'affichage'=epaisseur_ligne_3,'affichage'=epaisseur_ligne_2
// Time 0
1>> Objet:=[plot(0,x=0..1,ep3),point(0,affichage=epaisseur_point_3+point_point),segment(1-i*0.2,1+i*0.2,ep2),segment(1-i*0.2,1.1-i*0.2,ep2),segment(1+i*0.2,1.1+i*0.2,ep2)]:;
"Done"
// Time 0
2>> seq(Objet+[(k+k*i)$dim(Objet)],k,-10,10,1)

parisse
Messages : 5740
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: paramétrer plot dans giac

Message par parisse » sam. oct. 01, 2011 8:58 am

Je pense que ça devrait marcher si on fait une liste de sous-type groupe:
l:=group[l1,l2];

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: paramétrer plot dans giac

Message par alb » sam. oct. 01, 2011 10:20 am

De quoi donner des envies de retapisser...

Code : Tout sélectionner

Objet:=group[cercle(0,1),carre(1,i)]:;
Objet:=op(seq(Objet+k+k*i,k,-10,10,1)):;
seq(group[Objet]+k*i,k,-10,10,1)

alb
Messages : 1320
Inscription : ven. août 28, 2009 3:34 pm

Re: paramétrer plot dans giac

Message par alb » dim. oct. 02, 2011 4:49 pm

J'ai eu du mal à comprendre pourquoi je n'arrivais pas au même résultat avec apply
En fait la seconde valeur de Objet est une matrice !
Ensuite je me suis aperçu que l'option matrix ne marche pas avec apply (avec map oui), l'exemple de l'aide:
apply(x->x+1,[[1,2,3],[1,2,3]],matrix) renvoie Type Argument Incorrect

Code : Tout sélectionner

Objet:=[cercle(0,1),carre(1,i)]:;
Objet:=seq(apply(x->x+k+k*i,Objet),k,-10,10,1):;
seq(map(Objet,x->x+k*i,matrix),k,-10,10,1)

parisse
Messages : 5740
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: paramétrer plot dans giac

Message par parisse » lun. oct. 03, 2011 9:01 am

j'ai change apply, s'il y a un matrix en 3eme position, map est appele en intervertissant les 2 premiers arguments.

cfm
Messages : 6
Inscription : mer. sept. 28, 2011 2:21 pm

Re: paramétrer plot dans giac

Message par cfm » mer. oct. 05, 2011 4:29 pm

Bonjour, et merci à tous,

C'est encore mieux qu'un cours particulier ; j'ai trois professeurs qui m'expliquent giac.
Je suis avec intérêt ces élégants exemples pour mieux entrer dans l'état d'esprit du système.

Sur ma machine l'affectation gl_ortho:=true et le paramètre gl_ortho=true dans le plot ne forcent pas l'affichage dans un repère orthonormé.
Mais je vais bien finir par m'adapter à l'interface xcas...

Par rapport aux autres systèmes giac considère les vecteurs plutôt que les listes.
Je trouve que cela concentre le code car il n'y a pas à taper vector ou matrix à chaque fois.
Cela rapproche le systeme des mathématiques même si l'on perd un peu de cohérence mathématiques lorsque l'on construit les listes de fonctions, l'équations, de chaines de caractères...

Tout mathématicien a rencontré un jour ou l'autre le graphe de fonctions comme
sin(1/x), x*floor(1/x), floor(1/x)*(x*floor(1/x)-1),etc.
Je suis toujours fasciné par les programmes qui tracent efficacement ces graphes et courbes paramétrées
sans faire intervenir l'utilisateur pour traiter à part les singularités.

Et je vois que giac évolue pour améliorer son comportement dans les cas limites.

Bien cordialement.

F.

cfm
Messages : 6
Inscription : mer. sept. 28, 2011 2:21 pm

Re: paramétrer plot dans giac

Message par cfm » mer. oct. 05, 2011 8:32 pm

(de retour...)

Dans le but d'expérimenter une méthode de "plot" qui tienne compte des discontinuités et de la régularité des fonctions, je me demande s'il est possible de passer des valeurs par défaut à un paramètre à une fonction.

Le noyau de giac le permet : plot (...) ne demande pas d'énumérer tous les paramètres.
L'interpréteur peut-il le faire ou dois-je énumérer tous les paramètres lors de l'appel de "ma fonction plot".

D'avance, grand merci !

F.

parisse
Messages : 5740
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: paramétrer plot dans giac

Message par parisse » jeu. oct. 06, 2011 6:46 am

Pas directement, par contre on peut utiliser une fonction a nombre variable d'arguments et lire des arguments optionnels en utilisant args. Par exemple
testargs():={ local y; y:=args; return y[1];}:;
testargs(12,5);

cdeval
Messages : 192
Inscription : mer. juin 03, 2009 4:28 pm

Re: paramétrer plot dans giac

Message par cdeval » mer. mai 28, 2014 3:02 pm

parisse a écrit :Pas directement, par contre on peut utiliser une fonction a nombre variable d'arguments et lire des arguments optionnels en utilisant args. Par exemple
testargs():={ local y; y:=args; return y[1];}:;
testargs(12,5);
Salut,
il serait pratique d'avoir une option "optional" pour définir une fonction avec un nombre variable de paramètres.
Par exemple :

Code : Tout sélectionner

mafonction(x,optional y,optional z):={
if (y==NULL){
faire ceci} else {faire cela}
etc...
}
Pour le moment je me débrouille avec args...
A+

parisse
Messages : 5740
Inscription : mar. déc. 20, 2005 4:02 pm
Contact :

Re: paramétrer plot dans giac

Message par parisse » mer. mai 28, 2014 4:05 pm

tant mieux, parce que je n'ai pas trop d'idées pour le moment pour faire marcher des arguments optionnels (ou même mieux des arguments par défaut).

Répondre