Le langage SMS est exclu sur les forums ProgBoards, tout message ne respectant pas la charte sera déplacé, modifié, ou supprimé par nos modérateurs.

Forum ProgBoards » Café » Problème mathématique pour développement d'un petit programme

djedje-08
ProgBoarder
Citer Windows 2000 Opera 9 - Posté le 22/09/2009 à 21:19
Bonjour à tous,

Je me permets de vous solliciter parce que j'ai un petit problème mathématique que je n'arrive pas à résoudre :
Je suis en train de m'amuser à essayer de concevoir un petit programme (en Quick Basic) qui aura pour finalité de commandé des moteurs pas à pas afin de convertir un tour à métaux "classique" en "une sorte" de tour à commande numérique.
Bref voila mon problème :
(Par un exemple, ce sera plus simple à la fois à expliquer et à comprendre)
Je dois passer d'un diamétre de 20mm à un diamétre de 12mm en 4 passes ((20-12)/2 = 4 passes), sachant que l'épaisseur maximale d'une passe est de 4mm et que l'épaisseur minimale d'une passe est de 0.4mm ; on ne peut pas passer directement de 4mm à 0.3mm, ça doit se faire progressivement (sinon on dit que la pièce "cede").
Exactement mon problème est que je ne trouve pas le moyen de calculer l'épaisseur de chacune de mes passes ...
Bien sur, en pratique, quand je tourne manuellement une pièce je fais ça à ma sauce (par ex 1x4mm, puis 1x3mm ensuite 1x0.6mm enfin 1x0.4mm)

Je précise qu'il est tout à fait possible d'effectuer plusieurs passes d'une même profondeur ; j'ajoute également qu'il n'y a pas de valeur imposée par épaisseur de passe.

En fait pour résumé, je dois trouver une formule qui me permette en 4 nombres de passer de la valeur 4 à la valeur 0.4 de façon progressive sachant que la somme de ces chiffres doit faire 8.

Est-ce que quelqu'un pourrait m'aider à trouver une formule pour calculer l'épaisseur de chacune de mes passes ?

Merci d'avance (à ceux qui ont une grosse bosse des maths lol)
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 22/09/2009 à 23:55
(héhé Salutations.

Résumons. Dans ton exemple, nous pouvons dire que :
Epaisseur de la première passe : P1 = 4 mm.
Epaisseur de la deuxième : P2 = Inconnue …
Epaisseur de la troisième : P3 = Inconnue …
Epaisseur de la quatrième : P4 = 0,4 mm
La somme P1 + P2 + P3 + P4 = 8 mm
Tu nous dit : ‘Je précise qu'il est tout à fait possible d'effectuer plusieurs passes d'une même profondeur’. Il est donc possible que nous ayons l’égalité : P2 = P3 et alors (en remplaçant par les valeurs) : 4 + 2 P2 + 0,4 = 8.
Cette petite équation est satisfaite pour : P2 = 1,8 c’est-à-dire (8 - P1 - P4)/2.
Les passes seront de 4, 1.8, 1.8 et 0.4.
Est-ce la solution que tu recherches ?

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
djedje-08
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 23/09/2009 à 06:54
Bonjour; SFLPMEA, et merci de t'interesser à mon problème.
Effectivement avec mon exemple ta solution qui consiste à donner P2=P3 peut fonctionner .
Cependant, je dois y mettre un bémols :
1° L'idéal serait que P3 soit <= à 1mm, ceci permettrait de limiter des déformations dûes à une coupe (assez importante) de 1.8mm.
2° Si je dois passer du diamètre 50mm au diamètre 20mm (donc en 15 passes), toujours avec P1=4 et P15=0.4, avec ta solution de calcul j'aurai donc 4+13x+0.4=30 donc x=1.96923 (autant dire 2). Et la le problème c'est qu'il y a trop d'écart entre P14 et P15.

J'aimerai réussir à passer progressivement de 4 à 0.4mm. Aurais tu une autre idée ?
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 23/09/2009 à 09:38
(héhé Salutations.

Cela me semblait trop simple, mais il y avait un piège ….
Il y a un truc qui m’échappe. Tu nous dis : « Si je dois passer du diamètre 50mm au diamètre 20mm (donc en 15 passes) ….. ». Tu as à ‘grignoter’ (50 – 20) / 2 = 15 mm. Pourquoi « 15 passes » ?
Il parait qu’un problème bien posé est à moitié solutionné (tu n’avais pas dit que l’avant-dernière coupe devait être au maxi de 1,8 mm).
Je vais continuer à réfléchir ( (question) ).

(héhé Salutations.
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 23/09/2009 à 10:32
(héhé Salutations.

Essayons de poser ton problème de façon complète.

Pour passer d’un diamètre Do (Do <= 100 (question) ) à un diamètre final Df (Df > = 10 (question) ) nous devons effectuer N passes. Chacune des passes à un maximum de 4 mm et un minimum de 0.4 mm.
La dernière passe (Dn) doit être de 0,4 mm et l’avant-dernière (Dn-1) de 1 mm au maximum.

Dans l’exemple « 4 passes » (Les passes seront de 4, 1.8, 1.8 et 0.4.) la solution devient :
P1 = 4, P2 = 8 – 4 – 1 – 0.4 = 3.6, P3 = 1, P4 = 0.4 (la somme est bien 8 )

Un autre exemple Do = 60, Df = 20 (à enlever 20, (60 - 20) / 2)
J’aurai Dn = 0.4 mm, Dn-1 = 1 et je dois enlever 18.6 mm par ailleurs.
Il me faut 18.6 / 4 = 5 passes de 18.6 / 5 = 3.72

Qu’en penses-tu ?

(héhé Salutations
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
neamar
Modérateur
RemonterCiter Linux Firefox 2 - Posté le 23/09/2009 à 10:48
Soit n le nombre de passe
Soit x le numéro de passe actuel (0 pour la première passe, n pour la dernière)

La profondeur de passe p pourrait alors etre :

p=.4 + 3.6*(n-x)/n

Première passe : p_0=.4 + 3.6*1 = 4 comme demandé
Dernière passe : p_n=.4 + 3.6*0 = .4 comme voulu.

Entre les deux, on a bien une décroissance : http://www.wolframalpha.com/input/?i=plot+.4+%2B+3.6*%2810-x%29%2F10+between+0+and+10

Cela te convient-il ?
Si tu le souhaites, tu peux adapter la fonction (au lieu d'une fonction linéaire, utilise une fonction exponentielle ou trigonométrique) pour avoir des grandes passes au début et des passes plus courtes sur la fin : une courbe ainsi par exemple : http://www.wolframalpha.com/input/?i=plot+.4+%2B+3.6%281+-+cos%28%2810-x%29*pi%2F20%29%29+between+0+and+9
de formule
p = .4 + 3.6*(1 - cos((n-x)*pi/2n))
Mais peut etre est-ce plus compliqué que ce que tu désirais ? Tiens nous au courant !

Edité par neamar ( 23/09/2009 10:49:55 )
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it.

http://neamar.fr
djedje-08
ProgBoarder
RemonterCiter Windows NT Msie 6 - Posté le 23/09/2009 à 12:57
J'aime bien le graphique qui est donné par la formule de neamar.
p = .4 + 3.6*(1 - cos((n-x)*pi/2n))

Cette solution me permet en effet d'optimiser le nombre de coupe, et de limiter la déformation de ma pièce lors des passes de finition.
Je pense donc utilsier cette formule dans mon petit proramme (quick basic) avec une boucle FOR/NEXT ce qui me permettra de trouver facilement N. Qu'en pensez vous ?

Donc si j'ai bien compris :
P=épaisseur de ma passe
N=numéro de ma passe

Mais x correspont à quoi ? L'épaisseur à couper ? Le nombre de passes ?

J'essaye de réécrire la formule :

P=Pmin+ (Pmax-Pmin)*(1 - cos((N-X)*pi/2N))

P=épaisseur de la passe "courante"
Pmin=épaisseur minimale d'une passe
Pmax=épaisseur maximale d'une passe
N=numéro de la passe courante

C'est bien ça ?

Encore merci de vous interesser à ma question (sourire)
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 23/09/2009 à 13:48
(héhé Salutations.

Attention à l'avant-dernière passe de 1 mm au maximum.
neamar ne devait pas être au courant de cette contrainte et l'utilisation des formules devra être adaptée pour la respecter. Si le premier calcul donne moins, parfait ou alors, dans le cas contraire, recommencer en tenant compte de cette obligation.
Sinon elles semblent parfaites. Vu les résultats presque identiques (graphiquement) adopter celle dont l'application semble la plus simple.
Avec quel degré de précision doivent être calculées les profondeurs de passe (dixième, centième, millième de mm) ?

(héhé Salutations.

AJOUT : Y-a-t-il un problème de nombre maxi de passes ?
Il ne faudrait pas que le calcul donne 10 passes de 0.2 (exclamation) par exemple

Edité par SFLPMEA ( 23/09/2009 13:58:04 )
Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
neamar
Modérateur
RemonterCiter Linux Safari - Posté le 23/09/2009 à 16:49
Sflpmea, ma solution finit forcément par une passe de 0.4mm
P est bien la profondeur, n est le nombre total de passes que tu souhaites faire (10 dans mon exemple).
Debugging is twice as hard as writing the code in the first place.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it.

http://neamar.fr
SFLPMEA
ProgBoarder
RemonterCiter Windows XP Firefox 3 - Posté le 23/09/2009 à 17:04
(héhé Salutations.

neamar, d'accord pour la dernière passe, mais :
La dernière passe (Dn) doit être de 0,4 mm et l’avant-dernière (Dn-1) de 1 mm au maximum.

J'ai été piégé lors de ma proposition.

Il n'y a peut-être pas intérêt à fixer dès le départ un nombre de passes, car, sauf erreur de ma part, un passage à 2 ou 4 mm, cela doit être le même temps d'exécution. Il faut donc rechercher le minimum de "coups" et assurer par ailleurs leur "dégressivité"
Donc ....

(héhé Salutations

Moi, mon ordinateur, je l'ai baptisé "Billy" ...
En remerciement, je reçois beaucoup de pages bleues !
djedje-08
ProgBoarder
RemonterCiter Windows XP Msie 6 - Posté le 23/09/2009 à 20:18
Dans l'absolut, peu importe ne nombre de passes qu'on utilise pour tourner une pièce

Edité par djedje-08 ( 23/09/2009 20:21:14 )

Poster une réponse

STOP aux fautes volontaires !
Message
Formatage
Note: pour partager du code source, merci d'utiliser le wall !
Smileys (sourire) (yekyek) (clein d'oeil) (désapprouve) (triste) (cool) (langue) (confus) (gêné) (neutre) (eek) (surpris) (diable) (flèche) (exclamation) (question) (diable) (idée) (méchant)
Pseudonyme
Recopiez le code
v6 © Computaid SPRL 2005-2012 - Tous droits réservés - Hébergé par eTigris - Page générée en 0,067 s - Crédits - Stats
1 connecté