2.4 微积分 题目
  1. 绘制函数y=f(x)=x3−1xy = f(x) = x^3 - \frac{1}{x}y=f(x)=x3x1和其在x=1x = 1x=1处切线的图像。
  2. 求函数f(x)=3x12+5ex2f(\mathbf{x}) = 3x_1^2 + 5e^{x_2}f(x)=3x12+5ex2的梯度。
  3. 函数f(x)=∥x∥2f(\mathbf{x}) = \|\mathbf{x}\|_2f(x)=x2的梯度是什么?
  4. 尝试写出函数u=f(x,y,z)u = f(x, y, z)u=f(x,y,z),其中x=x(a,b)x = x(a, b)x=x(a,b)y=y(a,b)y = y(a, b)y=y(a,b)z=z(a,b)z = z(a, b)z=z(a,b)的链式法则。
解答

{“value”:“”,“field”:“reasoning_content”}
以下是四个问题的解答:

  1. 绘制函数[y = x^3 - \frac{1}{x}]及其在[x=1]处的切线
    步骤:

计算导数:[f’(x) = 3x^2 + \frac{1}{x^2}]
求x=1处的导数值:[f’(1) = 3(1)^2 + \frac{1}{1^2} = 4]
求x=1处的函数值:[f(1) = 1^3 - \frac{1}{1} = 0]
切线方程:[y = 4(x-1) + 0 \Rightarrow y = 4x - 4]

图像特征:

原函数在[x>0]时,随x增大快速上升;在[x<0]时,因[-1/x]项主导,左侧有垂直渐近线。
切线在[x=1]处与函数相切,斜率为4。

  1. 求函数[f(\mathbf{x}) = 3x_1^2 + 5e^{x_2}]的梯度
    梯度计算:
    [
    \nabla f = \begin{bmatrix}
    \frac{\partial f}{\partial x_1}
    \frac{\partial f}{\partial x_2}
    \end{bmatrix} =
    \begin{bmatrix}
    6x_1
    5e^{x_2}
    \end{bmatrix}
    ]

  2. 函数[f(\mathbf{x}) = |\mathbf{x}|_2]的梯度
    定义:[f(\mathbf{x}) = \sqrt{x_1^2 + x_2^2 + \dots + x_n^2}]
    梯度公式(当[\mathbf{x} \neq \mathbf{0}]时):
    [
    \nabla f = \frac{\mathbf{x}}{|\mathbf{x}|_2}
    ]

特例:若[\mathbf{x} = \mathbf{0}],梯度不存在(原点处不可导)。

  1. 链式法则应用:[u = f(x,y,z)],其中[x = x(a,b), y = y(a,b), z = z(a,b)]
    链式法则表达式:
    [
    \frac{\partial u}{\partial a} = \frac{\partial f}{\partial x} \cdot \frac{\partial x}{\partial a} + \frac{\partial f}{\partial y} \cdot \frac{\partial y}{\partial a} + \frac{\partial f}{\partial z} \cdot \frac{\partial z}{\partial a}
    ]
    [
    \frac{\partial u}{\partial b} = \frac{\partial f}{\partial x} \cdot \frac{\partial x}{\partial b} + \frac{\partial f}{\partial y} \cdot \frac{\partial y}{\partial b} + \frac{\partial f}{\partial z} \cdot \frac{\partial z}{\partial b}
    ]

公式总结

问题 关键公式
1 [f’(x) = 3x^2 + \frac{1}{x^2}],切线[y = 4x - 4]
2 [\nabla f = [6x_1, 5e{x_2}]T]
3 [\nabla f = \frac{\mathbf{x}}{
4 链式法则如上述分步公式
如需进一步代码实现(如绘制图像),可提供具体编程语言要求。

以下是针对代码的逐层解析,主要围绕plot()set_axes()两个绘图函数的功能实现:


一、函数功能概览

这两个函数是深度学习教材《动手学深度学习》(D2L) 中封装的标准化绘图工具,主要作用是通过简化matplotlib的API调用流程,实现快速创建规范化的科研图表。


二、set_axes()函数解析

#@save
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):
    """设置matplotlib的轴"""
    axes.set_xlabel(xlabel)          # 设置X轴标签
    axes.set_ylabel(ylabel)          # 设置Y轴标签
    axes.set_xscale(xscale)          # 设置X轴刻度类型(linear/log)
    axes.set_yscale(yscale)          # 设置Y轴刻度类型
    axes.set_xlim(xlim)              # 设置X轴范围
    axes.set_ylim(ylim)              # 设置Y轴范围
    if legend:
        axes.legend(legend)          # 添加图例
    axes.grid()                      # 显示网格

核心作用:集中配置坐标轴属性,通过参数化实现以下功能:

  • 坐标标签设置(xlabel/ylabel
  • 坐标范围控制(xlim/ylim
  • 刻度类型转换(xscale/yscale支持线性/对数坐标)
  • 图例与网格的显示控制

三、plot()函数解析

#@save
def plot(X, Y=None, xlabel=None, ylabel=None, legend=None, xlim=None,
         ylim=None, xscale='linear', yscale='linear',
         fmts=('-', 'm--', 'g-.', 'r:'), figsize=(3.5, 2.5), axes=None):
    # 参数预处理
    if legend is None: legend = []
    set_figsize(figsize)  # 设置画布尺寸
    axes = axes if axes else d2l.plt.gca()  # 获取当前axes或新建

    # 数据维度检测函数
    def has_one_axis(X):
        return (hasattr(X, "ndim") and X.ndim == 1 or 
                isinstance(X, list) and not hasattr(X[0], "__len__"))

    # 数据格式标准化
    if has_one_axis(X): X = [X]
    if Y is None: X, Y = [[]]*len(X), X
    elif has_one_axis(Y): Y = [Y]
    if len(X) != len(Y): X = X * len(Y)

    # 清空画布并绘制曲线
    axes.cla()
    for x, y, fmt in zip(X, Y, fmts):
        axes.plot(x, y, fmt) if len(x) else axes.plot(y, fmt)
    
    # 调用set_axes配置坐标轴
    set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend)
关键设计亮点
  1. 智能数据适配

    • 通过has_one_axis()自动检测一维数据,将其包装为二维列表
    • 支持Y=None时自动用X作为Y值(此时X索引作为X轴)
  2. 多曲线绘制

    • fmts参数预设4种线条样式(实线、品红虚线、绿点划线、红点线)
    • 通过zip(X,Y,fmts)实现多组数据对应不同样式的自动匹配
  3. 灵活的画布控制

    • figsize=(3.5,2.5)默认采用论文常用的小尺寸图表
    • 支持传入外部axes对象实现多子图绘制

四、典型使用示例

import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制双曲线
plot([x, x], [y1, y2], 
     xlabel='x', ylabel='y', 
     legend=['sin(x)', 'cos(x)'], 
     xlim=(0, 10), ylim=(-1.5, 1.5))
输出效果:
  • 生成尺寸为3.5x2.5英寸的图表
  • X轴标签为"x",范围0-10;Y轴标签为"y",范围-1.5~1.5
  • 两条曲线分别以实线('-')和品红虚线('m--')呈现
  • 右下角显示图例说明

五、与原生matplotlib的对比

功能 原生matplotlib实现 D2L plot()函数优势
多曲线绘制 需手动循环调用plt.plot(),样式需逐个设置 自动匹配数据与样式,支持批量绘制
坐标轴配置 需分别调用xlabel()xlim()等多个函数 通过set_axes()集中配置,参数化更简洁
画布尺寸 需记忆plt.figure(figsize=(w,h)) 预设科研常用尺寸,通过set_figsize()快捷调整
数据维度处理 需手动处理一维/二维数据转换 自动检测数据维度并进行标准化包装

该工具函数的设计充分体现了封装常用模式降低使用门槛的理念,特别适合深度学习实验中快速可视化训练曲线、数据分布等场景。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐