Page 1 sur 1

signe expression trigo

Publié : lun. nov. 06, 2017 9:47 pm
par alb
delta:=(1-2*cos(alpha))^2-4;
factoriser(delta);
purge(alpha);
sign(2*cos(alpha)-3); // renvoie -1 ok
supposons(-2*pi/3<alpha<2*pi/3);
sign(delta); // renvoie -1 ok
supposons(2*pi/3<alpha<4*pi/3);
sign(delta); // renvoie sign((-2*cos(alpha)+1)^2-4) au lieu du 1 attendu

Re: signe expression trigo

Publié : mar. nov. 07, 2017 8:06 am
par parisse
Je ne vois pas comment ameliorer sans risquer d'introduire plein de bugs. Il y a une ligne de code qui teste specifiquement que la "variable" etendue dont depend polynomialement l'expression est cos ou sin, et un test d'annulation fait pour la valeur la plus grande de l'intervalle de valeurs possibles, pas la plus petite (donc 1 dans le 1er cas et -1/2 dans le 2eme cas). Tout ca doit correspondre a des corrections (non optimales) de bugs de sign dont je n'ai malheureusement pas garde la trace

Code : Tout sélectionner

alg_ext.cc:...
       if (strict && (v0.is_symb_of_sommet(at_sin) || v0.is_symb_of_sommet(at_cos)))
	    return 0;
Le systeme n'a pas ete concu pour gerer les inegalites strictes, du coup meme avec des inegalites strictes, ca peut etre des inegalites larges qui sont considerees... (si on met 3*pi/4<=alpha<=5*pi/4, tout va bien!)

Re: signe expression trigo

Publié : mar. nov. 07, 2017 10:15 am
par alb
bon je vais rester classique:

delta:=(1-2*cos(alpha))^2-4;
factoriser(delta);
supposons(-pi<alpha<=pi);
solve(2*cos(alpha)-3<0,alpha);
solve(2*cos(alpha)+1<=0,alpha);
solve(2*cos(alpha)+1>=0,alpha);
solve(delta=0,alpha);
solve(delta>0,alpha);
solve(delta<0,alpha);