一个区间前向差分的数值逼近
Numerical approximation of forward difference in an interval
python如何在不使用numpy的情况下进行数值有限差分计算?
例如,对于一阶和二阶导数,我想在一定区间内以数字方式查找多个函数值,步长为 0.05。
你为什么不想使用 Numpy?这是一个很好的库,进行数值计算的速度非常快,因为它是用 C 语言编写的(对于数值运算通常比纯 Python 更快)。
如果您对这些方法的工作原理以及它们在代码中的外观感到好奇,请查看以下示例代码:
def linspace(a, b, step):
if a > b:
# see if going backwards?
if step < 0:
return linspace(b, a, -1*step)[::-1]
# step isn't negative so no points
return []
pt = a
res = [pt]
while pt <= b:
pt += step
res.append(pt)
return res
def forward(data, step):
if not data:
return []
res = []
i = 0
while i+1 < len(data):
delta = (data[i+1] - data[i])/step
res.append(delta)
i += 1
return res
# example usage
size = 0.1
ts = linspace(0, 1, size)
y = [t*t for t in ts]
dydt = forward(y, size)
d2ydt2 = forward(dydt, size)
注意:这仍将使用正常的浮点数,因此仍然会发生奇数舍入错误,因为某些数字没有精确的二进制十进制表示形式。
另一个要检查的库是 mpmath,它有很多很酷的数学函数,比如积分和特殊函数,它允许你指定你想要的精度。当然使用 100 位精度会比普通浮点数慢很多,但它仍然是一个非常酷的库!
python如何在不使用numpy的情况下进行数值有限差分计算? 例如,对于一阶和二阶导数,我想在一定区间内以数字方式查找多个函数值,步长为 0.05。
你为什么不想使用 Numpy?这是一个很好的库,进行数值计算的速度非常快,因为它是用 C 语言编写的(对于数值运算通常比纯 Python 更快)。
如果您对这些方法的工作原理以及它们在代码中的外观感到好奇,请查看以下示例代码:
def linspace(a, b, step):
if a > b:
# see if going backwards?
if step < 0:
return linspace(b, a, -1*step)[::-1]
# step isn't negative so no points
return []
pt = a
res = [pt]
while pt <= b:
pt += step
res.append(pt)
return res
def forward(data, step):
if not data:
return []
res = []
i = 0
while i+1 < len(data):
delta = (data[i+1] - data[i])/step
res.append(delta)
i += 1
return res
# example usage
size = 0.1
ts = linspace(0, 1, size)
y = [t*t for t in ts]
dydt = forward(y, size)
d2ydt2 = forward(dydt, size)
注意:这仍将使用正常的浮点数,因此仍然会发生奇数舍入错误,因为某些数字没有精确的二进制十进制表示形式。
另一个要检查的库是 mpmath,它有很多很酷的数学函数,比如积分和特殊函数,它允许你指定你想要的精度。当然使用 100 位精度会比普通浮点数慢很多,但它仍然是一个非常酷的库!