Page 1 of 2
simplifier expression
Posted:
14 Dec 2015, 17:39
by kadtexas
Bonjour
Par exemple l'équation d'un plan est ax+by+cz+d=0
Une fois que le programme a déterminé les coefficients a,b,c et d on arrive à:
disp 2x-4y+6z-8=0
Y'a t il moyen de simplifier cette égalité par 2 pour arriver à:x-2y+3z-4=0 ?
Merci pour vos commentaires
Re: simplifier expression
Posted:
14 Dec 2015, 17:52
by Hamza.S
je ne connais pas une fonction qui permet de faire ça mais avec la fonction factor(
tu peux mettre en facteur
Re: simplifier expression
Posted:
14 Dec 2015, 18:06
by kadtexas
Oui la fonction factor() factorise par 2 mais ne simplifie pas!
Re: simplifier expression
Posted:
14 Dec 2015, 18:08
by Hamza.S
la simplification se fait facilement une fois que tu as le facteur commun
Re: simplifier expression
Posted:
14 Dec 2015, 18:23
by Bisam
Tu peux tenter : 2x-4y+6z-8=0 and true
La calculette va essayer de déterminer la valeur de vérité de l'expression en tenant de résoudre. En faisant cela, il arrive souvent qu'elle simplifie l'expression avant de la renvoyer. C'est le cas ici.
Sinon, il est tout-à-fait faisable en Basic de récupérer les coefficients de l'expression, de calculer leur pgcd et de diviser le tout par le pgcd... mais est-ce vraiment nécessaire ?
Re: simplifier expression
Posted:
14 Dec 2015, 20:31
by Hamza.S
voilà pourquoi j'ai pas voulu développer ma pensée j'étais sûr que Bisam aurait un astuce
Re: simplifier expression
Posted:
15 Dec 2015, 22:44
by Bisam
Pour la méthode de simplification en récupérant la liste des coefficients, on peut faire ainsi :
- Code: Select all
Define simplify(eq) = Func
{x, y, z} → var
dim(var) → n
{} → coeffs
left(eq) - right(eq) → eq
For i, 1, n
derivative(eq, var[i]) → coeffs[i]
eq - coeffs[i] * var[i] → eq
EndFor
eq → coeffs[n+1]
eq → pgcd
For i, 1, n
gcd(pgcd, coeffs[i]) → pgcd
EndFor
If left(string(pgcd), 3) = "gcd"
1 → pgcd
Return dotp(coeffs / pgcd, augment(var, {1})) = 0
EndFunc
Cette fonction ne marchera que si l'équation est linéaire et si les variables
x, y, z
sont inutilisées dans le classeur.
PS : Elle marche même s'il n'y a qu'une ou deux variables parmi
x, y, z
, bien sûr... Et je l'ai écrite de sorte qu'il n'y ait qu'une ligne à modifier si jamais vous voulez d'autres variables ou encore les préciser plutôt comme paramètres.
Re: simplifier expression
Posted:
16 Dec 2015, 12:15
by kadtexas
Bonjour Bisam et merci pour l'algorithme que je n'ai pas encore essayé.
Mais ton idée: 2x-4y+6z-8=0 and true march très bien, je l'ai essayée et même ça simplifie une expression avec dénominateur comme 1/3*x-5/6*y+7z-1/4=0.
Est ce que ta fonction "simplify(eq)" apporterai quelquechose en plus ?
Re: simplifier expression
Posted:
16 Dec 2015, 14:05
by Bisam
Je ne pense pas... et elle réussit même moins bien s'il y a des inconnues dans l'expression (genre
$mathjax$2ax+2y+2z=0$mathjax$
), mais elle peut être réutilisée pour d'autres situations.
C'est plutôt un guide à l'usage du programmeur.
Re: simplifier expression
Posted:
16 Dec 2015, 17:45
by kadtexas
Par simple curiosité, comment la calculette arrive à simplifier en utilisant:2x-4y+6z-8=0 and true
L'opérateur and évalue true qui est par définition "vrai' puis évalue 2x-4y+6z-8=0
alors je pense que:que la calculette factorise, donc 2(x-2y+3z-4)=0, produit de facteurs nul donc 2 different de 0 et
x-2y+3z-4=0, plus d'inconnues que d'équations, forcément il y a des solutions donc 2x-4y+6z-8=0 est vraie.
vrai and vrai = vrai.
Ce ne sont que des suppositions de ma part!