You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TensorFlow有限差分法计算四阶导数精度低于NumPy问题求解

问题解答

核心原因:默认浮点精度差异

该问题本质是NumPy和TensorFlow的默认浮点精度设置不一致,叠加四阶有限差分运算对数值误差的高敏感性导致的:

  • NumPy的linspace、tanh等基础数值运算默认使用float64(双精度浮点数),精度足够抵消四阶差分运算过程中产生的截断误差,因此输出结果平滑无噪声。
  • TensorFlow默认在CPU、GPU设备上的数值运算均使用float32(单精度浮点数),而四阶差分需要对相邻采样点做多次加减乘除运算,会不断放大单精度浮点数本身的截断误差,最终表现为结果上的锯齿状噪声。

修复方案

你只需要在定义TensorFlow张量时显式指定精度为float64,即可得到和NumPy版本完全一致的平滑结果,修改后的示例代码如下:

import tensorflow as tf
import matplotlib.pyplot as plt

def action(y,x):
    # 采样点间距
    h = (x[-1] - x[0]) / (int(x.shape[0]) - 1)
    # 四阶导数计算
    dy4 = (y[4:] - 4*y[3:-1] + 6*y[2:-2] - 4*y[1:-3] + y[:-4])/(h**4)
    return dy4

# 显式指定生成张量的精度为float64
x = tf.linspace(0.0, 30, 1000, dtype=tf.float64)
y = tf.tanh(x)
dy4 = action(y,x)

sess = tf.compat.v1.Session()
plt.plot(sess.run(dy4))
plt.show()

内容的提问来源于stack exchange,提问作者Tabin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:24:03