17.2 向量运算:加法、减法、数乘
用箭头图直观理解向量运算的几何意义
[3, 2] + [1, 3] = [4, 5]
Python代码:
import matplotlib.pyplot as plt
import numpy as np
# 定义向量
A = np.array([3, 2])
B = np.array([1, 3])
# 绘制箭头
fig, ax = plt.subplots(figsize=(8, 8))
ax.quiver(0, 0, A[0], A[1], angles='xy', scale_units='xy', scale=1,
color='blue', width=0.006, label='A')
ax.quiver(0, 0, B[0], B[1], angles='xy', scale_units='xy', scale=1,
color='green', width=0.006, label='B')
# 计算结果
result = A + B
ax.quiver(0, 0, result[0], result[1], angles='xy', scale_units='xy', scale=1,
color='red', width=0.008, label='A+B')
ax.set_xlim(-6, 6)
ax.set_ylim(-6, 6)
ax.grid(True, alpha=0.3)
ax.axhline(0, color='black', linewidth=0.5)
ax.axvline(0, color='black', linewidth=0.5)
ax.legend()
plt.show()💡 向量运算的几何意义:
• 向量加法:平行四边形法则或首尾相连法
• 向量减法:A - B = A + (-B),指向被减向量
• 数乘:标量改变向量长度,负数反转方向
• 拖动滑块调整向量分量,观察结果向量的变化
• 向量加法:平行四边形法则或首尾相连法
• 向量减法:A - B = A + (-B),指向被减向量
• 数乘:标量改变向量长度,负数反转方向
• 拖动滑块调整向量分量,观察结果向量的变化
🔄 特征向量可视化器
观察矩阵线性变换如何改变向量场。特征向量方向的向量只改变长度,不改变方向(Av = λv)。
矩阵信息
矩阵 A:
[[1.25, -0.75], [-0.75, 1.25]]
行列式:
1.000
迹:
2.500
🎯 特征向量
满足 Av = λv 的向量v称为特征向量,λ为特征值。 特征向量方向的向量只改变长度,不改变方向。
🔄 线性变换
矩阵乘法表示线性变换,将向量从一个空间映射到另一个空间。 颜色深浅表示变换后向量的模长。
💡 探索建议: 切换不同变换类型,观察向量场的形变。特征向量示例中,注意对角线方向的向量保持方向不变。 调整网格密度可以看到更细致的变换效果。
17.5 梯度向量场:函数的增长方向
梯度垂直于等高线,指向函数增长最快的方向
函数与梯度:
f(x, y) = x² + y²
∇f = [2x, 2y]
Python代码:
import numpy as np
import matplotlib.pyplot as plt
# 定义函数
def f(x, y):
return x**2 + y**2
# 计算梯度
x = np.linspace(-4, 4, 15)
y = np.linspace(-4, 4, 15)
X, Y = np.meshgrid(x, y)
# 数值梯度
U, V = np.gradient(f(X, Y))
# 绘制向量场和等高线
fig, ax = plt.subplots(figsize=(10, 10))
ax.contour(X, Y, f(X, Y), levels=8, colors='gray', alpha=0.5)
ax.quiver(X, Y, U, V, color='green')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Gradient Field')
plt.show()💡 梯度向量场的意义:
• 梯度方向:函数增长最快的方向
• 梯度大小:增长速率(箭头长度)
• 垂直于等高线:梯度总是指向等高线法线方向
• 优化应用:梯度下降沿负梯度方向寻找最小值
• 调整函数类型和密度,观察不同梯度场的特征
• 梯度方向:函数增长最快的方向
• 梯度大小:增长速率(箭头长度)
• 垂直于等高线:梯度总是指向等高线法线方向
• 优化应用:梯度下降沿负梯度方向寻找最小值
• 调整函数类型和密度,观察不同梯度场的特征
17.7 流线图:展示向量场的流动趋势
流线切线方向即为向量方向,直观展示整体流动模式
向量场定义:
F(x, y) = (-y, x)
逆时针旋转场
Python代码:
import numpy as np
import matplotlib.pyplot as plt
# 定义向量场
x = np.linspace(-4, 4, 20)
y = np.linspace(-4, 4, 20)
X, Y = np.meshgrid(x, y)
U, V = -Y, X # 漩涡场
# 绘制流线图
fig, ax = plt.subplots(figsize=(10, 10))
strm = ax.streamplot(X, Y, U, V,
density=1.5,
color=np.sqrt(U**2 + V**2),
cmap='RdYlBu',
linewidth=2,
arrowsize=1.5)
# 可选:叠加箭头网格
ax.quiver(X, Y, U, V, alpha=0.4, color='gray')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Streamline Plot - vortex')
plt.colorbar(strm.lines, label='Magnitude')
plt.show()💡 流线图 vs 箭头图:
• 箭头图:离散采样点,清晰显示每个位置的向量
• 流线图:连续流线,更好展示整体流动趋势
• 流线切线:每点的切线方向即为该点的向量方向
• 应用:流体力学、电磁场、气象学
• 流线颜色反映向量场强度,箭头指示流动方向
• 箭头图:离散采样点,清晰显示每个位置的向量
• 流线图:连续流线,更好展示整体流动趋势
• 流线切线:每点的切线方向即为该点的向量方向
• 应用:流体力学、电磁场、气象学
• 流线颜色反映向量场强度,箭头指示流动方向