distance2 (ou longueur2)

Bugs

Modérateur : xcasadmin

fred
Messages : 46
Inscription : mer. sept. 09, 2009 7:29 pm

distance2 (ou longueur2)

Message par fred » sam. mai 07, 2011 6:45 pm

Bonjour

Je construis un pentagone.
Pour vérifier que la construction me donne bien un pentagone régulier (ce qui est certain !), je souhaite calculer la longueur des côtés.
N'arrivant pas à simplifier automatiquement les formules donnant les coordonnées des points, je me contente de calculer les carrés des longeurs.
Les résultats obtenus sont faux pour certains segments ! Par contre si je demande un evalf : les décimales affichées sont exactes pour les 5 côtés (la réponse attendue est (-sqrt(5)+5)/2 )
Je joins le fichier.
Si quelqu'un à une idée...
Pièces jointes
penta.zip
Construction du pentagone régulier et calcul des longueurs des côtés
(1.48 Kio) Téléchargé 158 fois

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

Re: distance2 (ou longueur2)

Message par alb » sam. mai 07, 2011 9:18 pm

Il faudrait un spécialiste des rootof pour répondre !
En attendant, on peut chercher les coordonnées des points, par exemple:
ordE:=simplifier(im((E+F)/2))
absE:=sqrt(simplifier(1-(ordE)^2))
ordJ:=simplifier(im((J+G)/2))
absJ:=sqrt(simplifier(1-ordJ^2))
puis calculer le carre des longueurs:
L2EF:=simplifier((2*absE)^2)
L2EJ:=simplifier(absJ^2+absE^2-2*absJ*absE+ordJ^2+ordE^2-2*ordJ*ordE)
Ce qui permet au passage d'avoir les lignes trigo de pi/5 et 2pi/5
Merci pour la figure, voilà du temps de gagné !

fred
Messages : 46
Inscription : mer. sept. 09, 2009 7:29 pm

Re: distance2 (ou longueur2)

Message par fred » sam. mai 07, 2011 9:34 pm

ordE:=simplifier(im((E+F)/2))
absE:=sqrt(simplifier(1-(ordE)^2))
ordJ:=simplifier(im((J+G)/2))
oui... mais cela ne me plaît pas ! Je veux montrer à des collègues la puissance de Xcas et je veux qu'ils puissent l'utiliser avec leurs élèves et sans rencontrer des problèmes dès le début (ensuite quand on est fan, on fait abstraction :lol: ).
Derrière ce bug se cache un exercice de 1ereS (pas de complexes pour le moment - j'avais donc utilisé les fonction abscisse(E) et ordonnee(E)). Dans cet exo il y a une équation de degré 2 facile, une plus compliquée et ensuite des calculs franchement lourds... mais si Xcas complique la tâche, cela ne va pas être sympa...

question naïve : ça veut dire quoi "rootof" et que signifient les nombres entre crochets qui suivent ?

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

Re: distance2 (ou longueur2)

Message par parisse » dim. mai 08, 2011 6:53 am

La raison de cette erreur de signe, c'est un choix de branche dans des calculs de racine carrée. Explication: si vous faites longueur2(E,J), vous voyez apparaitre des exp(-ln(5)/2) et des exp(-ln(5)) qui sont des "variables généralisées" dans les racines carrées, quand simplify essaie de normaliser les racines carrées avant de réécrire les exp(ln) il a une racine carrée d'un polynome en ces 2 variables et donc un choix de signe à faire, d'où le message en bleu:
Warning, choosing root of [1,0,%%%{80,[2,0]%%%}+%%%{20,[0,2]%%%}+%%%{-24,[0,1]%%%}+%%%{-44,[0,0]%%%},0,%%%{1600,[2,2]%%%}+%%%{-1920,[2,1]%%%}+%%%{576,[2,0]%%%}] at parameters values [58,43]
Comme je n'ai pas encore écrit le bout de code qui permettrait au système de savoir que ces 2 variables sont exp(-ln(5)/2) et exp(-ln(5)), il fait un choix au hasard (par exemple 58,43 ici) et on a en gros une chance sur 2 de tomber sur le bon signe. En revalidant plusieurs fois, on peut obtenir le bon signe. Evidemment, ce n'est pas très satisfaisant, aussi (et avant que j'écrive ce morceau de code manquant) on peut aider le système en faisant exp2pow avant simplify, ce qui remplace les exp(-ln) par leur valeur.
Concernant les rootof, c'est une notation qui permet de manipuler des extensions algébriques: rootof(P,Q) vaut P(alpha) où alpha est une racine du polynôme irréductible (sur les rationnels) Q. Ici P et Q sont représentés par leurs coefficients par ordre décroissant.

fred
Messages : 46
Inscription : mer. sept. 09, 2009 7:29 pm

Re: distance2 (ou longueur2)

Message par fred » dim. mai 08, 2011 10:43 am

Merci pour ces réponses.
Je vais changer mon exercice, car le passage par les exp et ln ne me plaît dans ce cas.

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

Re: distance2 (ou longueur2)

Message par parisse » dim. mai 08, 2011 1:54 pm

bon, j'ai programmé un correctif, je pense avoir des exécutables la semaine prochaine (pour les versions instables).

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

Re: distance2 (ou longueur2)

Message par alb » dim. mai 08, 2011 2:26 pm

Pas facile de comprendre à quoi servent les rootof
Il faut d'abord se reporter au manuel, par exemple Aide/Index/taper rootof/Details
Ainsi rootof(([1,7],[1,1,-6])) vaut 9
Mauvais exemple le deuxième argument n'est pas irreductible sur Q (voir rq parisse ci-dessous)
Autre exemple: rootof([1,1,1],[1,-2,-2]) vaut 3*sqrt(3)+6
Je ne sais pas si j'ai bien compris leur utilisation, voici ce que j'ai en tête:
Soit le polynôme:
X^4-16X^3+20X-1
Soit A sa plus grande racine. Je tape donc:
A:=rootof([[1,0],[1,0,-16,20,-1]])
Pour le calcul formel on se fiche de l'expression de A par radicaux (qui la plupart du temps n'existe pas),pour info et pour vérification c'est:
Arad:=(-sqrt(2)+sqrt(20*sqrt(2)+30))/2
Effectivement simplifier(A-Arad) renvoie 0
L'intérêt réside (?) dans le fait de pouvoir remplacer une expression de A par un polynôme. Par exemple:
B:=normal(9*(2A+3)/(A-2)) renvoie
rootof([[7,14,-84,-10],[1,0,-16,20,-1]]) ce qui se traduit par:
9*(2A+3)/(A-2)=7A^3+14A^2-84A-10
Continuons:
C:=normal(36/(sqrt(3-sqrt(5)))) renvoie:
rootof([[5,7,-63,19],[1,0,-16,20,-1]]) ce qui se traduit par:
36/(sqrt(3-sqrt(5)))=5A^3+7A^2-63A+19
Dernière modification par alb le dim. mai 08, 2011 5:04 pm, modifié 1 fois.

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

Re: distance2 (ou longueur2)

Message par alb » dim. mai 08, 2011 4:22 pm

Je crois que j'ai une erreur de syntaxe dans rootof.
J'ai un crash avec:
normal(rootof([1,0],[1,-1,-6,2,4])-(1+sqrt(3)))
Dernière modification par alb le dim. mai 08, 2011 4:29 pm, modifié 1 fois.

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

Re: distance2 (ou longueur2)

Message par parisse » dim. mai 08, 2011 4:29 pm

Attention, le 2ème argument de rootof doit etre un polynome irreductible sur Q, ce qui n'est pas le cas ici, et ce n'est pas vérifié actuellement.

Répondre