/ / sympy ľubovoľný rozsah funkcií - python, sympy

sympy ľubovoľný rozsah funkcií - python, sympy

Chcem definovať ľubovoľnú funkciu f. Viem, že f vždy vráti kladné číslo. Chcem sympatie, aby som mohol využiť tieto znalosti pri spustení zjednodušených postupov (najmä v troch mocenských pravidlách uvedených v zjednodušenej dokumentácii). Existuje spôsob, ako to urobiť? Hľadám niečo ako nižšie:

f = Function("f", positive = True)
g = Function("g", positive = True)
x = symbols("x")
y = symbols("y")
n = symbols("n", real = True)

test = ( f(x) * g(y) ) ** n
# This should work but doesn"t
expand_power_base(test)

odpovede:

0 pre odpoveď č. 1

Funkcie definované ako Function("f") momentálne nepodporujú predpoklady. Musíte vytvoriť explicitne podtriedu, napríklad

class f(Function):
is_positive = True

0 pre odpoveď č. 2

Tu nie je taký skvelý spôsob, ako ísť o veci:

alphabet = list(string.ascii_lowercase)

def assert_positive(value, args):
result = value
for i in range( len(args) ):
a_symbol = symbols( alphabet[i], positive = True)
result = result.subs(args[i], a_symbol)

result = simplify(result)

for i in range( len(args) ):
a_symbol = symbols( alphabet[i], positive = True)
result = result.subs(a_symbol, args[i])

return(result)

0 pre odpoveď č. 3

Jedno riešenie je zavolať expand_power_base s force=True voľba. To si vyžaduje sympy vykonávať zjednodušenie výkonu bez ohľadu na predpoklady.

import sympy as sp

f = sp.Function("f")
g = sp.Function("g")
x, y, n = sp.symbols("x, y, n")

test = ( f(x) * g(y) ) ** n
sp.expand_power_base(test, force=True)

f(x)**n*g(y)**n