当前位置: 首页 > 知识库问答 >
问题:

用symphy、python将复方程的指数形式转化为极形式

常雅珺
2023-03-14

我正在尝试用python中的Symphy模块求解一个微分方程。这就是我所做的

from sympy import *


t = sympy.Symbol('t')      
k = sympy.Symbol('k')      
m = sympy.Symbol('m')      
x = sympy.Function('x')(t)     

GDE = Eq(m*x.diff(t, 2) + k*x, 0)

solution = dsolve(GDE, x)
display(solution)

现在,我试图得到一个极性形式的解,包括sin,cos和复数项(I),如图所示。在这张图片中,w\n是sqrt(k/m)

我试过了

solution.rewrite(sin) 

但是它返回一个带有双曲函数的表达式。rewrite(cos)也返回一个带有双曲函数的表达式。

我也试过了

solution.rewrite(sin, cos)

但它给出了最初的答案。

有没有办法把这个指数形式的复形转换成没有双曲函数的极形?

谢谢你

共有1个答案

彭浩穰
2023-03-14

您应该将您的符号声明为实数或正数等。否则默认情况下SymPy假设类似于复数:

In [7]: import sympy

In [8]: from sympy import *
   ...: 
   ...: 
   ...: t = sympy.Symbol('t', real=True)
   ...: k = sympy.Symbol('k', positive=True)
   ...: m = sympy.Symbol('m', positive=True)
   ...: x = sympy.Function('x', real=True)(t)
   ...: 
   ...: GDE = Eq(m*x.diff(t, 2) + k*x, 0)

然后各种简化会自动发生:

In [9]: sqrt(-k/m)
Out[9]: 
ⅈ⋅√k
────
 √m 

In [10]: exp(t * sqrt(-k/m))
Out[10]: 
 ⅈ⋅√k⋅t
 ──────
   √m  
ℯ      

In [11]: exp(t * sqrt(-k/m)).rewrite(cos)
Out[11]: 
     ⎛√k⋅t⎞      ⎛√k⋅t⎞
ⅈ⋅sin⎜────⎟ + cos⎜────⎟
     ⎝ √m ⎠      ⎝ √m ⎠

事实上,根据设定的假设,dsolve将自动给出sin、cos表单

In [12]: dsolve(GDE)
Out[12]: 
             ⎛√k⋅t⎞         ⎛√k⋅t⎞
x(t) = C₁⋅sin⎜────⎟ + C₂⋅cos⎜────⎟
             ⎝ √m ⎠         ⎝ √m ⎠

如果没有设置这些假设,仍然可以将表达式操作为sin/cos形式,但需要一些force=True来覆盖假设检查:

In [25]: s = solution.rhs; s
Out[25]: 
           _____             _____
          ╱ -k              ╱ -k  
    -t⋅  ╱  ───        t⋅  ╱  ─── 
       ╲╱    m           ╲╱    m  
C₁⋅ℯ             + C₂⋅ℯ           

In [26]: s = expand(s, force=True); s
Out[26]: 
                ___                  ___
               ╱ 1                  ╱ 1 
    -ⅈ⋅√k⋅t⋅  ╱  ─        ⅈ⋅√k⋅t⋅  ╱  ─ 
            ╲╱   m               ╲╱   m 
C₁⋅ℯ                + C₂⋅ℯ              

In [27]: s = s.rewrite(sin); s
Out[27]: 
   ⎛       ⎛         ___⎞      ⎛         ___⎞⎞      ⎛     ⎛         ___⎞      ⎛         ___⎞⎞
   ⎜       ⎜        ╱ 1 ⎟      ⎜        ╱ 1 ⎟⎟      ⎜     ⎜        ╱ 1 ⎟      ⎜        ╱ 1 ⎟⎟
C₁⋅⎜- ⅈ⋅sin⎜√k⋅t⋅  ╱  ─ ⎟ + cos⎜√k⋅t⋅  ╱  ─ ⎟⎟ + C₂⋅⎜ⅈ⋅sin⎜√k⋅t⋅  ╱  ─ ⎟ + cos⎜√k⋅t⋅  ╱  ─ ⎟⎟
   ⎝       ⎝     ╲╱   m ⎠      ⎝     ╲╱   m ⎠⎠      ⎝     ⎝     ╲╱   m ⎠      ⎝     ╲╱   m ⎠⎠

In [28]: s = expand(s).collect(s.atoms(sin, cos)); s
Out[28]: 
             ⎛         ___⎞                     ⎛         ___⎞
             ⎜        ╱ 1 ⎟                     ⎜        ╱ 1 ⎟
(C₁ + C₂)⋅cos⎜√k⋅t⋅  ╱  ─ ⎟ + (-ⅈ⋅C₁ + ⅈ⋅C₂)⋅sin⎜√k⋅t⋅  ╱  ─ ⎟
             ⎝     ╲╱   m ⎠                     ⎝     ╲╱   m ⎠

In [29]: s = powsimp(s, force=True); s
Out[29]: 
             ⎛         ___⎞                     ⎛         ___⎞
             ⎜        ╱ 1 ⎟                     ⎜        ╱ 1 ⎟
(C₁ + C₂)⋅cos⎜√k⋅t⋅  ╱  ─ ⎟ + (-ⅈ⋅C₁ + ⅈ⋅C₂)⋅sin⎜√k⋅t⋅  ╱  ─ ⎟
             ⎝     ╲╱   m ⎠                     ⎝     ╲╱   m ⎠

In [30]: s = powsimp(s, force=True, deep=True); s
Out[30]: 
             ⎛      ___⎞                     ⎛      ___⎞
             ⎜     ╱ k ⎟                     ⎜     ╱ k ⎟
(C₁ + C₂)⋅cos⎜t⋅  ╱  ─ ⎟ + (-ⅈ⋅C₁ + ⅈ⋅C₂)⋅sin⎜t⋅  ╱  ─ ⎟
             ⎝  ╲╱   m ⎠                     ⎝  ╲╱   m ⎠
 类似资料:
  • 本文向大家介绍delphi实现将BMP格式图形转化为JPG格式图形的方法,包括了delphi实现将BMP格式图形转化为JPG格式图形的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了delphi实现将BMP格式图形转化为JPG格式图形的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Delphi程序设计有所帮助。

  • 我在寻找过去的一天,我没有成功。 我从API获取图像,并使用以下代码将其下载到位图文件。 我得到一个正方形的图像,我想裁剪四个角,使其成为圆形图像。有没有可能实现的方法? 欢迎任何相关答案。提前谢谢。

  • 问题内容: 我在Excel中有一个公式可以计算两个日期之间的星期天数,但是我想在SQL中执行相同的操作,但无法弄清楚该怎么做。你能帮我吗? 谢谢 韦恩 问题答案: 试试这个: 如您所见,这取决于本地化->在俄罗斯,星期日是第7天,因此我们检查第一天是否是星期日 这是另一种解决方案:

  • 问题内容: 我一直在寻找这个小时,却没有找到答案。在燃烧之前,请仔细阅读整个问题!:) 我有类似这样的表格: 并且需要能够将其序列化为: 我在SO上尝试过大多数答案,包括jquery-json库,并且大多数返回如下所示: 这是 我不能使用的 东西!:P 提前谢谢大家。 问题答案: 试试我为您编写的这段代码…仅使用您的数据结果,对我来说效果很好。您可以对其进行处理,并制作一个简单的jQuery插件…

  • 问题内容: 这是Highchart项目符号图表的示例http://jsfiddle.net/jlbriggs/LdHYt/1/ 如何将其转换为列项目符号图表? 问题答案: 这是您要找的东西吗?小提琴

  • 问题内容: 我正在尝试将String转换为我得到的整数。原因很明显。但是我需要一个解决方法。以下是示例代码。 我需要注释部分中的逻辑,一个通用的逻辑会很好。谢谢。 问题答案: 使用结果并将其转换为: