我在表格上有一个巨大的象征性表达
expression = factor * (f1*a + f2*b + f3*c + f4*d + f5*e)
其中所有因素a到e都包含几个术语。我:
a = exp(2x) + exp(3x) + sin(Ix).
我想在表单
上创建en数组array = factor * [a,b,c,d,e]
但是没有看到切割器的方式来做到这一点。我曾尝试使用因子函数,但它只给出了上面“表达式”形式的表达式。
到现在为止我已经使用了
print(expression)
然后做了一些暴力复制粘贴因子a到e。由于我将使用比此示例更多的术语获得表达式,因此我希望在没有复制粘贴例程的情况下执行此操作。有什么想法吗?
答案 0 :(得分:2)
这是一个简单的例子,你可以推断更多的术语
import sympy as sp
x = sp.var('x')
f1, f2 = sp.symbols('f1:3')
factor = sp.symbols('factor')
a = x**2 + sp.sin(x) + sp.exp(sp.I * x)
b = sp.log(x)/(x+1)**2
# example expression:
expression = (factor * (f1 * a + f2 * b)).expand()
print(expression)
# collect coefficients of f1 and f2
coeffs = sp.collect(expression.expand(),[f1,f2], evaluate=False)
print(coeffs)
# show the coefficients w/o the factor factor
[(coeffs[f]/factor).simplify() for f in (f1,f2)]
f1*factor*x**2 + f1*factor*exp(I*x) + f1*factor*sin(x) + f2*factor*log(x)/(x**2 + 2*x + 1) {f2: factor*log(x)/(x**2 + 2*x + 1), f1: factor*x**2 + factor*exp(I*x) + factor*sin(x)} [x**2 + exp(I*x) + sin(x), log(x)/(x**2 + 2*x + 1)]