sympy 收集未定义的函数
sympy collect undefined functions
我在 sympy 中有一个表达式,它是评估函数 f
的线性组合。示意图
expr = Sum_{m,n} c_{m,n} f(x+a_m,y+a_n)
其中 c_{m,n}
是取决于变量 x,y
的系数。一个非常简单的例子是
import sympy as sp
x, y = sp.symbols("x, y")
f = sp.Function("f")(x,y)
expr = 0
for i in range(0,3):
expr += (x-i)* f.subs({x: x+2*i, y: y+3*i})
在我的实际代码中 expr
是一长串求和的结果,函数 g
不像这里那样简化。有没有一种有效的方法可以将具有不同参数的函数分组在一起,就像 collect(expr)
对多项式所做的那样?我所追求的是获得一个结构化列表:
In: someFunction(...)
Out: [..., [c_{m,n}, x+a_m, y+a_n ], ...]
在上面的例子中
In: someFunction(expr)
Out: [[x, x, y], [x - 1, x + 2, y + 3], [x - 2, x + 4, y + 6]]
我不确定这是否完全符合您的要求,但您可以使用模式匹配:
In [27]: expr
Out[27]: x⋅f(x, y) + (x - 2)⋅f(x + 4, y + 6) + (x - 1)⋅f(x + 2, y + 3)
In [28]: a, b, c = symbols('a, b, c', cls=Wild)
In [29]: pattern = a*f(b, c)
In [30]: for term in Add.make_args(expr):
...: print(term.match(pattern))
...:
{b_: x, c_: y, a_: x}
{b_: x + 2, c_: y + 3, a_: x - 1}
{b_: x + 4, c_: y + 6, a_: x - 2}
我在 sympy 中有一个表达式,它是评估函数 f
的线性组合。示意图
expr = Sum_{m,n} c_{m,n} f(x+a_m,y+a_n)
其中 c_{m,n}
是取决于变量 x,y
的系数。一个非常简单的例子是
import sympy as sp
x, y = sp.symbols("x, y")
f = sp.Function("f")(x,y)
expr = 0
for i in range(0,3):
expr += (x-i)* f.subs({x: x+2*i, y: y+3*i})
在我的实际代码中 expr
是一长串求和的结果,函数 g
不像这里那样简化。有没有一种有效的方法可以将具有不同参数的函数分组在一起,就像 collect(expr)
对多项式所做的那样?我所追求的是获得一个结构化列表:
In: someFunction(...)
Out: [..., [c_{m,n}, x+a_m, y+a_n ], ...]
在上面的例子中
In: someFunction(expr)
Out: [[x, x, y], [x - 1, x + 2, y + 3], [x - 2, x + 4, y + 6]]
我不确定这是否完全符合您的要求,但您可以使用模式匹配:
In [27]: expr
Out[27]: x⋅f(x, y) + (x - 2)⋅f(x + 4, y + 6) + (x - 1)⋅f(x + 2, y + 3)
In [28]: a, b, c = symbols('a, b, c', cls=Wild)
In [29]: pattern = a*f(b, c)
In [30]: for term in Add.make_args(expr):
...: print(term.match(pattern))
...:
{b_: x, c_: y, a_: x}
{b_: x + 2, c_: y + 3, a_: x - 1}
{b_: x + 4, c_: y + 6, a_: x - 2}