Listes, ensembles, assignation d'une réponse à solve

Utilisation de Xcas

Modérateur : xcasadmin

Répondre
Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Listes, ensembles, assignation d'une réponse à solve

Message par Cheval » dim. nov. 03, 2013 5:46 pm

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 :

Image

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 :

Image

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 ?

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

Re: Listes, ensembles, assignation d'une réponse à solve

Message par parisse » lun. nov. 04, 2013 7:28 am

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.

Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Re: Listes, ensembles, assignation d'une réponse à solve

Message par Cheval » lun. nov. 04, 2013 9:25 am

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 :

Image

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 :

Image

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 !

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

Re: Listes, ensembles, assignation d'une réponse à solve

Message par alb » lun. nov. 04, 2013 8:00 pm

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.

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);
}:;
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 ...

Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Re: Listes, ensembles, assignation d'une réponse à solve

Message par Cheval » mar. nov. 05, 2013 8:01 am

@ 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 :

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);
}:;
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 :

Code : Tout sélectionner

f:=FonctionAffine([-1,-2],[2,3])
On n'a plus une seule fonction globale f, on peut en définir plusieurs avec des noms différents

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

Re: Listes, ensembles, assignation d'une réponse à solve

Message par alb » mar. nov. 05, 2013 8:45 am

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:

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;


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

Re: Listes, ensembles, assignation d'une réponse à solve

Message par parisse » mar. nov. 05, 2013 8:55 am

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...)

Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Re: Listes, ensembles, assignation d'une réponse à solve

Message par Cheval » mar. nov. 05, 2013 1:08 pm

Il faut quand meme prevoir dans le programme le cas de deux points de meme abscisse.
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".
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...)
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.
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…)

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

Re: Listes, ensembles, assignation d'une réponse à solve

Message par parisse » mar. nov. 05, 2013 2:03 pm

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.

Cheval
Messages : 66
Inscription : mar. sept. 24, 2013 7:51 pm

Re: Listes, ensembles, assignation d'une réponse à solve

Message par Cheval » mar. nov. 05, 2013 9:00 pm

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 !

Répondre