当前位置:   article > 正文

用scipy的solve_ivp 求解复数常微分方程组_python在复数域内求解微分方程

python在复数域内求解微分方程

因科研需要,我要求复数odes,首先想python scipy 能不能求,例如dx/dt=ix ,应该能求出振荡解。于是有了下面代码。

注意代码中只对y1进行了求解,初始条件一定要写成a+bj(或bj)的形式,告诉它你的初值是复数,即使虚部可能为零。如果只填个实数,后面求解会把dydt中取实部。然后算出来就是一条直线。

  1. import numpy as np
  2. from scipy.integrate import solve_ivp
  3. import matplotlib.pyplot as plt
  4. # 定义常微分方程组
  5. def equations(t, y):
  6. [y1] = y
  7. dydt = [y1*1j]
  8. return dydt
  9. # 设置初始条件
  10. y0 = [1+0j]
  11. # 设置时间范围
  12. tmax=10
  13. t_span = [0, tmax]
  14. t2 = np.linspace(0,tmax,100)
  15. # 求解常微分方程组
  16. sol = solve_ivp(equations, t_span, y0,method='RK45',t_eval=t2)
  17. # 绘制y-t图像
  18. plt.plot(sol.t, np.real(sol.y[0]), label='y1')
  19. plt.xlabel('t')
  20. plt.ylabel('y')
  21. plt.legend()
  22. plt.show()

输出结果是y1的实部:

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/814125
推荐阅读
相关标签
  

闽ICP备14008679号