第1章 解析方法与几何模型
1.1 向量表示法与几何建模基本案例
1.1.1 几何建模的思想
数学世界的探索始于计数和丈量。计数带来了数字和代数学,而丈量则推动了几何学的发展。高中毕业后,我们对数学模型的理解还较浅,但几何模型对我们而言是最直观的。通过几何定理,我们可以直观地感受几何关系,并利用这些关系推算长度等。
几何模型可以分为位置关系和数量关系。位置关系包括平行、垂直等,数量关系涉及边长、角度、面积等求解。分析几何问题的方法主要有三种:
- 传统几何的演绎-证明体系:基于已证明的公理和定理,通过逻辑推理得出结果。
- 基于向量的计算化几何:将几何问题转化为向量的计算问题,方便求解。
- 基于极坐标与方程的解析几何:利用极坐标和参数方程,将几何问题转化为代数问题求解。
常见的几何定理包括三角形内角和定理、勾股定理、正弦定理、余弦定理、圆幂定理等。这些定理在解决几何问题时非常有用。
1.1.2 向量表示与坐标变换
向量是几何中表示方向和距离的工具,可以在高维空间中进行加减运算、数量乘运算等。在Python中,可以使用NumPy库创建和操作向量。例如:
import numpy as np
x = np.array([1, 2, 3, 5, 8])
向量的引入不仅仅是为了表示几何图形中的方向和距离,更重要的是利用代数方法解决几何问题。在物理问题、计算机图形学等领域,向量运算简化了计算过程。
二维空间的旋转变换:
import numpy as np
theta = np.radians(30)
rotation_matrix = np.array([
[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]
])
point = np.array([a, b])
rotated_point = rotation_matrix.dot(point)
print("旋转后的坐标为:", rotated_point)
三维空间的旋转变换:
import numpy as np
alpha = np.radians(30)
beta = np.radians(45)
gamma = np.radians(60)
R_z = np.array([[np.cos(alpha), -np.sin(alpha), 0],
[np.sin(alpha), np.cos(alpha), 0],
[0, 0, 1]])
R_y = np.array([[np.cos(beta), 0, np.sin(beta)],
[0, 1, 0],
[-np.sin(beta), 0, np.cos(beta)]])
R_x = np.array([[1, 0, 0],
[0, np.cos(gamma), -np.sin(gamma)],
[0, np.sin(gamma), np.cos(gamma)]])
R = R_z @ R_y @ R_x
P = np.array([1, 2, 3])
P_rotated = R @ P
print("旋转后P点的坐标为:", P_rotated)
1.2 Numpy 与线性代数
1.2.1 Numpy向量与矩阵的操作
在科学计算中,Numpy的数组对象是处理问题的得力助手。它能进行向量化运算,提升代码简洁性和运行速度。
创建向量和矩阵:
import numpy as np
vector = np.array([1, 2, 3])
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
向量和矩阵的基本属性:
print(vector.shape) # (3,)
print(matrix.shape) # (3, 3)
索引和切片:
print(vector[0]) # 输出第一个元素, 1
print(matrix[1, 1]) # 输出第二行第二列的元素, 5
向量和矩阵的运算:
vector1 = np.array([1, 2, 3])
vector2 = np.array([4, 5, 6])
print(np.add(vector1, vector2)) # [5, 7, 9]
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
print(np.dot(matrix1, matrix2)) # [[19, 22], [43, 50]]
1.2.2 利用Numpy进行线性代数基本运算
Numpy的广播机制和线性代数函数使得数值计算更加便捷。
数量乘法:
scalar = 5
scaled_vector = scalar * vector
print("Scaled vector:", scaled_vector)
矩阵的转置:
transposed_matrix = matrix.T
print("Transposed matrix:\n", transposed_matrix)
行列式:
matrix_determinant = np.linalg.det(matrix)
print("Matrix determinant:", matrix_determinant)
求解线性方程组:
A = np.array([[3, 1], [1, 2]])
b = np.array([9, 8])
solution = np.linalg.solve(A, b)
print("Solution of the linear system:", solution)
1.2.3 numpy.linalg 的使用
Numpy的 linalg
子模块提供了丰富的线性代数函数。
计算逆矩阵:
pseudo_inverse_matrix = np