Есть ли способ предоставить 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+)')