J'ai un script qui génère automatiquement des équations.
Les équations sont construites à l'aide de symboles symboliques. P>
J'aimerais savoir s'il s'agit ou non de vérifier si les équations sont linéaires. termes de certaines variables. p>
EG. P>
True
3 Réponses :
Une fonction est (conjointement) linéaire dans un ensemble de variables donné si tous les dérivés de second ordre sont identiques zéro (y compris ceux mélangés). Cela peut être vérifié comme suit: dans la boucle, chaque dérivé est pris et vérifié pour l'égalité à zéro. Si sympty ne peut pas décider s'il s'agit de zéro (élever TypeError), il n'est pas identique à zéro. p> sortie: p> Pour vérifier la linéarité séparée (par exemple, séparément en B), déposez des dérivés partiels mélangés: < / p> sortie: p>
Pour développer la réponse à partir de 404, si f xy sub> = 0, puis f yx sub> = 0. Ainsi, le temps de calcul peut être coupé en deux pour la solution de dérivés mixtes. from itertools import combinations_with_replacement
def is_linear(expr, variables):
combs = combinations_with_replacement(variables, 2)
try:
return all(sympy.Eq(sympy.diff(expr, *t), 0) for t in combs)
except TypeError:
return False
Un moyen plus simple serait de vérifier le degré de l'expression en tant que polynôme dans chaque variable.
In [21]: [i for i in eq1.atoms(Pow) if i.base == a] Out[21]: [] In [22]: eq2 = b*a**2 + d + c In [23]: [i for i in eq2.atoms(Pow) if i.base == a] Out[23]: â¡ 2⤠â£a â¦
À quel point les expressions peuvent-elles être complexes?