news 2026/6/14 3:03:09

不可导怎么泰勒展开

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
不可导怎么泰勒展开

泰勒展开的前提是“函数足够光滑”(可导,甚至二阶可导)。但真实世界里到处是“不可导”的函数,怎么办?

答案是:用其他工具替代泰勒展开。我们分三个层次来说。


层次一:为什么不可导就没法用泰勒?

泰勒展开的本质是用多项式去匹配各阶导数

  • 一阶近似需要 (f’(x_0)) 存在
  • 二阶近似需要 (f’'(x_0)) 存在

如果函数在某个点尖刺、折断、有角,导数根本不存在,那泰勒展开就没有意义(不能直接套用)。

例:(f(x) = |x|) 在 (x=0) 处

  • 左导数 = -1,右导数 = +1
  • 导数不存在 → 无法写出泰勒展开

层次二:那怎么近似不可导的函数?

方法 1:分段处理

把不可导点当作分界点,在每一段内部函数是光滑的,分别泰勒展开。

例:(f(x) = |x|)

  • (x<0):(f(x) = -x),泰勒就是它自己
  • (x>0):(f(x) = x),泰勒也是它自己
  • 在 (x=0) 处不展开,只做左右极限

这是工程上最常用的方法:避开“坏点”。

方法 2:用次导数 / 次梯度(优化领域)

对于凸但不可导的函数(如 (|x|)、ReLU),有次导数的概念:

  • 在 (x=0) 处,(f(x)=|x|) 的次导数是 ([-1, 1])(任何介于 -1 和 1 之间的数都可以算“广义斜率”)

机器学习里的ReLUmax⁡(0,x)\max(0,x)max(0,x))在 (x=0) 也不可导,但实践中直接取 0 或 1 作为“伪导数”,就是用了次梯度思想。

方法 3:数值差分(不要解析导数)

如果你没有公式,只有函数值,可以用差商代替导数:

f′(x0)≈f(x0+h)−f(x0)h f'(x_0) \approx \frac{f(x_0+h) - f(x_0)}{h}f(x0)hf(x0+h)f(x0)
即使函数在 (x_0) 不可导,这个差分仍然有定义,只是不收敛到唯一值。

这是计算机做近似优化的常用手段。


层次三:泰勒展开的地位——光滑函数的特权

函数类型泰勒展开替代方案
光滑(无穷可导)✅ 最理想,高精度
有限次可导(如 (x^{1.5}) 在 0)⚠️ 可用,但余项不同用低阶展开,注意误差
连续但不可导(如 (x))
不连续❌ 完全无效其他数值方法(插值、逼近论)

泰勒展开是“光滑函数”的专属利器。遇到不可导,就要换工具。


真实案例:机器学习中的 ReLU

ReLU 函数:(f(x) = \max(0, x))

  • (x<0):(f=0),导数为 0
  • (x>0):(f=x),导数为 1
  • (x=0):不可导

实践中怎么用泰勒?
不直接用。而是:

  1. 在 (x\neq 0) 时用一阶近似
  2. 在 (x=0) 处人为规定“次导数”为 0 或 1(通常取 0)
  3. 这称为次梯度下降,是深度学习的标准做法

本质:放弃严格的泰勒展开,改用广义的“近似更新规则”


一句话总结

泰勒展开要求函数可导。如果不可导,你有三条路:
1️⃣ 避开坏点,分段展开
2️⃣ 用次导数(广义斜率)
3️⃣ 用数值差分代替导数

现实世界不总是光滑的,所以我们需要一整套**“不需要导数”的近似工具**。


我们直接算一个不可导函数f(x)=∣x∣f(x) = |x|f(x)=xx0=0x_0 = 0x0=0附近的例子。

你会看到:泰勒展开在这里彻底失效,但数值差分仍然能给你一个“能用的近似”。


第一步:为什么泰勒展开失效?

x0=0x_0 = 0x0=0处:

  • 左导数:lim⁡x→0−∣x∣−0x=−xx=−1\lim_{x \to 0^-} \frac{|x| - 0}{x} = \frac{-x}{x} = -1limx0xx0=xx=1
  • 右导数:lim⁡x→0+∣x∣−0x=xx=1\lim_{x \to 0^+} \frac{|x| - 0}{x} = \frac{x}{x} = 1limx0+xx0=xx=1

导数不存在 → 无法写出f(0)+f′(0)⋅Δxf(0) + f'(0) \cdot \Delta xf(0)+f(0)Δx

强行“假装”可导会怎样?
如果你硬选一个“伪导数”(比如取 0),你得到:
f(0.1)≈0+0×0.1=0 f(0.1) \approx 0 + 0 \times 0.1 = 0f(0.1)0+0×0.1=0
但真实值是0.10.10.1→ 误差 100%。


第二步:用数值差分(不要解析导数)

数值差分不依赖导数存在,只依赖函数值。

前向差分公式:

f′(0)≈f(0+h)−f(0)h f'(0) \approx \frac{f(0+h) - f(0)}{h}f(0)hf(0+h)f(0)

h=0.1h = 0.1h=0.1
∣0.1∣−00.1=0.10.1=1 \frac{|0.1| - 0}{0.1} = \frac{0.1}{0.1} = 10.1∣0.1∣0=0.10.1=1

h=−0.1h = -0.1h=0.1(从左逼近):
∣−0.1∣−0−0.1=0.1−0.1=−1 \frac{|-0.1| - 0}{-0.1} = \frac{0.1}{-0.1} = -10.10.1∣0=0.10.1=1

结果不同,但这恰好反映了真实情况:左、右斜率不同。


第三步:用差分结果做“类泰勒近似”

我们想预测f(0.1)f(0.1)f(0.1),但0.1>00.1 > 00.1>0,所以用右差分得到的斜率111更合理。

构造“数值一阶近似”:
f(0.1)≈f(0)+(右差分)×0.1=0+1×0.1=0.1 f(0.1) \approx f(0) + (\text{右差分}) \times 0.1 = 0 + 1 \times 0.1 = 0.1f(0.1)f(0)+(右差分)×0.1=0+1×0.1=0.1
✅ 完全精确!(因为∣x∣|x|xx>0x>0x>0就是直线)

如果预测f(−0.1)f(-0.1)f(0.1),用左差分 (-1):
f(−0.1)≈0+(−1)×(−0.1)=0.1 f(-0.1) \approx 0 + (-1) \times (-0.1) = 0.1f(0.1)0+(1)×(0.1)=0.1
真实值也是0.10.10.1


第四步:如果函数更“不可导”呢?

考虑f(x)=∣x∣0.5f(x) = |x|^{0.5}f(x)=x0.5x=0x=0x=0附近(尖刺更严重)

x真实值一阶近似(用右差分 h=0.01)误差
0.010.10.1(斜率≈10,近似 0+10×0.01=0.1)0
0.040.20.4(斜率≈10,近似 0+10×0.04=0.4)100%

❌ 误差巨大,因为函数不是线性的,即使做了差分,一阶近似在更大步长下仍然失败


第五步:结论对比表(以x=0.04x=0.04x=0.04为例)

方法预测f(0.04)f(0.04)f(0.04)真实值 0.2适用性
假装可导 + 泰勒无法定义❌ 根本不能用
数值差分 + 线性近似0.40.2⚠️ 误差 100%
分段精确表达式0.20.2✅ 完美(但需要知道分段形式)

一句话总结

泰勒展开在不可导点直接崩溃。
数值差分能给你一个“伪斜率”,用它做的线性近似在不可导点附近可能有用,但如果函数在局部非线性很强(如∣x∣\sqrt{|x|}x),线性近似会迅速失效。
真正的解决办法是:避开坏点,或者用更复杂的非光滑优化方法(次梯度、近端算子等)。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 3:01:45

C/C++ 数据结构(四)链表与STL容器

本篇核心知识&#xff1a;链表头结点设计、STL 容器对比&#xff08;vector /list/forward_list&#xff09;、迭代器原理与使用、迭代器失效、仿函数、容器常用算法、C11 新特性、双向链表手写要求、深浅拷贝与容器类型适配一、链表头结点详解概念头结点是链表额外增设的虚拟节…

作者头像 李华
网站建设 2026/6/14 2:58:08

免费获取同花顺问财数据的终极指南:告别Excel,拥抱Python自动化

免费获取同花顺问财数据的终极指南&#xff1a;告别Excel&#xff0c;拥抱Python自动化 【免费下载链接】pywencai 获取同花顺问财数据 项目地址: https://gitcode.com/gh_mirrors/py/pywencai 还在为每天手动从同花顺问财导出数据到Excel而烦恼吗&#xff1f;是否因为A…

作者头像 李华
网站建设 2026/6/14 2:57:09

量子紧束缚链中缺陷调控的弛豫动力学研究

1. 项目概述在量子多体系统中&#xff0c;弛豫动力学研究能量如何从初始非平衡态向热平衡态演化。这一过程对于理解量子系统的热化行为至关重要。本文聚焦于一个经典模型系统——紧束缚链&#xff08;tight-binding chain&#xff09;中的弛豫动力学&#xff0c;特别关注缺陷&a…

作者头像 李华