创建功能矩阵以提高可读性
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
。
我有一个矩阵,我必须在该矩阵上求解特征方程,其中每个元素都是变量 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
。