数学表达式: 从恐惧到单挑 (8. 累加、累乘与积分)

8. 累加、累乘与积分

本贴展现了数学语言和计算机语言的高度统一.

8.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 > 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 > 0} x_i^2 xi>0xi2 的 Java 代码怎么写?
  • 存在歧义的累加
    ∑ x i > 0 x i 2 + x i + 1 \sum_{x_i > 0} x_i^2 + x_i + 1 xi>0xi2+xi+1, 需要加括号消除歧义.
    ∑ x i > 0 ( x i 2 + x i + 1 ) (4) \sum_{x_i > 0} \left(x_i^2 + x_i + 1\right) \tag{4} xi>0(xi2+xi+1)(4)
    源码: \sum_{x_i > 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)
    表示上三角矩阵分量 (左下部分) 相加.
    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 代码分别怎么写?

8.2 累乘

  • 整数累乘
    ∏ i = 1 10 i (6) \prod_{i = 1}^{10} i \tag{6} i=110i(6)
    表示 1 × 2 × ⋯ × 10 1 \times 2 \times \dots \times10 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 n n 也可以简写为 ∏ i x i \prod_i x_i ixi.
    Java 代码
double product = 1;
for (int i = 1; i <= n; i ++) 
    product *= x[i];

8.3 定积分

  • 单变量函数的定积分, 本质就是求曲线与 x 轴之间的面积.
  • 该面积带符号, 所以正负面积可能抵消一些.
    ∫ 0 10 x 2 + x + 1 d x (8) \int_{0}^{10} x^2 + x + 1 \mathrm{d}x \tag{8} 010x2+x+1dx(8)
    源码: \int_{0}^{10} x^2 + x + 1 \mathrm{d}x. 注意 d 的写法. 也可以换成 {\rm d}
    Java 代码
double integration = 0;
double delta = 0.01;
for (double x = 0; x <= 10; x += delta)
	integeration += 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.
    Java 代码
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)
		integeration += (2 * x * x * y + y * y) * deltax * deltay;

写代码根本不考虑积分的简洁形式, 就是这么任性!

8.4 作业

  1. 将向量下标为偶数的分量 (x2, x4, …) 累加, 写出相应表达式.
  2. 各出一道累加、累乘、积分表达式的习题, 并给出标准答案.
  3. 你使用过三重累加吗? 描述一下其应用.
  4. 给一个常用的定积分, 将手算结果与程序结果对比.
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值