Bonjour tout le monde,
Pour créer un logiciel d'équilibrage statique et dynamique d'un objet en rotation, je dois résoudre un système à 4 inconnues et 4 équations non linéaires.
J'utilise donc la fonction fsolve du module math de Python (3.5) (ainsi que cmath pour m'affranchir des problèmes de racine négative) :
Seulement, les résultats que me renvoie Python ne sont pas corrects (si je les injecte dans les équations, les équations ne s'annulent pas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 def syst(var) : m_stat, m_dyn, x_stat, x_dyn = var[0], var[1], var[2], var[3] eq1 = M * X_cdg + m_stat * x_stat + m_dyn * x_dyn eq2 = M * Y_cdg + m_stat * cmath.sqrt(R**2 - x_stat**2) + m_dyn * cmath.sqrt(R**2 - x_dyn**2) eq3 = D + m_stat * cmath.sqrt(R **2 - x_stat **2) * z_stat + m_dyn * cmath.sqrt(R **2 - x_dyn **2) * z_dyn eq4 = E + m_stat * x_stat * z_stat + m_dyn * x_dyn * z_dyn res = [eq1, eq2, eq3, eq4] return res sol_ini = [100, 100, 0, 0] array1 = fsolve(syst,sol_ini);
Je sais que suivant l'initialisation, les résultats seront différents. Seulement l'initialisation correcte n'est pas connue, le but étant d'équilibrer des objets complexes qui seraient trop fastidieux à équilibrer à la main.
Existent-ils d'autres méthodes de résolution de système d'équations non linéaires qui seraient plus indiquées pour mon problème ?
Sachant que je résout mon système pour un z_stat et un z_dyn donnés (boucle d'itérations sur z_stat puis à l'intérieur une autre boucle d'itérations sur z_dyn), donc c'est assez lourd comme programme.
Merci d'avance !
Partager