Listes, ensembles, assignation d'une réponse à solve
Modérateur : xcasadmin
Listes, ensembles, assignation d'une réponse à solve
Bonjour,
je suis en train d'investiguer un peu tout ce qui est séquences, listes, ensembles… et je dois dire que j'y perd un peu mon latin.
Mon but principal est d'utiliser des résultats de calculs obtenus par solve ou autres dans la suite de mon problème. Ex : une fonction à paramètres a et b à calculer, puis travailler sur cette fonction.
Avec Maxima, la réponse est assez lourde : soit on joue avec la variable globalsolve pour assigner directement aux inconnues d'une équation (ou d'un système) les valeurs trouvées ; mais comme son nom l'indique, cette méthode est globale, donc pas souple. Soit on fait de la substitution avec sublis => on me l'a soufflé, je n'aurais pas trouvé tout seul, et la syntaxe n'est pas des plus claires.
Dans la doc Xcas, je n'ai rien trouvé à ce sujet… (ok, je n'ai pas tout lu !!)
J'ai donc bricolé, et j'ai trouvé des choses très intéressantes, mais ça me pose aussi des questions.
voilà ce que donne mon problème :
Pour assigner les réponses à mes variables m et p, j'ai donc utilisé des doubles crochets [19]
Visiblement, ça marche bien, ma fonction g(x) semble correcte [20], et on peut par exemple calculer des images.
Question 1 : la solution est donnée sous quelle forme ? C'est un ensemble de 1 vecteur, c'est une matrice à 1 ligne… ?
Question 2 : dans la formulation, on a 2 fois [m,p], une fois dans l'assignation, une fois dans solve. Existe-t-il une autre syntaxe plus directe ?
Question 3 : l'assignation à m et p qui sont les inconnues des résultats de l'éq à résoudre pose-t-elle potentiellement un problème (ref circulaire ? Normalement non, mais…)
Nota : j'ai essayé la formulation [21], très fun, et ça marche ! (fan d'Octave, ça peut servir !)
A noter que si on fait un "solve" sur un trinôme du 2nd degré, et qu'on veut récupérer les racines, il suffit de mettre [x1,x2]:=solve… => un seul niveau de crochets suffit, ce qui semble logique, on a un ensemble de 2 valeurs.
Dans la doc, j'ai noté les différences de crochets selon qu'on a un ensemble, un vecteur, une matrice… (nota : dans la doc en pdf, on a du mal à voir la différence)
J'ai bricolé ceci :
Je suis perplexe sur le cas [28], je le définis comme un ensemble (set), et j'obtiens une matrice ?
Et je note que les crochets sont différents de [25], qui doit donc être un ensemble ?
je suis en train d'investiguer un peu tout ce qui est séquences, listes, ensembles… et je dois dire que j'y perd un peu mon latin.
Mon but principal est d'utiliser des résultats de calculs obtenus par solve ou autres dans la suite de mon problème. Ex : une fonction à paramètres a et b à calculer, puis travailler sur cette fonction.
Avec Maxima, la réponse est assez lourde : soit on joue avec la variable globalsolve pour assigner directement aux inconnues d'une équation (ou d'un système) les valeurs trouvées ; mais comme son nom l'indique, cette méthode est globale, donc pas souple. Soit on fait de la substitution avec sublis => on me l'a soufflé, je n'aurais pas trouvé tout seul, et la syntaxe n'est pas des plus claires.
Dans la doc Xcas, je n'ai rien trouvé à ce sujet… (ok, je n'ai pas tout lu !!)
J'ai donc bricolé, et j'ai trouvé des choses très intéressantes, mais ça me pose aussi des questions.
voilà ce que donne mon problème :
Pour assigner les réponses à mes variables m et p, j'ai donc utilisé des doubles crochets [19]
Visiblement, ça marche bien, ma fonction g(x) semble correcte [20], et on peut par exemple calculer des images.
Question 1 : la solution est donnée sous quelle forme ? C'est un ensemble de 1 vecteur, c'est une matrice à 1 ligne… ?
Question 2 : dans la formulation, on a 2 fois [m,p], une fois dans l'assignation, une fois dans solve. Existe-t-il une autre syntaxe plus directe ?
Question 3 : l'assignation à m et p qui sont les inconnues des résultats de l'éq à résoudre pose-t-elle potentiellement un problème (ref circulaire ? Normalement non, mais…)
Nota : j'ai essayé la formulation [21], très fun, et ça marche ! (fan d'Octave, ça peut servir !)
A noter que si on fait un "solve" sur un trinôme du 2nd degré, et qu'on veut récupérer les racines, il suffit de mettre [x1,x2]:=solve… => un seul niveau de crochets suffit, ce qui semble logique, on a un ensemble de 2 valeurs.
Dans la doc, j'ai noté les différences de crochets selon qu'on a un ensemble, un vecteur, une matrice… (nota : dans la doc en pdf, on a du mal à voir la différence)
J'ai bricolé ceci :
Je suis perplexe sur le cas [28], je le définis comme un ensemble (set), et j'obtiens une matrice ?
Et je note que les crochets sont différents de [25], qui doit donc être un ensemble ?
Re: Listes, ensembles, assignation d'une réponse à solve
1: Le resultat de solve est une liste de solutions. Si on a plusieurs variables, les solutions sont des vecteurs, et on obtient une liste de listes de meme longueur, ce que l'affichage de Xcas rend comme une matrice (dont les lignes sont des vecteurs solutions)
2: je ne vois pas trop comment eviter d'entrer 2 fois m et p, une fois dans les equations, une fois dans les inconnues.
3: l'assignation de m et p ne devrait pas poser de problemes.
Pour le trinome du second degre, on peut meme ecrire x1,x2:=solve(...)
Pour le niveau 28, c'est juste l'affichage qui est sous forme de matrice (c'est le cas des que les lignes ont meme longueur sauf pour les sequence, peut-etre qu'il faudrait traiter aussi le cas des ensembles), en cas de doute entre matrice et ensemble, ce sera le cas ensemble qui sera utilise.
2: je ne vois pas trop comment eviter d'entrer 2 fois m et p, une fois dans les equations, une fois dans les inconnues.
3: l'assignation de m et p ne devrait pas poser de problemes.
Pour le trinome du second degre, on peut meme ecrire x1,x2:=solve(...)
Pour le niveau 28, c'est juste l'affichage qui est sous forme de matrice (c'est le cas des que les lignes ont meme longueur sauf pour les sequence, peut-etre qu'il faudrait traiter aussi le cas des ensembles), en cas de doute entre matrice et ensemble, ce sera le cas ensemble qui sera utilise.
Re: Listes, ensembles, assignation d'une réponse à solve
Merci beaucoup pour ces précisions, la liste est donc vraiment un concept clé, et comme les vecteurs et matrices sont définis comme des listes, tout est bien cohérent.
Pour le 2, il me semblait "naturel" que le programme puisse affecter à mes inconnues déclarées dans solve le résultat du calcul. C'est ce que fait maxima :
C'était juste pour savoir si Xcas possédait une syntaxe similaire.
Maintenant, je préfère franchement la réponse d'Xcas au pb, car quand c'est x l'inconnue dans un pb, la réponse de maxima devient difficile à gérer… En plus, globalsolve a une portée limitée, ça ne marche pas pour tous les types d'équations.
Pour votre syntaxe de multi-assignation directe (x1,x2:=solve…), je suis justement tombé fortuitement sur un pb ce matin, voilà ce que ça donne :
Quand il y a une solution, c'est un vecteur, et deux solutions, on a des valeurs simples… ?
L'utilisation directe de x1 sous forme de vecteur peut poser pb => de toutes façons, la syntaxe avec les [ ] n'est pas dérangeante, donc je m'en tiendrais à celle-ci, et en plus, on conserve la cohérence dans la syntaxe, ce qui est une grande qualité chez Xcas !
Pour le 2, il me semblait "naturel" que le programme puisse affecter à mes inconnues déclarées dans solve le résultat du calcul. C'est ce que fait maxima :
C'était juste pour savoir si Xcas possédait une syntaxe similaire.
Maintenant, je préfère franchement la réponse d'Xcas au pb, car quand c'est x l'inconnue dans un pb, la réponse de maxima devient difficile à gérer… En plus, globalsolve a une portée limitée, ça ne marche pas pour tous les types d'équations.
Pour votre syntaxe de multi-assignation directe (x1,x2:=solve…), je suis justement tombé fortuitement sur un pb ce matin, voilà ce que ça donne :
Quand il y a une solution, c'est un vecteur, et deux solutions, on a des valeurs simples… ?
L'utilisation directe de x1 sous forme de vecteur peut poser pb => de toutes façons, la syntaxe avec les [ ] n'est pas dérangeante, donc je m'en tiendrais à celle-ci, et en plus, on conserve la cohérence dans la syntaxe, ce qui est une grande qualité chez Xcas !
Re: Listes, ensembles, assignation d'une réponse à solve
un petit programme qui cree une fonction affine f dont la courbe passe par deux points
dont les coordonnees sont saisies par l'utilisateur sous forme d'une sequence.
ce qui m'etonne c'est que retourne f:=unapply(sol[0][0]*x+sol[0][1],x); ne donne pas un message d'erreur ...
on lance FonctionAffine() puis on calcule f(8) ou f(a+7) etc ...
dont les coordonnees sont saisies par l'utilisateur sous forme d'une sequence.
Code : Tout sélectionner
FonctionAffine():={
local A,B,E,a,b,sol;
purge(a,b);
repeter
saisir("coordonnees du point A \n par exemple 2/3,4.5",A)
saisir("coordonnees du point B",B)
jusqua
A[0]!=B[0]; // ou simplifier(A[0]-B[0])!=0
E:=a*x+b;
sol:=solve([subst(E,x=A[0])=A[1],subst(E,x=B[0])=B[1]],[a,b]);
retourne f:=unapply(sol[0][0]*x+sol[0][1],x);
}:;
on lance FonctionAffine() puis on calcule f(8) ou f(a+7) etc ...
Re: Listes, ensembles, assignation d'une réponse à solve
@ alb : je n'ai pas d'expérience de prog ni avec Xcas, ni en C ou python, mais j'ai fait pas mal de Matlab / Octave, qui ont une syntaxe différente, très allégée au niveau procédures (les { }, déclaration de variables…) et avec l'écriture vectorielle qui simplifie beaucoup de boucles pour…de…à.
En quoi l'écriture devrait donner une erreur ? C'est le f:=unapply… ?
Je me suis amusé à modifier votre programme, voilà ce que j'aurais fait :
Je préfère envoyer les paramètres dans la fonction plutôt que de répondre ultérieurement à des demandes du programme (habitude Octave sans doute…)
Utilisation :
On n'a plus une seule fonction globale f, on peut en définir plusieurs avec des noms différents
En quoi l'écriture devrait donner une erreur ? C'est le f:=unapply… ?
Je me suis amusé à modifier votre programme, voilà ce que j'aurais fait :
Code : Tout sélectionner
FonctionAffine(A,B):={
local E,a,b,sol;
purge(a,b);
E:=a*x+b;
sol:=solve([subst(E,x=A[0])=A[1],subst(E,x=B[0])=B[1]],[a,b]);
retourne unapply(sol[0][0]*x+sol[0][1],x);
}:;
Utilisation :
Code : Tout sélectionner
f:=FonctionAffine([-1,-2],[2,3])
Re: Listes, ensembles, assignation d'une réponse à solve
La boucle repeter c'est surtout pour les eleves qui aiment ouvrir des fenetres.
C'est parfois à celui qui aura le temps d'evaluation le plus court !
Il faut quand meme prevoir dans le programme le cas de deux points de meme abscisse.
Je croyais qu'une affectation dans le retourne etait fautif.
on peut rajouter le graphe autour de la valeur qui annule le binome:
C'est parfois à celui qui aura le temps d'evaluation le plus court !
Il faut quand meme prevoir dans le programme le cas de deux points de meme abscisse.
Je croyais qu'une affectation dans le retourne etait fautif.
on peut rajouter le graphe autour de la valeur qui annule le binome:
Code : Tout sélectionner
ClrGraph();
---------------------
codi:=sol[0][0];
si codi!=0 alors
fr:=-sol[0][1]/sol[0][0];
graphe(sol[0][0]*x+sol[0][1],x=fr-10..fr+10,affichage=epaisseur_ligne_3);
sinon
graphe(sol[0][1],affichage=epaisseur_ligne_3);
fsi;
Re: Listes, ensembles, assignation d'une réponse à solve
On peut mettre une affectation a tout endroit ou une expression algebrique convient, parce que l'affectation renvoie la valeur affectee (comme = en C), dans un return ca n'aurait d'interet que pour affecter une variable globale.
Sinon, pour les entrees, dans l'ideal il vaudrait mieux faire un passage par parametres, mais c'est assez contraire a tout ce qu'on voit en algorithmique au lycee, peut-etre a cause de l'influence d'algobox, mais c'est peut-etre une etape necessaire pour la majorite des eleves dans l'apprentissage. Dommage quand meme qu'il n'y ait pas une evolution entre la 2nde et la terminale (peut-etre que ca changera une fois que le corps enseignant sera lui-meme mieux forme...)
Sinon, pour les entrees, dans l'ideal il vaudrait mieux faire un passage par parametres, mais c'est assez contraire a tout ce qu'on voit en algorithmique au lycee, peut-etre a cause de l'influence d'algobox, mais c'est peut-etre une etape necessaire pour la majorite des eleves dans l'apprentissage. Dommage quand meme qu'il n'y ait pas une evolution entre la 2nde et la terminale (peut-etre que ca changera une fois que le corps enseignant sera lui-meme mieux forme...)
Re: Listes, ensembles, assignation d'une réponse à solve
Of course ! Mais c'est aussi très formateur que les élèves voient que le programme ne fait que ce qu'on lui a demandé de faire… C'est un excellent apprentissage de la rigueur : si on oublie des morceaux, ça ne marche pas (ou mal). Le résultat est plus palpable que quand on oublie un élément clé dans une démonstration "sur papier".Il faut quand meme prevoir dans le programme le cas de deux points de meme abscisse.
C'est vrai qu'une progression dans l'algorithmique n'est absolument pas prévue dans les programmes, et c'est dommage. J'aime beaucoup Algobox : pas de perte d'énergie avec une syntaxe tatillonne. Inutile d'embrouiller des élèves qui ont souvent du mal avec des concepts clé style a <- a+1. Mais passer à autre chose en 1e et Term serait bien.mais c'est assez contraire a tout ce qu'on voit en algorithmique au lycee, peut-etre a cause de l'influence d'algobox, mais c'est peut-etre une etape necessaire pour la majorite des eleves dans l'apprentissage. Dommage quand meme qu'il n'y ait pas une evolution entre la 2nde et la terminale (peut-etre que ca changera une fois que le corps enseignant sera lui-meme mieux forme...)
Pour l'aspect formation des enseignants, je pense que le problème est plus culturel : vu le bagage intellectuel et le niveau de formation d'un prof de maths, j'ose espérer qu'une auto-formation ne lui donne pas de soucis ; c'est plutôt il n'y a pas trop d'adhésion du corps enseignant à l'apprentissage de l'algorithmique (les stats probas sont mal aimées aussi, mais c'est un autre débat…)
Re: Listes, ensembles, assignation d'une réponse à solve
Oui, il y a un probleme d'adhesion, mais je pense que les 2 sont lies, c'est aussi parce que beaucoup de collegues n'ont pas ete forme a l'algorithmique pendant leurs etudes qu'ils ont du mal a y adherer. S'y ajoute le probleme d'etre capable de gerer une seance, utiliser un environement de programmation ouvert (comme l'est Xcas, mais c'est vrai pour la tres grande majorite des langages) necessite pas mal de recul de l'enseignant pour etre capable de detecter rapidement une petite erreur de syntaxe d'une part mais aussi pour mettre au point un programme qui ne marche pas. C'est certainement plus facile de gerer une seance de TP avec un environnement tres ferme comme algobox, mais du coup on n'a pas le concept fondemental de fonction/arguments, et je trouve que c'est tres dommage que ca ne soit pas enseigne en 1ere/terminale S au moins.
Re: Listes, ensembles, assignation d'une réponse à solve
Tout à fait d'accord. C'est vrai que la programmation est une activité super chronophage, et si on a pas un minimum d'affinités avec la chose, ça devient très vite frustrant voire pénible ! Et vous avez raison, pour être efficace sur un programme qui ne marche pas (surtout celui de quelqu'un d'autre), il vaut mieux avoir qq heures de vol. De ce point de vue, une formation restera insuffisante voire inutile sans un investissement personnel important…
Je reviens sur mon problème d'assignation de résultats d'une commande solve à une (des) variable(s). Quelqu'un sait comment ça marche avec GeoGebra ? J'ai tenté mais aucune solution évidente ne fonctionne. S'il en existe une, la doc est aux abonnés absents…
En résumé, Xcas est le seul à donner une réponse intuitive (j'ai dû patauger 5mn avant de trouver une solution qui marche) et valable à ce problème => gros avantage !
Je reviens sur mon problème d'assignation de résultats d'une commande solve à une (des) variable(s). Quelqu'un sait comment ça marche avec GeoGebra ? J'ai tenté mais aucune solution évidente ne fonctionne. S'il en existe une, la doc est aux abonnés absents…
En résumé, Xcas est le seul à donner une réponse intuitive (j'ai dû patauger 5mn avant de trouver une solution qui marche) et valable à ce problème => gros avantage !