Page 1 of 2
Enlever valeur absolue d'une expression

Posted:
09 Feb 2012, 22:08
by azerty89
Bonjour à tous,
Je sollicite votre aide sur le programme que j'écris.
Pour faire court, je cherche une solution pour :
1) Soit effacer les termes absolus d'une expression.
Exemple : 2+abs(x) qui donnerait 2+x
2) Soit, cela se rapporte un peu au premier cas, pouvoir préciser que les valeurs non numériques contenues dans les variables sont systématiquement positives et non nulles.
Je séche sur la méthode, j'espère qu'il y en a une !!
Merci !
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 11:57
by Persalteas
les valeurs non numériques contenues dans les variables sont systématiquement positives et non nulles.
Là, il y a un truc que mon cerveau avale pas...
Une valeur non numérique positive ? C'est à dire ?
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 12:39
by azerty89
Oui c'est pas très bien formulé
par exemple :
2*l+5 → calcul
Préciser que l ne peut avoir pour valeur que des valeurs positives, l apparient à R+*
Cela pour éviter que des calculs (de norme, car il s'agit en pratique de composantes de vecteurs) entrainent des abs() dans le résultat...
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 13:24
by Persalteas
Euh, pourquoi ne pas tout simplement le préciser au moment ou la valeur l est choisie ?
ça dépend de ce que tu veux faire exactement.
Ou sinon, mets une condition pour que le calcul ne soit fait que si l est positif-non-nul et sinon ignoré.
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 18:41
by azerty89
Le problème c'est que l n'est jamais choisi. Le programme permet de calculer une expression, il ne fait pas de calcul avec des valeurs fixées....
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 18:44
by Persalteas
mais alors, imaginons que l aie une mauvaise valeur, tu veux qu'il se passe quoi ?
-le calcul soit fait avec la valeur positive ? (j'imagine que ce n'est pas ça)
-le calcul soit ignoré ?
-le calcul soit fait, mais on rajoute un deuxième calcul derrière pour corriger ?
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 19:27
by azerty89
Ben en fait il ne peux pas vraiment y avoir de mauvaise valeur ^^
Le programme en question permet de calculer l'expression du torseur cohésion (pour des calculs de résistance de matériaux) le long de n'importe quelle poutre en 2D. L'utilisateur rentre les coordonnées de la poutre, les efforts excercés, et le programme sort tout les termes du torseur de cohésion.
Les coordonnées de la poutre sont stockés sous forme de matrice, et pour les calculs à effectuer, il me faut des distances entre des points. Je fais appel à norme(), et vu que les coordonnées ne sont pas forcément des valeurs numériques fixées, norme() renvoie des abs().... Mathématiquement correct, mais inutile ici, vu qu'il s'agit de longueurs, qui ne peuvent pas être négative, ni être nulle, ca n'aurait pas de sens...
Au final, "l'algorithme" fonctionne, l'expression calculée correspond principalement à des sommes et des produits de termes.... mais les résultats ne sont pas simplifiés du tout...
Par exemple, je viens de faire un essai sur un cas très simple, le résultat obtenu est :
f*( x+|l|- l ), ce serait parfait si cette valeur absolue pouvait partir, la calcu pourrait faire la simplification pour n'obtenir que f*x.
Du coup face au desespoir (!!), je réfléchis à faire une fonction qui, en convertissant en string, chercherait les abs() de l'expression, recopierait l'expression en contournant cette fonction, pour en suite reconvertir en expression... Mais je trouve ca lourd....
Merci de t'interesser à mon problème !
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 20:37
by Persalteas
AAAAHHhhHhhhhh.....
ça y est j'ai compris. Comme quoi en expliquant tout d'un coup, ça marche mieux.
C'est donc la TI qui te renvoie une valeur en abs(valeur).
je ne l'avais pas compris comme ça, moi je n'ai pas de TI 89 et sur la 83 que j'ai, toute valeur en abs(valeur) est automatiquement transformée en la valeur seule.
Il te faut donc un calcul qui élimine le abs.
ça y est j'ai compris.
J'imagine que faire
- Code: Select all
abs(l)/1
te renvoie quand même abs(l) et non pas l ?
dans ce cas, je viens de demander aux hautes autorités de ce forum qui m'ont dit que:
- Code: Select all
abs(x)|x>0
renverrait X au lieu de abs(x), | voulant dire "tant que".
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 23:13
by azerty89
Inserer une contrainte avec "|" marche bien dans l'écran de calcl, mais dans un programme je n'ai pas réussi à faire fonctionner.
Si quelqu'un connait la syntaxe, je n'ai pas trouvé...
J'ai par contre fait une fonction qui eneleve les valeurs absolues d'une expression. Ca a l'air de fonctionner, mais j'aimerais que ca reste provisoire.... C'est un peu du bricolage !!
Je mets le code, pour info ^^
- Code: Select all
(datain)
Func
local unabs, unabst, pos, dimen, car, par
string(datain)»unabs
Loop
0»par
inString(unabs,"abs(")»pos
If pos=0 Then
expr(unabs)»unabs
Return unabs
EndIf
dim(unabs)»dimen
left(unabs,pos-1)»unabst
pos+4»pos
While posœdimen
mid(unabs,pos,1)»car
If car="(" Then
par+1»par
ElseIf car=")" Then
par-1»par
EndIf
If par=ª1 Then
0»par
Else
unabst&car»unabst
EndIf
pos+1»pos
EndWhile
unabst»unabs
EndLoop
EndFunc
Désolé pour les noms de variables particuliers ^^
Re: Enlever valeur absolue d'une expression

Posted:
10 Feb 2012, 23:16
by Persalteas
Aie... Là, je ne peux plus t'aider, ça sort de mon domaine...
comme je t'ai dit je n'ai pas de 89, je comprends mal leurs codes.
je redemanderai aux connaisseurs comment faire dans un programme.