学习记录之数学表达式(4)

八、min 与 argmin

  • min 和 argmin 在机器学习中常用;
  • max 和argmax 同理;

8.1 min

  • min 是 minimal 的缩写,用于获得集合中的最小值,如: min ⁡ { 3 , 1 , 9 , 8 } = 1 \min \{3,1,9,8\}=1 min{3,1,9,8}=1,源码为:\min {3,1,9,8}=1,即 \min 是定义好的一种符号;
  • min 可以与向量/矩阵配合使用,如:给定向量 x = [ 3 , 1 , 9 , 8 ] \mathbf{x}=[3,1,9,8] x=[3,1,9,8] ,则: min ⁡ 1 ≤ i ≤ 4 x i = 1 \min_{1 \le i \le 4} \mathbf{x}_i = 1 min1i4xi=1,源码为:\min_{1 \le i \le 4} \mathbf{x}_i = 1,本质与前面的集合方式相同;
  • min 可以和函数配合使用,如:令 f ( x ) = x 2 + x + 1 f(x)=x^2+x+1 f(x)=x2+x+1 min ⁡ − 1 ≤ x ≤ 1 f ( x ) \min_{-1 \le x \le 1} f(x) min1x1f(x) 表示 x x x [ − 1 , 1 ] [-1,1] [1,1] 区间的任意数,这些函数值构成了一个集合(重复元素只算一次),最终取最小的元素,源码为:\min_{-1 \le x \le 1} f(x),其中 \le 表示 less than or equal,也可以写作 \leq;

8.2 argmin

  • argmin 是 argument minimal 的缩写,用于获得使函数取得最小值的参数;
  • \arg\min 总是可用的,若 Latex 模板不支持 \argmin,可以在 tex 文件头部加上:\DeclareMathOperator*{\argmin}{argmin};
  • argmin 可以与向量/矩阵配合使用,这时参数可以是向量下标,如:给定向量 x = [ 3 , 1 , 9 , 8 ] \mathbf{x} = [3,1,9,8] x=[3,1,9,8],则 arg min ⁡ x i = 2 \argmin \mathbf{x}_i = 2 argminxi=2 的值是使得 x i \mathbf{x}_i xi 最小的参数值,即下标 i i i 的值,给定矩阵:
    x = [ 3 2 9 8 7 6 1 4 ] \mathbf{x} = \left[ \begin{matrix} 3&2&9&8 \\ 7&6&1&4 \end{matrix} \right] x=[37269184]
    源码为:\mathbf{x} = \left[ \begin{matrix} 3&2&9&8 \ 7&6&1&4 \end{matrix} \right],则 arg ⁡ i , j min ⁡ x i j = ( 2 , 3 ) \arg_{i,j}\min \mathbf{x}_{ij} = (2,3) argi,jminxij=(2,3) 的值是使得 x i j \mathbf{x}_{ij} xij 最小的参数值,即 i = 2 , j = 3 i=2,j=3 i=2,j=3。注意:这是返回了两个数据,在Java里面要专门处理,但Python可以直接支持。
  • argmin 与函数配合最常见,如:令 f ( x ) = x 2 + x + 1 f(x)=x^2+x+1 f(x)=x2+x+1,则 arg ⁡ − 1 ≤ x ≤ 1 min ⁡ f ( x ) = − 1 2 \arg_{-1 \le x \le 1} \min f(x) = -\frac{1}{2} arg1x1minf(x)=21 表示 x x x − 1 2 -\frac{1}{2} 21 时函数取最小值 3 4 \frac{3}{4} 43,只是这个最小值没有人关心。

8.3 作业

  • 解释推荐系统: 问题、算法与研究思路 2.1 中的优化目标: min ⁡ ∑ ( i , j ) ∈ Ω ( f ( x i , t j ) − r i j ) 2 \min \sum_{(i,j) \in \Omega}(f(\mathbf{x}_i,\mathbf{t}_j)-r_{ij})^2 min(i,j)Ω(f(xi,tj)rij)2
    • i , j i,j i,j:遍历数据集中的元素;
    • Ω \Omega Ω:表示所有 ( i , j ) (i,j) (i,j)对的集合;
    • x i \mathbf{x}_i xi:第 i i i个数据的输入;
    • t j \mathbf{t}_j tj:与 x i \mathbf{x}_i xi相关的第 j j j个数据的标签;
    • r i j r_{ij} rij:表示于 ( i , j ) (i,j) (i,j)对应的真实值;
    • f ( x i , t j ) f(\mathbf{x}_i,\mathbf{t}_j) f(xi,tj):输出一个预测值;
    • f ( x i , t j ) − r i j ) 2 f(\mathbf{x}_i,\mathbf{t}_j)-r_{ij})^2 f(xi,tj)rij)2表示一个误差项;
    • 对集合 Ω \Omega Ω中的所有 ( i , j ) (i,j) (i,j)对进行遍历,并计算每一对的预测值与真实值之间的平方差,然后求和;
    • min ⁡ \min min表示要对上述求和表达式求和并使之最小化;

九、累加、累乘与积分

  该章节展示了数学语言和计算机语言的高度统一;

9.1 累加

  • 单重整数累加:
    ∑ i = 1 10 i (1) \sum_{i=1}^{10} i \tag{1} i=110i(1)
    表示 1 + 2 + ⋯ + 10 1+2+\dots+10 1+2++10,源码为:\sum_{i=1}^{10} i \tag{1};
    用 Java 代码表示如下:
int sum = 0;
for (int i = 1; i <= 10; i++)
    sum += i;

  数学表达式的下标习惯是从1开始,程序的下标相关从0开始,写程序是应该注意这个问题;

  • 向量分量累加:
    ∑ i = 1 n x i (2) \sum_{i=1}^{n} x_{i} \tag{2} i=1nxi(2)
    表示 x 1 + x 2 + ⋯ + x n x_1+x_2+\dots+x_n x1+x2++xn,如果 x \mathbf{x} x 的维度就是 n n n 也可以简写为: ∑ i x i \sum_{i} x_{i} ixi
    用 Java 代码表示如下:
double sum = 0;
for (int i = 1; i <= n; i++)
    sum += x[i];
  • 带条件的向量分量累加:
    ∑ x i > 0 x i (3) \sum_{x_{i} \gt 0} x_{i} \tag{3} xi>0xi(3)
    表示仅将向量 x \mathbf{x} x 取值为正的分量相加;
    用 Java 代码表示如下:
double sum = 0;
for (int i = 1; i <= n; i++)
    if (x[i} > 0)
        sum += x[i];
  • 练习: ∑ x i > 0 x i 2 \sum_{x_{i} \gt 0} x_{i}^2 xi>0xi2
    用 Java 代码表示如下:
double sum = 0;
for (int i = 1; i <= n; i++)
    if (x[i} > 0)
        sum += x[i]*x[i};
  • 存在歧义的累加:
    ∑ x i > 0 ( x i 2 + x i + 1 ) (4) \sum_{x_{i} \gt 0} \left(x_{i}^2+x_{i}+1 \right) \tag{4} xi>0(xi2+xi+1)(4)
    源码为:\sum_{x_{i} \gt 0} \left(x_{i}^2+x_{i}+1 \right) \tag{4};
  • 矩阵分量的二重累加:
    ∑ i = 1 n ∑ j = 1 i x i j (5) \sum_{i=1}^{n} \sum_{j=1}^{i} x_{ij} \tag{5} i=1nj=1ixij(5)
    表示下三角矩阵分量(左下部分)相加,源码为:\sum_{i=1}^{n} \sum_{j=1}^{i} x_{ij} \tag{5};
    用 Java 代码表示如下:
double sum = 0;
for (int i = 1; i <= n; i++)
    for (int j = 1; j <= i; j++)
        sum += x[i][j];
  • 具有欺骗性的表示法:上式可以简写为 ∑ i ≥ j x i j \sum_{i \ge j} x_{ij} ijxij,要明白这是二重累加;
  • 练习:将矩阵中小于1的分量平方并累加,数学表达式和 Java 代码分别怎么写?
    数学表达式为: ∑ x i j < 1 x i j 2 \sum_{x_{ij} \lt 1} x_{ij}^2 xij<1xij2
    用 Java 代码表示如下:
double sum = 0;
for (int i = 1; i <= n; i++)
    for (int j = 1; j<=n; j++)
        if (x[ij} < 1)
            sum += x[i][j] * x[i][j];

9.2 累乘

  • 整数累乘:
    ∏ i = 1 10 i (6) \prod_{i=1}^{10} i \tag{6} i=110i(6)
    表示 1 × 2 × ⋯ × 10 1 \times 2 \times \dots \times 10 1×2××10,源码为:\prod_{i=1}^{10} i \tag{6},其中 prod 是 product 的简写;
    用 Java 代码表示如下:
int product = 1;
for (int i = 1; i <= 10; i++)
    product *= i;

程序要注意溢出,但是数学表达式不存在这种担忧,同时注意 product 初始化为1;

  • 向量分量累乘:
    ∏ i = 1 n x i (7) \prod_{i=1}^{n} x_{i} \tag{7} i=1nxi(7)
    表示 x 1 ∗ x 2 ∗ ⋯ ∗ x n x_1 * x_2 * \dots * x_n x1x2xn,如果 x \mathbf{x} x 的维度就是n,也可以简写为 ∏ i = 1 x i \prod_{i=1} x_i i=1xi
    用 Java 代码表示如下:
double product = 1;
for (int i = 1; i <= n; i++)
    product *= x[i];

9.3 定积分

  • 单变量函数的定积分,本质就是求曲线与 x x x 轴之间的面积;
  • 该面积带符号,所以正负面积可能会抵消一些;
    ∫ 0 10 x 2 + x + 1 ( d ) x (8) \int_{0}^{10} x^{2} + x +1 \mathrm(d)x \tag{8} 010x2+x+1(d)x(8)
    源码为:\int_{0}^{10} x^{2} + x +1 \mathrm(d)x \tag{8};
    注意 d 的写法,这里也可以换成 {\rm d};
    用 Java 代码表示如下:
double integration = 0;
double delta = 0.01;
for (double x = 0; x <= 10; x += delta)
    integration += x * x * delta;
  • 二重积分可以看作是求体积;
    ∫ 0 10 ∫ y 2 y 2 x 2 y + y 2 d x d y (9) \int_{0}^{10} \int_{\frac{y}{2}}^{y} 2 x^{2} y + y^{2} \mathrm{d}x \mathrm{d}y \tag{9} 0102yy2x2y+y2dxdy(9)
    源码为:\int_{0}^{10} \int_{\frac{y}{2}}^{y} 2 x^{2} y + y^{2} \mathrm{d}x \mathrm{d}y \tag{9};
double integration = 0;
double deltax = 0.01;
double deltay = 0.01; 
for (double y = 0; y <= 10; y += deltay)
    for (double x = y/2; x <= y; x += deltay)
        integration += (2 * x * x * y + y * y) * deltax * deltay;

写代码不用考虑积分的简洁形式;

9.4 作业

1、将向量下标为偶数的分量 ( x 2 , x 4 , …   ) \left( x_2,x_4,\dots \right) (x2,x4,) 累加,写出相应的表达式;

  • 向量下标为偶数,那么累加条件应该为余数为0,即 i m o d    2 = 0 i \mod 2 = 0 imod2=0,则表达式为:
    ∑ i m o d    2 = 0 x i \sum_{i \mod 2 = 0} \mathbf{x}_{i} imod2=0xi
  • 或者也可以对下标乘以2,这样可以保证下标是偶数。
  • 代码表示如下:
double sum = 0;
for (int i = 0; i <= n; i++)
   if (i % 2 ==0)
       sum += x[i];

2、各写出一道累加、累乘、积分表达式的习题,并给出标准答案;

(1) 累加表达式习题:求数列 { a n } \{a_{n}\} {an}的前 n n n项和,其中 a n = 2 n − 1 a_{n}=2n-1 an=2n1

  • 标准答案:累加表达式为: S n = ∑ k = 1 n ( 2 k − 1 ) S_{n}=\sum_{k=1}^{n}(2k-1) Sn=k=1n(2k1)
  • 使用等差数列求和公式,得到: S n = n ( a 1 + a n ) 2 = n ( 1 + ( 2 n − 1 ) ) 2 = n 2 S_{n}=\frac{n(a_1+a_n)}{2}=\frac{n(1+(2n-1))}{2}=n^2 Sn=2n(a1+an)=2n(1+(2n1))=n2

(2) 累乘表达式习题:求数列 { b n } \{b_{n}\} {bn}的前 n n n项积,其中 b n = 3 n b_{n}=3^n bn=3n

  • 标准答案: P n = ∏ k = 1 n 3 k P_n=\prod_{k=1}^{n}3^{k} Pn=k=1n3k
  • 使用指数运算法则,得到: P n = 3 1 × 3 2 × ⋯ × 3 n = 3 1 + 2 + ⋯ + n = 3 n ( n + 1 ) 2 P_n=3^1 \times 3^2 \times \dots \times 3^n = 3^{1+2+ \dots +n}=3^{\frac{n(n+1)}{2}} Pn=31×32××3n=31+2++n=32n(n+1)
    (3) 积分表达式:求函数 f ( x ) = x 2 f(x)=x^2 f(x)=x2在区间 [ 0 , 1 ] [0,1] [0,1]上的定积分
  • 标准答案:积分表达式为 ∫ 0 1 x 2 d x \int_{0}^{1}x^2dx 01x2dx
  • 使用微积分基本定理,得到: ∫ 0 1 x 2 d x = [ 1 3 x 3 ] 0 1 = 1 3 × 1 3 − 1 3 × 0 3 = 1 3 \int_{0}^{1}x^2dx=[\frac{1}{3}x^3]^{1}_{0}=\frac{1}{3} \times 1^3 - \frac{1}{3} \times 0^3=\frac{1}{3} 01x2dx=[31x3]01=31×1331×03=31

3、是否使用过三重累加?描述一下其应用;

  • 三重累加(三重求和)是数学中用于计算三维空间或集合中元素的总和的一种运算。在编程和数学分析中,三重累加经常用于处理三维数组、网格或空间中的点集。

  • 应用描述:

    • 三维数据处理:当处理三维数组或矩阵时,三重累加可用于计算数组中所有元素的总和。

    • 统计和数据分析:在统计学和数据分析中,当数据集具有三维结构(如时间序列、地理空间数据和多个特征的组合)时,三重累加可以用于计算总和、平均值或其他统计量。

    • 优化和机器学习:在优化问题和机器学习算法中,三重累加可能用于计算损失函数、正则化项或其他需要考虑三维数据结构的量。

4、给出一个常用的定积分,将手算结果与程序结果对比;

  • 计算函数 f ( x ) = sin ⁡ ( x ) cos ⁡ ( x ) f(x)=\sin(x)\cos(x) f(x)=sin(x)cos(x)在区间 [ 0 , π 2 ] [0,\frac{\pi}{2}] [0,2π]上的定积分
  • 原函数: F ( x ) = ∫ sin ⁡ ( x ) cos ⁡ ( x ) d x = ∫ 1 2 sin ⁡ ( 2 x ) d x = − 1 4 cos ⁡ ( 2 x ) F(x)=\int \sin(x)\cos(x)dx = \int \frac{1}{2}\sin(2x)dx = -\frac{1}{4} \cos(2x) F(x)=sin(x)cos(x)dx=21sin(2x)dx=41cos(2x)
  • ∫ 0 π 2 sin ⁡ ( x ) cos ⁡ ( x ) d x = F ( π 2 ) − F ( 0 ) = − 1 4 c o s ( π ) − ( − 1 4 c o s ( 0 ) ) = 1 4 \int_{0}^{\frac{\pi}{2}} \sin(x)\cos(x)dx = F(\frac{\pi}{2})-F(0)=-\frac{1}{4}cos(\pi)-(-\frac{1}{4}cos(0))=\frac{1}{4} 02πsin(x)cos(x)dx=F(2π)F(0)=41cos(π)(41cos(0))=41
  • 程序计算:使用Python计算
# 导入需要的库  
from scipy.integrate import quad
import numpy as np


def f(x):
    return np.sin(x) * np.cos(x)


# 计算定积分
result, error = quad(f, 0, np.pi / 2)


print(f"程序计算结果为:{result}")
print(f"估计误差为:{error}")

相关推荐

  1. 学习记录数学表达式4

    2024-05-10 05:46:04       12 阅读
  2. 学习记录数学表达式(1)

    2024-05-10 05:46:04       17 阅读
  3. 学习记录数学表达式(3)

    2024-05-10 05:46:04       14 阅读
  4. 【C++ Primer Plus学习记录】逻辑表达式

    2024-05-10 05:46:04       35 阅读
  5. 学习记录JVM

    2024-05-10 05:46:04       42 阅读
  6. Nest.js学习记录4

    2024-05-10 05:46:04       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-10 05:46:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-10 05:46:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-10 05:46:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-10 05:46:04       18 阅读

热门阅读

  1. 文件上传结合springboot

    2024-05-10 05:46:04       12 阅读
  2. 石家庄河北银行的

    2024-05-10 05:46:04       11 阅读
  3. golang学习

    2024-05-10 05:46:04       10 阅读
  4. 有关while((c=getchar())!=\n)和while((ch=getchar()!=EOF))

    2024-05-10 05:46:04       10 阅读
  5. 令牌桶和漏桶算法的区别

    2024-05-10 05:46:04       12 阅读
  6. 双网口扩展IO支持8DO输出

    2024-05-10 05:46:04       12 阅读
  7. .Net WinFrom中DataGridView控件的熟练学习

    2024-05-10 05:46:04       10 阅读