症状:如何用 exp(-i.w.t) 项简化函数?

如何解决症状:如何用 exp(-i.w.t) 项简化函数?

我使用 sympy 用虚数指数项 (exp(i.a)) 进行符号计算,但我在简化方面遇到了问题。 比如我得到如下函数(经过一些哈密顿对角化和时间演化,这不是本题的问题):

import sympy as sp
w,th,t =sp.symbols("omega theta t",real=True)
myFunc = (sp.exp(sp.I*w*t)*sp.sin(th)**2 + sp.exp(-sp.I*w*t)*sp.cos(th)**2)*(sp.exp(sp.I*w*t)*sp.cos(th)**2 + sp.exp(-sp.I*w*t)*sp.sin(th)**2) + sp.sin(2*th)**2*sp.sin(w*t)**2

在计算过程中,sin(w.t) 和 cos(w.t) 项是从 exp(-i.wt) 和 exp(i.wt) 隐式生成的。这是正常的。但是,我无法使用 https://docs.sympy.org/latest/tutorial/simplification.html 中的不同方法来简化它们。

然而,在上面的例子中,如果sinus(wt)明确地被替换为(exp(iwt)-exp(-iwt)) /(2.i))

firstStep=myFunc.subs(sp.sin(w*t),((sp.exp(sp.I*w*t)-sp.exp(-sp.I*w*t))/(2*sp.I)))

(sp.simplify(firstStep)) 输出 1,符合预期。

是否有一些 sympy 函数可以直接简化这样的表达式,其中 exp(i.wt)、exp(-i.wt) 项与 sin(wt)、cos(wt) 项混合?

感谢回答

解决方法

有很多函数可以处理这样的表达式。最简单的简化方法是将 exp 重写为 sin 或将 sin 重写为 exp:

In [22]: myFunc
Out[22]: 
⎛ ⅈ⋅ω⋅t    2       -ⅈ⋅ω⋅t    2   ⎞ ⎛ ⅈ⋅ω⋅t    2       -ⅈ⋅ω⋅t    2   ⎞      2         2     
⎝ℯ     ⋅sin (θ) + ℯ      ⋅cos (θ)⎠⋅⎝ℯ     ⋅cos (θ) + ℯ      ⋅sin (θ)⎠ + sin (2⋅θ)⋅sin (ω⋅t)

In [23]: myFunc.expand()
Out[23]: 
 2⋅ⅈ⋅ω⋅t    2       2         4         2         2           4       -2⋅ⅈ⋅ω⋅t    2       2   
ℯ       ⋅sin (θ)⋅cos (θ) + sin (θ) + sin (2⋅θ)⋅sin (ω⋅t) + cos (θ) + ℯ        ⋅sin (θ)⋅cos (θ)

In [24]: myFunc.rewrite(exp)
Out[24]: 
⎛              2                         2       ⎞ ⎛              2                        2        ⎞                     2                  
⎜⎛ ⅈ⋅θ    -ⅈ⋅θ⎞            ⎛ ⅈ⋅θ    -ⅈ⋅θ⎞   ⅈ⋅ω⋅t⎟ ⎜⎛ ⅈ⋅θ    -ⅈ⋅θ⎞           ⎛ ⅈ⋅θ    -ⅈ⋅θ⎞   -ⅈ⋅ω⋅t⎟   ⎛ 2⋅ⅈ⋅θ    -2⋅ⅈ⋅θ⎞  ⎛ ⅈ⋅ω⋅t    -ⅈ⋅ω⋅t
⎜⎜ℯ      ℯ    ⎟   -ⅈ⋅ω⋅t   ⎝ℯ    - ℯ    ⎠ ⋅ℯ     ⎟ ⎜⎜ℯ      ℯ    ⎟   ⅈ⋅ω⋅t   ⎝ℯ    - ℯ    ⎠ ⋅ℯ      ⎟   ⎝ℯ      - ℯ      ⎠ ⋅⎝ℯ      - ℯ      
⎜⎜──── + ─────⎟ ⋅ℯ       - ──────────────────────⎟⋅⎜⎜──── + ─────⎟ ⋅ℯ      - ───────────────────────⎟ + ─────────────────────────────────────
⎝⎝ 2       2  ⎠                      4           ⎠ ⎝⎝ 2       2  ⎠                      4           ⎠                      16                

 2
⎞ 
⎠ 
──
  

In [25]: myFunc.rewrite(exp).expand()
Out[25]: 1

In [26]: myFunc.rewrite(sin)
Out[26]: 
⎛                            2                                 2⎛    π⎞⎞ ⎛                            2⎛    π⎞                              2
⎜(-ⅈ⋅sin(ω⋅t) + cos(ω⋅t))⋅sin (θ) + (ⅈ⋅sin(ω⋅t) + cos(ω⋅t))⋅sin ⎜θ + ─⎟⎟⋅⎜(-ⅈ⋅sin(ω⋅t) + cos(ω⋅t))⋅sin ⎜θ + ─⎟ + (ⅈ⋅sin(ω⋅t) + cos(ω⋅t))⋅sin 
⎝                                                               ⎝    2⎠⎠ ⎝                             ⎝    2⎠                               

   ⎞      2         2     
(θ)⎟ + sin (2⋅θ)⋅sin (ω⋅t)
   ⎠                      

In [27]: myFunc.rewrite(sin).expand()
Out[27]: 
   4       2           4       2             2       2         2⎛    π⎞        2       2⎛    π⎞    2           2         2           2       
sin (θ)⋅sin (ω⋅t) + sin (θ)⋅cos (ω⋅t) - 2⋅sin (θ)⋅sin (ω⋅t)⋅sin ⎜θ + ─⎟ + 2⋅sin (θ)⋅sin ⎜θ + ─⎟⋅cos (ω⋅t) + sin (2⋅θ)⋅sin (ω⋅t) + sin (ω⋅t)⋅s
                                                                ⎝    2⎠                 ⎝    2⎠                                              

  4⎛    π⎞      4⎛    π⎞    2     
in ⎜θ + ─⎟ + sin ⎜θ + ─⎟⋅cos (ω⋅t)
   ⎝    2⎠       ⎝    2⎠          

In [28]: myFunc.rewrite(sin).expand().trigsimp()
Out[28]: 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?