如何解决如何重写 sympy 中的表达式以遵循用于方程的特定形式?
像这样:
如果我能将第二种形式中的 A、B 和 C 与第一种形式中的 A、B 和 C 分开,那么进入这种形式将有助于我稍后快速进行一些重要的计算。在互联网上搜索了超过 3-4 个小时后,没有任何文档或类似文件可以帮助解决以某种形式重写表达式的问题。我发现的最接近的是 .rewrite()
命令,但这并没有将 sin()
和 cos()
隔离在一起(除非该函数中有一些文档没有提供的隐藏方式)。
谢谢!
解决方法
虽然这可能可以通过匹配来解决,但听起来您只想收集 cos(th3)
和 sin(th3)
的系数。我将展示一个类似的表达式,其中 cos(x)
和 sin(x)
上的集合已完成:
>>> eq = 2*cos(x) + cos(x)*y + sin(x)*cos(y) + 3*sin(x) + pi
>>> gens = cos(x),sin(x)
>>> collect(eq,gens)
(y + 2)*cos(x) + (cos(y) + 3)*sin(x) + pi
>>> [_.coeff(i) for i in gens]
[y + 2,cos(y) + 3]
>>> reps = dict(zip(symbols('A B'),_))
>>> reps[C] = eq.as_independent(*gens,as_Add=True)[0]
>>> dict(reps)
{A: y + 2,B: cos(y) + 3,C: pi}
将其编写为辅助函数,该函数使用 Poly 进行收集和测试以确保生成器中不存在交叉项:
def coeffs(eq,gens):
c = Poly(eq,gens)
co = [c.coeff_monomial(i) for i in gens]
# alternative way to get constant term
co.append(eq.xreplace(dict(zip(gens,[0]*len(gens)))))
return dict(zip(numbered_symbols('C'),co))
>>> coeffs(eq,gens)
{C0: y + 2,C1: cos(y) + 3,C2: pi}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。