Python 辛任意函数域

Python 辛任意函数域,python,sympy,Python,Sympy,我想定义任意函数f。我知道f总是返回一个正数。我希望Symphy能够在运行简化时使用这些知识(特别是简化文档中提到的三个幂规则)。有办法做到这一点吗?我正在寻找类似以下内容的内容: 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) ) *

我想定义任意函数f。我知道f总是返回一个正数。我希望Symphy能够在运行简化时使用这些知识(特别是简化文档中提到的三个幂规则)。有办法做到这一点吗?我正在寻找类似以下内容的内容:

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)

以下是一种不太好的做事方式:

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)

一种解决方法是使用
force=True
选项调用
expand\u power\u base
。这迫使
sympy
执行功率简化,而不考虑假设

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


Function('f')
这样定义的函数此时不支持假设。您需要显式地创建一个子类,如

class f(Function):
    is_positive = True

我不明白你的问题。你们只是想要一个返回随机正数的函数吗?问题不清楚。我添加了一些代码来帮助澄清。如果它还不干净,请告诉我。这对我不起作用。我的实际表达式是迭代的,非常复杂,我需要能够同时使用这三条规则。哇,谢谢你的回答!那么,f类的对象是否能够以正则函数的任何方式使用?或者我还有什么需要补充的吗?它将以同样的方式工作
f=函数('f')
大致相当于
类f(函数):pass