微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

区间中前向差异的数值逼近

如何解决区间中前向差异的数值逼近

如何在不使用numpy的情况下将python用于数值有限差分计算? 例如,我想以一定间隔在数值上找到一阶和二阶导数的多个函数值,步长为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位精度将比普通浮点数慢很多,但是它仍然是一个非常酷的库!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。