7
votes

Vérifiez si une équation est linéaire pour un ensemble spécifique de variables

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


1 commentaires

À quel point les expressions peuvent-elles être complexes?


3 Réponses :


3
votes

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

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.

sortie: xxx


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> xxx

sortie: xxx


0 commentaires

2
votes

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


0 commentaires

3
votes

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 ⎦


0 commentaires