minus

Utilisation de Xcas

Modérateur : xcasadmin

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

minus

Message par alb » lun. mars 14, 2011 5:54 pm

Code : Tout sélectionner

Resoudre(E):={
local rep,enl;
afficher("les solutions possibles sont "+resoudre(E));
saisir_chaine("voulez-vous enlever des solutions(o/n)",rep);
si rep=="n" alors 
  retourne resoudre(E=0);
fsi;
si rep=="o" alors
  saisir("indiquer les solutions à enlever, séparéees par des virgules",enl);
  retourne resoudre(E=0) minus [enl];
fsi;
}
:;
Pouvez vous m'expliquer pourquoi en faisant
Resoudre(ln(x*(x-1)*(x-2))-(ln(5)+ln((x+1)*(x-3)))
j'arrive à enlever 5 (à tort) de la liste des solutions mais
je n'arrive pas à enlever (3-sqrt(21))/2 ?
Pourtant
[(3-sqrt(21))/2,(3+sqrt(21))/2,5] minus [(3-sqrt(21))/2]
renvoie set[(3+sqrt(21))/2,5]

Une autre question:
plot(ln(1-x)+ln(x-2)) renvoie une liste vide OK
plot(ln((1-x)*(x-2))) renvoie un graphe entre 1 et 2 OK
plot(ln(1-x)+ln(x-2)-ln((1-x)*(x-2)),display=bleu+epaisseur_ligne_5) renvoie un graphe hors de 1..2
je comprends moins !

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

Re: minus

Message par parisse » mar. mars 15, 2011 10:31 am

ca vient du fait que la solution renvoyee est 1/2*(3-sqrt(21)) qui a une representation differente de (3-sqrt(21))/2. On peut normaliser en utilisant ratnormal:
retourne ratnormal(resoudre(E=0)) minus [ratnormal(enl)];
Pour plot, il faut bien comprendre qu'il ne cherche pas de domaine de definition, il calcule le ln dans C, et si la partie imaginaire est nulle (compensation des i*pi), tout se passe bien.

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

Re: minus

Message par alb » mar. mars 15, 2011 5:26 pm

Concernant plot:
il faut donc faire attention au fait que le nombre de points d'intersection de deux courbes donné par graphe([E,F]) n'est pas toujours le nombre de points d'intersection de graphe(E-F) avec l'axe des abscisses.

Je modifie le code précédent ainsi:

Code : Tout sélectionner

Resoudre(E):={
local rep,enl;
afficher("les solutions possibles sont "+resoudre(E));
saisir_chaine("voulez-vous enlever des solutions(o/n)",rep);
si rep=="n" alors
  retourne resoudre(E=0);
fsi;
si rep=="o" alors
  DispG;ClrGraph;plot(E);
  saisir("indiquer les solutions à enlever, séparéees par des virgules",enl);
  retourne ratnormal(resoudre(E=0)) minus [ratnormal(enl)];
fsi;
}
:;
pour avoir la fenêtre DispG avant de décider des solutions à enlever.
Le problème est que la cfg reste dans l'état précédent et qu'on ne peut pas la changer avant la saisie des solutions à enlever. Quelle est la solution ?

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

Re: minus

Message par parisse » jeu. mars 17, 2011 12:26 pm

on peut imposer le cadrage graphique de DispG avec gl_x=xmin..xmax et gl_y=ymin..ymax. Attention toutefois, l'utilisateur ne pourra plus utiliser les boutons de reglage de la configuration jusqu'au prochain ClrGraph.

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

Re: minus

Message par alb » ven. mars 18, 2011 2:26 pm

Je reviens sur l'idée de faire L minus M pour enlever de la liste L des solutions possibles d'une équation la liste M des solutions qui ne sont pas dans le domaine de définition
Cette fois je prends:
solve((e*x-1)/(1+ln(x))) qui renvoie [1/(exp(1))] c'est L
solve(1+ln(x)) qui renvoie [exp(-1)] c'est M
Je ne vois pas comment faire coîncider les représentations des réponses (ratnormal est sans effet ici)
Je me demande si ce ne serait pas mieux de passer par simplifier(L[j]-M[k]) pour tester si M[k] est dans L ?

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

Re: minus

Message par parisse » ven. mars 18, 2011 3:03 pm

Si bien sur, simplify sera plus puissant que ratnormal, mais plus couteux en temps. Mais ce ne sera pas completement sur non plus car il n'y a pas de forme normale intrinseque, il serait plus sur de faire simplify de la difference comme vous l'indiquez, ce qui necessite evidemment plus de calculs.

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

Re: minus

Message par alb » ven. mars 18, 2011 5:11 pm

Ceci vous parait-il satisfaisant pour toutes les situations ?
Si oui, le warning k variable globale risque-t-il de poser un problème ?

Code : Tout sélectionner

LmoinsM(L,M):={
local temp,k;
temp:=L;
pour k de 0 jusque size(M)-1 faire
  temp:=remove(x->simplifier(x-M[k])==0,temp);
fpour;
return temp;
}
:;

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

Re: minus

Message par parisse » ven. mars 18, 2011 6:56 pm

oui, ça me parait bien. Pour le warning, on peut déclarer global x; ou déclarer x en local et faire au début purge(x);

Répondre