Instabilité d'un système masse-ressort à 2 noeuds avec RK45 - Python - Programmation
Marsh Posté le 09-07-2019 à 15:57:55
Sans lire le code, si tu places ta masse infinie en haut et que tu la soumets à une force de gravité, ça me semble logique que ça merde, puisse t-il y avoir un rapport ?
Marsh Posté le 09-07-2019 à 17:07:06
MaybeEijOrNot a écrit : Sans lire le code, si tu places ta masse infinie en haut et que tu la soumets à une force de gravité, ça me semble logique que ça merde, puisse t-il y avoir un rapport ? |
Hello, merci pour ta réponse.
Je n'applique la force que sur le node 1, quelque-soit sa position. D'ailleurs si j'applique la gravité sur le noeud de masse infinie j'obtiens comme attendu un non déplacement puisque l'accélération est nulle.
Marsh Posté le 09-07-2019 à 19:56:54
Pour inverser les positions tu fais quoi ?
X = np.array([[1., 1., 1.], # 0 |
Et :
Code :
|
?
EDIT : et qu'est-ce que ça fait si tu fais :
Code :
|
Marsh Posté le 10-07-2019 à 14:41:48
MaybeEijOrNot a écrit : Pour inverser les positions tu fais quoi ?
|
Hello,
Pour inverser les positions je change juste les coordonnées x,y,z de mon noeud 0 et 1
X = np.array([[1., 1., 1.], # 0 |
Je ne touche pas à la masse.
D'ailleurs si je rentre tes paramètres de masse, j'ai bien mon point 1 fixe, et mon point 0 qui est cohérent.
Si je teste
Code :
|
J'ai bien convergence, et cette valeur est bien cohérente puisque ma force est positive. Je tombe sur le même résultat qu'avec un noeud 1 placé en 1, 1, 1
Marsh Posté le 10-07-2019 à 15:49:19
Et tu obtiens quoi comme matrice d'accélération dans les deux configurations ?
Marsh Posté le 10-07-2019 à 16:24:47
Je sors les images de la matrice d'accélération en Y pour le noeud 1 uniquement, le noeud 0 étant fixe dans les deux cas:
Pour la bonne partie, celle qui converge :
Et pour celle qui diverge :
En zoomant on remarque que le début est correct mais l'instabilité augmente au fur et à mesure avec des oscillations :
Et les données brutes, avec la matrice d'accélération en x,y,z pour le noeud 1 dans les deux cas : https://docs.google.com/spreadsheet [...] sp=sharing
Marsh Posté le 10-07-2019 à 18:41:01
Si ce n'est pas la masse c'est peut-être la force.
Si tu inverses ta configuration, ta force ne devrait pas être :
Code :
|
Marsh Posté le 10-07-2019 à 19:06:33
MaybeEijOrNot a écrit : Si ce n'est pas la masse c'est peut-être la force.
|
Non ma force est exacte, je ne change pas la position des noeuds dans ma liste, juste mes positions. C'est ce qui me permet d'appliquer toujours ma force en [1,1], soit la deuxième dimension du node 1. le node 0 étant toujours fixe. De plus j'ai bien mon noeud 0 qui est fixe, donc je ne pense pas que ce soit un problème d'application de la force.
Après pour une erreur dans le calcul de la force c'est possible, mais je trouve ça étonnant que ça fonctionne dans de nombreuses conditions et qu'il y ait quelques configurations ou ça ne fonctionne pas.
Marsh Posté le 09-07-2019 à 15:23:07
Je cherche à modéliser des déformations d'un système avec un certain nombres de noeuds reliés entre eux par des ressorts.
J'ai un résultat un peu inattendu, lorsque mon noeud 0 est en position 0., 0., 0. et mon noeud 1 en position 1., 1., 1. tout fonctionne, et l'effet du ressort est bien cohérent. Le noeud 0 est toujours de masse infinie et le noeud 1 de masse 1 et j'applique une force similaire à la gravité en Y.
Le déplacement du noeud 1 en Y :
Par contre quand j'inverse la position des deux noeuds le ressort ne fait plus effet et mon noeud diverge vers l'infini.
Déplacement du noeud 1 en Y :
Je n'arrive pas à comprendre pourquoi j'obtiens ce résultat, je ne sais pas si c'est une instabilité numérique due au solver, ou si mon calcul de la force du ressort est erronée. J'ai pourtant essayé d'implementer une version standard avec des boucles imbriquées et une version vectorisée. Les deux donnent les mêmes résultats.
Voici mon code :
Quelques précisions :
X contient les positions x,y,z de tous les nodes.
Edges la liaison entre les nodes, ce qui me permet de déduire une matrice de connectivité W (1 les noeuds sont connectés, 0 ils ne le sont pas).
Et d la distance euclidienne entre chaque paire de noeuds
Pouvez-vous m'aider ?
Merci
Message édité par Feitan21 le 09-07-2019 à 17:09:07