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) :

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);
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).
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 !