python - 如何重写 sympy 中的表达式以遵循用于方程式的特定形式?
问题描述
像这样:
如果我能将第二种形式的 A、B 和 C 与第一种形式分开,那么进入这种形式将有助于我稍后快速进行一些重要的计算。在互联网上搜索了 3-4 多个小时后,没有任何文档或类似的东西可以帮助解决以某种形式重写表达式的问题。我发现最接近的是.rewrite()
命令,但这并没有将sin()
and隔离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}
推荐阅读
- java - 根据属性类型获取 XmlElement 或 XmlValue
- javascript - HtmlUnit获取编码错误的字符串
- c++ - 以自定义类为键的 Unordered_map
- r - ggplot2() 按因子绘制一个变量与自身的关系?
- javascript - 为什么这个 Javascript 可以在浏览器控制台中工作,但不能在 Selenium 的 JavascriptExecutor 中工作?
- python-3.x - 这是将 Keras 与 tensorflow 数据集一起使用的错误吗?
- javascript - Flow 是特定 JavaScript 版本的衍生产品吗?
- java - 如何对稍后才定义的一般对象进行算术编程?
- python - 计算word2vec模型的perplexity
- ios - iOS SDK如何调用Lambda函数?