1

私は、右辺の定数で線形等価を正規化する適切な方法を (sympy を使用して) 見つけようとしています。例えば:

x + 1 = y

になります:

x - y = -1

これは私のかなりハックな解決策です:

def canonical_linear(f):
""" canonicalise a linear equality """

    lhs = f.lhs - f.rhs
    const_l = [ x for x in lhs.as_ordered_terms() if x.is_number ]

    if len(const_l) == 0:
        const = 0
    elif len(const_l) == 1:
        const = const_l[0]
    else:
        raise NotImplementedError("SHIT")

    return sympy.Eq(lhs - const, -const)

これは改善できますか?乾杯?

4

1 に答える 1

2

solveこれは、SymPyのルーチンのソース コードからのものです。

1262         if all(p.is_linear for p in polys):
1263             n, m = len(polys), len(symbols)
1264             matrix = zeros(n, m + 1)
1265 
1266             for i, poly in enumerate(polys):
1267                 for monom, coeff in poly.terms():
1268                     try:
1269                         j = list(monom).index(1)
1270                         matrix[i, j] = coeff
1271                     except ValueError:
1272                         matrix[i, m] = -coeff
1273 
1274             # returns a dictionary ({symbols: values}) or None
1275             result = solve_linear_system(matrix, *symbols, **flags)

各方程式を多項式に変換し (Polyは、多項式を効率的に処理するための SymPy のクラスです)、多項式が線形の場合は、解く行列を構築するために走査します (最後の列は自由係数です)。

上記のコードは、多項式への変換を示していません。多項式は にpolysあり、自由記号は にありsymbolsます。

于 2012-06-22T12:46:28.350 に答える