【发布时间】:2016-04-15 22:57:01
【问题描述】:
有没有办法让 get dsolve() 使用由不同于 C1、C2 等的序列命名的任意常量?
cse() 允许symbols 参数接受无限的名称生成器,但我没有看到与dsolve() 类似的参数。
我正在求解充满符号电容的电路方程,而 dsolve 常数变得令人困惑。
如果做不到这一点,是否有一种快速的方法可以将任意常量替换为其他常量,例如 k_1、k_2 等?看起来dsolve() 使用 C1、C2 等作为其常量,而我的代码使用 C_1、C_2 等作为电容。我可以在任何地方更改我的命名以使用非标准电容符号,但我不想这样做。
感谢@Marshmallow,我已经开始使用这个包装 dsolve 的例程,让我在事后更改符号。仍然存在碰撞的风险,但现在已经足够了:
def newdsolve(eq,*args,**kwds):
ss=kwds.get('symbols')
sln=dsolve(eq,*args,**kwds)
psyms=((newdsolve.csre.match(n.name),n) for n in eqVc.free_symbols)
if ss and isinstance(ss,str):
subsdict=dict([(n[1],'k_'+n[0].group(1)) for n in psyms if n[0]])
elif ss:
subsdict=dict([(n[1],next(ss)) for n in psyms if n[0]])
else: subsdict={}
return sln.subs(subsdict)
newdsolve.csre=re.compile(r'C(\d+)')
【问题讨论】:
-
我为此开了一个SymPy issue。