工程师和科学家的高等数学及python实例:1三角函数

1 三角函数

在学习了本章内容之后,你应该能够

  • 说明三角函数比
  • 计算任意给定角的正弦、余弦和正切
  • 讨论象限及其应用
  • 确定特殊角 (0°, 30°, 45°, 60°, 90°)的三角比
  • 使用特殊角的精确正弦值、余弦值和正切值
  • 绘制正弦函数、余弦函数和正切函数的图形

1.1 引言

三角学是数学的一个重要分支,涉及特定函数及其与角有关的行为。任何涉及固定重复运动的过程都可以用所谓的正弦波形来表示或模拟。这种波形的一般形式为sin(x + 𝜃),无论是摆锤、弹簧上的重物还是摆动。事实上,任何在两个固定点之间保持匀速的前后或上下运动都可以包含在这个主题中。本章我们将从正弦、余弦和正切函数的三角比开始,并在随后的四章中继续讨论三角函数。

1.2 三角函数比

三角函数比是指角度的正弦、余弦和正切。它们通常分别简称为 sin 𝜃、cos 𝜃和 tan 𝜃,其中 𝜃 表示转折量或角度。注意,我们可以使用任何其他字母或符号来代替 𝜃。我们将以直角三角形作为定义的基础。

  • 斜边(hypotenuse)

最长的那条边

  • 对边(Opposite)

对于一个特定的锐角来说,和这个角相对的那条边叫做对边。

  • 邻边()

对于一个特定的锐角来说,和这个角相邻且不是斜边的那条边叫做邻边。

𝜑又称∠C或

  • 正弦(sin): 对边 / 斜边

  • 余弦(cos): 邻边 / 斜边

  • 正切(tan): 对边 / 邻边

  • 余切(cot): 邻边 / 对边 = 1/tan

  • 正割(sec): 斜边 / 邻边 = 1/cos

  • 余割(csc): 斜边 / 对边 = 1/sin

1.3 特殊角的比

特殊角通常指自然形成的角,如 30°、45° 和 60°。0° 和 90° 角通常也包括在这一组中。它们的精确三角比(或值)可以很容易地确定并用于解决问题。

1.4 反三角比

我们已经定义了角的正弦、余弦和正切的三角比。现在我们需要逆向计算,即找出三角比已给定或已知的角。这就是所谓的反三角或反三角比。

1.5 象限

我们在上一节中对三角比的讨论只涉及 0 ≤ 𝜃 ≤ 90° 范围内的角。为了能够完全定义三角比,我们需要涵盖一转的全部范围,即 0 ≤ 𝜃 ≤ 360°。这可以通过引入象限来实现。

  • 第一象限 0 ≤ 𝜃 ≤ 90°

正弦、余弦和正切在第一象限均为正值。

  • 第二象限 90 < 𝜃 ≤ 180°

正弦为正,余弦和正切为负。

  • 第三象限 180° < 𝜃 ≤ 270°

正切为正,正弦和余弦为负。

  • 第四象限 270° < 𝜃 ≤ 360°

在第四象限,余弦为正,正弦和正切为负。


1.6 三角函数图

参考资料

1.7 Python实现

特点 math NumPy Jax
主要功能 基本数学函数 高性能数组运算,线性代数 自动微分,加速计算,深度学习
适用场景 简单数学计算 科学计算,数据分析 机器学习,深度学习
性能 一般 非常高
自动微分 不支持 部分支持 支持
GPU/TPU加速 不支持 部分支持 支持

1.7.1 math库

  • 基本功能:

    • 提供了常用的数学函数,如三角函数(sin、cos、tan)、指数函数、对数函数、平方根等。
    • 常用于简单的数学计算和数值处理。
  • 特点:

    • 接口简单,易于上手。
    • 主要针对标量的数学运算。
  • 局限性:

    • 不支持向量化运算,对于大规模数值计算效率较低。
    • 功能相对有限,无法进行复杂的矩阵运算。
import math

angle = math.pi / 4  # 45度
sin_value = math.sin(angle)
cos_value = math.cos(angle)
tan_value = math.tan(angle)

inverse_sin = math.asin(sin_value)
inverse_cos = math.acos(cos_value)
inverse_tan = math.atan(tan_value)

print(sin_value, cos_value, tan_value)
print(inverse_sin, inverse_cos, inverse_tan)

执行结果:

0.7071067811865476 0.7071067811865476 0.9999999999999999
0.7853981633974484 0.7853981633974483 0.7853981633974483

1.7.2 numpy

  • 基本功能:

    • 提供了高性能的多维数组对象,以及用于数组运算的函数。
    • 支持向量化运算,大大提高了计算效率。
    • 提供了线性代数、傅里叶变换、随机数生成等功能。
  • 特点:

    • 是 Python 科学计算的基础库,被广泛应用于数据分析、机器学习等领域。
    • 性能优异,特别适合处理大规模数值计算。
  • 局限性:

    • 虽然支持自动微分,但功能相对简单,对于复杂的深度学习模型可能不够灵活。
import numpy as np

angles = np.array([0, np.pi/4, np.pi/2])
sin_values = np.sin(angles)
cos_values = np.cos(angles)

inverse_sin = np.arcsin(sin_values)
print(sin_values, cos_values, inverse_sin, sep='\n')

执行结果:

[0.         0.70710678 1.        ]
[1.00000000e+00 7.07106781e-01 6.12323400e-17]
[0.         0.78539816 1.57079633]

1.7.3 Jax

  • 基本功能:

    • 基于 NumPy 的高性能计算库,支持自动微分、向量化运算和 JIT 编译。
    • 广泛应用于机器学习、深度学习等领域。
  • 特点:

    • 自动微分: 可以自动计算函数的梯度,是深度学习框架的核心功能之一。
    • XLA 编译: 将 Python 函数编译为高效的机器码,加速计算。
    • GPU/TPU 加速: 可以利用 GPU 和 TPU 进行加速计算。
  • 局限性:

    • 相对 NumPy 和 TensorFlow/PyTorch 来说,生态系统还在不断完善。
import jax
import jax.numpy as jnp

# 创建一个角度数组
angles = jnp.linspace(0, 2 * jnp.pi, 10)

# 计算正弦值
sines = jnp.sin(angles)

# 计算反正弦值
arcsines = jnp.arcsin(sines)

print(arcsines)

执行结果:


[ 0.0000000e+00  6.9813174e-01  1.3962636e+00  1.0471976e+00
  3.4906569e-01 -3.4906611e-01 -1.0471977e+00 -1.3962630e+00
 -6.9813144e-01  1.7484555e-07]

1.7.4 可视化

Matplotlib 是一个非常灵活且强大的绘图库,它为 Python 用户提供了丰富的工具来创建各种类型的图表。无论是简单的线图,还是复杂的自定义图表,Matplotlib 都能胜任。如果你需要在 Python 中进行数据可视化,Matplotlib 是一个非常好的选择。

import numpy as np
import matplotlib.pyplot as plt

# 生成数据
x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.sin(x)

# 绘制图形
plt.figure(figsize=(8, 4))
plt.plot(x, y, label='sin(x)')
plt.title('Sin Function')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
plt.legend()
plt.show()

posted @ 2024-11-03 11:38  磁石空杯  阅读(68)  评论(0编辑  收藏  举报