【发布时间】:2019-05-09 18:23:11
【问题描述】:
我编写了以下代码来查看我的 ODE“exponential_decay”在哪个t 越过零线。这是Brent Method。
odr, hr, dr, cr, m = np.genfromtxt('data.txt',unpack=True)
n=0
with open('RDE_nob_trans.txt', 'w') as d:
for i in range(len(dr)):
c = cr[i]
initp = dr[i]
exponential_decay = lambda t, y: -(1/(1+t)) * (2 *(1-y)* (-2 + (y/c)) + 3 - 3 * y)
t_span = [0, 1] # Interval of integration
y0 = [initp] # Initial state: y(t=t_span[0])=2
desired_answer = odr[i]
sol_ode = solve_ivp(exponential_decay, t_span, y0) # IVP solution
f_sol_ode = interp1d(sol_ode.t, sol_ode.y) # Build interpolated function
ans = brentq(lambda x: f_sol_ode(x) - desired_answer, t_span[0], t_span[1])
d.write("{0} {1} {2} {3} {4}\n".format(hr[i], dr[i], cr[i], m[i], ans))
在这段代码中,我们知道了初始点initp = dr[i],我们知道了在零交叉处的微分方程的值desired_answer = odr[i],并且我们愿意在哪个t 中找到这个答案。没关系,我们通过这段代码得到答案。 ans 是零交叉处的t。
我的问题是,如果我们对 ODE 的回答(现在是 desired_answer = odr[i])不仅仅是一个数字,而是一个以 t 表示的值,我们该怎么办。
我的意思是使用odr[i] 我们正在读取数据文件并随后读取数字。现在考虑我们有类似odr = 0.1 * t, 0.12 *t, 0.23 *t etc. 的东西,它不是数字,而是t 的函数。
【问题讨论】:
标签: python ode odeint genfromtxt