Comment coder une fonction avec plusieurs sommes arithmétiques
Résolu
ErnstP
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
ErnstP Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
ErnstP Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Comment coder une fonction avec plusieurs sommes arithmétiques
- Fonction si et - Guide
- Application pour apprendre à coder - Guide
- Comment coder son whatsapp - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Fonction miroir - Guide
4 réponses
Bonjour
Ce que veut dire eric (salut à toi), c'est que ta question est bien trop vague.
Il te faudrait en dire un peu, voir beaucoup plus sur le "modèle analytique" espéré
Cdlmnt
Ce que veut dire eric (salut à toi), c'est que ta question est bien trop vague.
Il te faudrait en dire un peu, voir beaucoup plus sur le "modèle analytique" espéré
Cdlmnt
Bonjour,
Le problème est le suivant:
Un cable relie un point A à un point B sans avoir pour trajectoire une ligne droite. Ce cable peut être placé dans un repère orthonormé. A et B sont placés sur l'axe des abscisses (X). Il faut voir le cable comme une ligne brisée en différents segments. Les changements de directions du cable permettent de le découper en n segments qui peuvent êtres considérés comme des vecteurs.
Xi correspond à la projection du vecteur i sur l'axe des abscisses et Yi correspond a la projection sur l'axe des ordonnés (Y). Sur chaque vecteur ou segment s'applique une force Fi suivant l'axe (Y). C'est cette force qui a entrainé le déplacement de la section du cable suivant l'axe Y et qui a empêché le cable de relier le point A au point B de façon rectiligne. Chaque Fi étant de valeur différente, le déplacement du cable n'est pas homogène et les sections ont été plus ou moins décalées suivant l'axe (Y).
Imaginons que n = 10
J'aurai alors deux colones:
-une colone contenant les 10 valeurs des Xi dans les cellules A1 jusqu'à A10
-une colone contenant les 10 valeurs des Fi dans les cellules B1 jusqu'à B10
Les valeurs Ay et Ax sont deux autres forces qui sont également connues elle représentent les forces qui s'appliquent à l'extrémité du cable c'est à dire le point A qui est immobile.
Je pourrais calculer chaque Yi à partir de ces valeurs mais ce n'est évidemment pas le but puisqu'il faudra ensuite pouvoir l'appliquer à n sections.
Etant incapable de quoi que ce soit en code je ne sais pas comment indexer chaque valeurs Xi et Fi pour pouvoir ensuite y faire appel dans une fonction écrite en VBA qui me donnera le Yi correspondant.
Comme on peut le voir dans la fonction cités ds mon premier message chaque Yi sera dépendant des forces Fi qui s'appliquent sur chaque segment du cable et des forces Ax et Ay dues au point de fixation du cable. ( L'équation est en fait obtenue en considérant que les moments des forces s'annulent à l'équilibre.)
La partie qui me pose le plus problème est le second terme du numérateur: comment faire pour coder cette double somme?
J'ai regardé comment écrire des sommes arithmétiques en VBA mais je ne trouve pas comment faire intervenir plusieurs sommes ayant des bornes interdépendantes à la fois. J'ai pensé qu'il fallait combiner plusieurs boucles "for" mais je n'y arrive pas.
Voila je veux bien croire que meme avec ce long message ca soit toujours très floue. Je n'ai toujours pas commencer à coder puisque j'essaye justement de traduire mon équation en code.
Si vous avez des idées, merci.
cordialement
Le problème est le suivant:
Un cable relie un point A à un point B sans avoir pour trajectoire une ligne droite. Ce cable peut être placé dans un repère orthonormé. A et B sont placés sur l'axe des abscisses (X). Il faut voir le cable comme une ligne brisée en différents segments. Les changements de directions du cable permettent de le découper en n segments qui peuvent êtres considérés comme des vecteurs.
Xi correspond à la projection du vecteur i sur l'axe des abscisses et Yi correspond a la projection sur l'axe des ordonnés (Y). Sur chaque vecteur ou segment s'applique une force Fi suivant l'axe (Y). C'est cette force qui a entrainé le déplacement de la section du cable suivant l'axe Y et qui a empêché le cable de relier le point A au point B de façon rectiligne. Chaque Fi étant de valeur différente, le déplacement du cable n'est pas homogène et les sections ont été plus ou moins décalées suivant l'axe (Y).
Imaginons que n = 10
J'aurai alors deux colones:
-une colone contenant les 10 valeurs des Xi dans les cellules A1 jusqu'à A10
-une colone contenant les 10 valeurs des Fi dans les cellules B1 jusqu'à B10
Les valeurs Ay et Ax sont deux autres forces qui sont également connues elle représentent les forces qui s'appliquent à l'extrémité du cable c'est à dire le point A qui est immobile.
Je pourrais calculer chaque Yi à partir de ces valeurs mais ce n'est évidemment pas le but puisqu'il faudra ensuite pouvoir l'appliquer à n sections.
Etant incapable de quoi que ce soit en code je ne sais pas comment indexer chaque valeurs Xi et Fi pour pouvoir ensuite y faire appel dans une fonction écrite en VBA qui me donnera le Yi correspondant.
Comme on peut le voir dans la fonction cités ds mon premier message chaque Yi sera dépendant des forces Fi qui s'appliquent sur chaque segment du cable et des forces Ax et Ay dues au point de fixation du cable. ( L'équation est en fait obtenue en considérant que les moments des forces s'annulent à l'équilibre.)
La partie qui me pose le plus problème est le second terme du numérateur: comment faire pour coder cette double somme?
J'ai regardé comment écrire des sommes arithmétiques en VBA mais je ne trouve pas comment faire intervenir plusieurs sommes ayant des bornes interdépendantes à la fois. J'ai pensé qu'il fallait combiner plusieurs boucles "for" mais je n'y arrive pas.
Voila je veux bien croire que meme avec ce long message ca soit toujours très floue. Je n'ai toujours pas commencer à coder puisque j'essaye justement de traduire mon équation en code.
Si vous avez des idées, merci.
cordialement
Oulalaaaa, tout ça ? à l'heure du sans fil ?
Pour l'instant, perso j'ai compris la 1ère ligne...
Sans doute qu'un fichier avec une table des données de qq lignes et un exemple détaillé de ce que tu veux calculer (quoi, comment, avec quoi) rendra les choses plus concrètes à ceux qui se pencheront dessus (moi je vais être plutôt dans les valises...).
cjoint.com et coller ici le lien fourni.
eric
Pour l'instant, perso j'ai compris la 1ère ligne...
Sans doute qu'un fichier avec une table des données de qq lignes et un exemple détaillé de ce que tu veux calculer (quoi, comment, avec quoi) rendra les choses plus concrètes à ceux qui se pencheront dessus (moi je vais être plutôt dans les valises...).
cjoint.com et coller ici le lien fourni.
eric
Voila j'ai deux colonnes de valeurs et je cherche a coder la fonction qui me donnera les valeurs de la troisième colonne. Appelons cette fonction G, c'est celle du premier message.
X1 F1-------------> Y1= G(X1)= Ay*X1
X2 F2-------------> Y2= G(X1, X2, F1)= Ay*(X1+X2) - F1*X2
X3 F3-------------> Y3= G(X1, X2, X3, F1, F2)= Ay(X1+X2+X3) - F1(X2+X3) - F2*X3
X4 F4-------------> Y4= G(X1, X2, X3, X4, F1, F2, F3) = Ay(X1+...+X4) - F1*(X2+X3+X4) - F2*(X3+X4) - F3*X4
X5 F5-----------> Y5= G(X1, X2, X3, X4, X5, F1, F2, F3,F4)= .....
X1 F1-------------> Y1= G(X1)= Ay*X1
X2 F2-------------> Y2= G(X1, X2, F1)= Ay*(X1+X2) - F1*X2
X3 F3-------------> Y3= G(X1, X2, X3, F1, F2)= Ay(X1+X2+X3) - F1(X2+X3) - F2*X3
X4 F4-------------> Y4= G(X1, X2, X3, X4, F1, F2, F3) = Ay(X1+...+X4) - F1*(X2+X3+X4) - F2*(X3+X4) - F3*X4
X5 F5-----------> Y5= G(X1, X2, X3, X4, X5, F1, F2, F3,F4)= .....
Un essai, mais le résultat ..... ?
http://www.cjoint.com/c/GFom6pqesI8
Cdlmnt
http://www.cjoint.com/c/GFom6pqesI8
Cdlmnt
Merci beaucoup pour le fichier.
J'ai eu un problème à l'ouverture. Le message disait que le fichier était endommagé et devait être réparé pour être ouvert. Après réparation j'ai pu l'ouvrir mais seulement en partie et je n'arrive pas à lancer la macro ni à voir comment elle est faite. Néanmoins la colonne sans macro constitue deja une façon plus intéressante d'écrire l'équation. Merci pour le coup de main. Concernant la macro as tu une idée sur l'origine du problème. C'est peut être juste un problème de compatibilité. J'utilise excel sur mac, je sais que ca peut être la source de bcp de problèmes. Merci bcp.
Cordialement
J'ai eu un problème à l'ouverture. Le message disait que le fichier était endommagé et devait être réparé pour être ouvert. Après réparation j'ai pu l'ouvrir mais seulement en partie et je n'arrive pas à lancer la macro ni à voir comment elle est faite. Néanmoins la colonne sans macro constitue deja une façon plus intéressante d'écrire l'équation. Merci pour le coup de main. Concernant la macro as tu une idée sur l'origine du problème. C'est peut être juste un problème de compatibilité. J'utilise excel sur mac, je sais que ca peut être la source de bcp de problèmes. Merci bcp.
Cordialement
Je l'ouvre sans problème
La macro est basée sur la formule simplifiée
Cdlmnt
La macro est basée sur la formule simplifiée
Const celn As String = "B4" Const celAx As String = "B5" Const celAy As String = "B6" Const celX1 As String = "B7" Const coXi As String = "B" Const coFi As String = "C" Const coYi As String = "D" Const lideb As Byte = 11 Public Sub OK() Dim li As Long, lifin As Long, n As Byte, k As Byte, k1 As Byte, k2 As Byte Dim Ax As Double, Ay As Double Dim TX() As Double, TY() As Double, TF() As Double Dim AyFF As Double n = Range(celn).Value Ax = Range(celAx).Value Ay = Range(celAy).Value ReDim TX(1 To n) ReDim TY(1 To n) ReDim TF(1 To n) For k = 1 To n TX(k) = Range(coXi & lideb + k - 1).Value TF(k) = Range(coFi & lideb + k - 1).Value Next k TY(1) = Ay * TX(1) Range(coYi & lideb).Value = TY(1) For k = 2 To n TY(k) = TY(k - 1) AyFF = Ay For k1 = 1 To k - 1 AyFF = AyFF - TF(k1) Next k1 TY(k) = TY(k) + AyFF * TX(k) Range(coYi & k + lideb - 1).Value = TY(k) Next k 'Range(coYi & lideb).Resize(n, 1) = Application.Transpose(TY) End Sub
Cdlmnt
C'est à dire ?
Car pour l'instant à part te répondre "du mieux que tu peux" c'est tout ce que m'inspire ta question.