用scipy的solve_ivp 求解复数常微分方程组

文章展示了如何利用Python的Scipy库中的solve_ivp函数来解决复数常微分方程,如dx/dt=ix。代码示例解释了如何设定复数初始条件并使用RK45方法进行求解,最终通过matplotlib绘制了复数解的实部随时间变化的图形。
摘要由CSDN通过智能技术生成

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

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

import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt

# 定义常微分方程组
def equations(t, y):
    [y1] = y
    dydt = [y1*1j]
    return dydt

# 设置初始条件
y0 = [1+0j]

# 设置时间范围
tmax=10
t_span = [0, tmax]
t2 = np.linspace(0,tmax,100)
# 求解常微分方程组
sol = solve_ivp(equations, t_span, y0,method='RK45',t_eval=t2)

# 绘制y-t图像
plt.plot(sol.t, np.real(sol.y[0]), label='y1')
plt.xlabel('t')
plt.ylabel('y')
plt.legend()
plt.show()

输出结果是y1的实部:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值