创建功能矩阵以提高可读性

creating a matrix of function to aid readability

我有一个矩阵,我必须在该矩阵上求解特征方程,其中每个元素都是变量 x 的几个函数的组合。我有每个函数的明确公式,允许我使用矩阵,但问题是表达式非常长,可读性是一场噩梦。我想知道是否有一种方法可以在我的矩阵中定义每个函数,例如:f(x) = "expr of f", g(x)='expr of g' 等等......并使用它们以便结果为:

M = [[f(x)+2*g(x), e(x)**2, ...], ...]

我能做到的地方sympy.solvers.solvers.solve(M.det(), x)。 谢谢。

这里有一种可能性,可以帮助您入门:

eqs = [x, f(x), f(x) + g(x), sin(x), f(x)/g(x)]

def who(e):
    return ','.join(str(i.func) for i in ordered(e.atoms(Function)))

from collections import defaultdict
reps = defaultdict(list)
for i in eqs:
reps[who(i)].append(i)

r = {}
for k,v in reps.items():
if len(v) == 1:
    r[v[0]] = 'n/a'
else:
    for i,vi in enumerate(v):
    r[vi] = '%s_%i'%(k,i)

[i.xreplace(r) for i in eqs] -> ['n/a', 'f', 'f,g_0', 'sin', 'f,g_1']

在你的情况下让 eqs = flatten(M) 最后一步是 Matrix(M).xreplace(r) (或者 M.xreplace(r) 如果 M 是一个矩阵而不是如图所示的列表列表) .

注意:如果您想要某些功能,则必须使用e.atoms(Function) & wanted