Page 1 sur 2

Enlever valeur absolue d'une expression

Message non luPosté: 09 Fév 2012, 22:08
de 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

Message non luPosté: 10 Fév 2012, 11:57
de 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

Message non luPosté: 10 Fév 2012, 12:39
de azerty89
Oui c'est pas très bien formulé :#roll#:

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

Message non luPosté: 10 Fév 2012, 13:24
de 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

Message non luPosté: 10 Fév 2012, 18:41
de 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

Message non luPosté: 10 Fév 2012, 18:44
de 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

Message non luPosté: 10 Fév 2012, 19:27
de 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

Message non luPosté: 10 Fév 2012, 20:37
de 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: Tout sélectionner
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: Tout sélectionner
abs(x)|x>0


renverrait X au lieu de abs(x), | voulant dire "tant que".

Re: Enlever valeur absolue d'une expression

Message non luPosté: 10 Fév 2012, 23:13
de 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: Tout sélectionner
(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

Message non luPosté: 10 Fév 2012, 23:16
de 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.