【发布时间】:2018-10-19 08:47:37
【问题描述】:
我想在不使用内置函数的情况下使用Python 计算二阶微分方程,但结果仅对一阶方程是正确的。
让我举个例子(插图没有声誉!- 更好的方程外观)
dy/dt = -ky
并使用导数的基本定义
f'(x)= h ->0 (f(x+h)-f(x))/h
我们可以为 k=0.3 这个方程编写基本的 Python 代码
def first_order(dt):
t = np.arange(0, 20, dt)
k = 0.3
y = np.zeros(len(t))
y[0] = 5
for i in range(1, len(t)):
y[i] = - k* y[i - 1] * dt + y[i-1]
return t, y
这很好用,但是当我尝试计算相应的方程时:
dp^2/dx^2 = (p- p0)/L
使用:
f''(x)= h ->0 (f(x+h)-2f(x)+ f(x-h)/h^2
二阶导数方程的初始条件是p(0) = 10^14、p0 = 10^13、L = 10 ^-6 和p(infinity) = p0,第二个条件可能会出错。
我尝试以直接的方式解决这个问题 - 类似于以前
def diffusion_lenght(dt):
p0 = 10 ** 13 # initial state
t = np.arange(0, 20, dt)
p = np.zeros(len(t))
L = 1 * 10 ** -6
p[0] = 10 ** 14
p[len(t)-1] = p0
for i in range(1, len(t)):
p[i] = (2* p[i-1]- p[i-2]- p0 * dt ** 2 / L) / (1 - dt ** 2 / L)
print(p)
return t, p
但结果不正确。它应该给我x 的指数递减,但我得到了收敛到dt 值的直线。
【问题讨论】:
标签: python numeric equation derivative