Python使用Odeint解微分方程并保存csv数据

本节研究使用Odeint解微分方程,并保存为csv数据的方法。本节以官网odeint上的一个例子,写出添加保存数据后的代码。所求解的微分方程为

\[\begin{equation}\label{eq:odeint} \theta''(t)+b\theta'(t)+c\sin(\theta) = 0 \end{equation}\]

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/env python3
import numpy as np
import sympy as sym
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from sympy.abc import t
import pandas as pd

b = 0.25
c = 5.0
y0 = [np.pi-0.1, 0.0]

def spend(y, t, b, c):
theta, omega = y
dydt = [ omega, -b*omega-c*np.sin(theta)]
return dydt

t = np.linspace(0, 15, 1001)
sol = odeint(spend, y0, t, args=(b,c))

# 保存数据
#
u = pd.DataFrame(sol)
u.to_csv('func.csv')

# 及时绘图
plt.plot(t, sol[:, 0], 'b', label='theta(t)')
plt.plot(t, sol[:, 1], 'g', label='omega(t)')
plt.legend(loc='best')
plt.grid()
plt.show()

注意:使用odeint求解完微分方程后,返回结果sol, 其为 \(1001\times 2\) 的数组,可以直接使用DataFrame生成表格数据并保存为func.csv文件,之后再使用veusz绘图。

参考文章