python解常微分方程(组)

本人目前初三,能力所限,如有不足之处,还望多多指教。

一周前看到了一个视频,于是我便想用python来求解这个问题。

〇、分析


假设在平面内有一带电粒子q,质量为m。空间内存在匀强磁场B,方向垂直于平面向内即沿z轴负半轴,以及一个沿y轴负半轴的重力场。带电粒子从磁场内O点释放。

则可直接列出粒子的运动方程

\large m\ddot{\vec{r}} = q \cdot \vec{v} \times \vec{B}

将这个方程分解成x和y两个方向

\large \begin{cases} \ddot{x} = -\frac{qB}{m}\dot{y}\\ \ddot{y} = -g+\frac{qB}{m}\dot{x}\\ \end{cases}

联立即可求得该方程组的解。

一、sympy中的dsolve方法

#导入
from sympy import *
import numpy as np
import matplotlib.pyplot as plt
init_printing()

首先声明符号x,y,q,m,B,g

#参量
q,m,B,t,g = symbols('q m B t g',real=True,nonzero=True,positive=True)
#函数
x,y = symbols('x y',real=True,nonzero=True,positive=True,cls=Function)

再将微分方程表示出来

eq1 = Eq(x(t).diff(t,t),-q*B*y(t).diff(t)/m)
eq2 = Eq(y(t).diff(t,t),-g+q*B*x(t).diff(t)/m)
sol = dsolve([eq1,eq2])

现在打印出sol(用jupyter notebook效果更好) 

sol

很明显,这个式子非常冗杂,用trigsimp()方法化简

x = trigsimp(sol[0].rhs)
y = trigsimp(sol[1].rhs)
x,y

然后,可以将里面的积分常数算出

#定义积分变量,避免报错
var('C1 C2 C3 C4')
#x(0)=0
e1 = Eq(x.subs({t:0}),0)
#x'(0)
  • 27
    点赞
  • 135
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值