差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录 前一修订版 | |||
| 数学分析:欧几里得空间 [2026/01/09 13:43] – [点集 (Point Sets)] 张叶安 | 数学分析:欧几里得空间 [2026/02/18 19:40] (当前版本) – 移除 张叶安 | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| - | ====== | ||
| - | 实数系 $\mathbf{R}$ 的 $n$ 重积定义为 $n$ 维实 欧几里得空间: | ||
| - | $$ \mathbf{R}^n = \{(x_1, x_2, \dots, x_n) : x_i \in \mathbf{R} \} $$ | ||
| - | 其中 $\mathbf{0} = (0, \dots, 0)$ 为原点。 | ||
| - | |||
| - | ===== 线性结构 (Linear Structure) ===== | ||
| - | |||
| - | $\mathbf{R}^n$ 具备向量空间结构。 | ||
| - | |||
| - | ==== 1. 线性运算 ==== | ||
| - | 对于 $\mathbf{x}, | ||
| - | * | ||
| - | * | ||
| - | |||
| - | **运算性质 :** | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 2. 几何概念 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ===== 度量 (Metric) ===== | ||
| - | |||
| - | 通过引入模长和内积,赋予空间几何性质。 | ||
| - | |||
| - | ==== 1. 模长 (Euclid 范数) ==== | ||
| - | 定义:$|\mathbf{x}| = (\sum x_i^2)^{1/ | ||
| - | |||
| - | **性质 (定理 3.2.1):** | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 2. 内积 (Inner Product) ==== | ||
| - | 定义:$\mathbf{x} \cdot \mathbf{y} = \sum x_i y_i = \mathbf{x}^T \mathbf{y}$ | ||
| - | |||
| - | **性质 :** | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 3. 几何应用 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 4. 球与有界集 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ===== 点集 (Point Sets) ===== | ||
| - | |||
| - | 拓扑结构的基础,描述点的“邻近”关系。 | ||
| - | |||
| - | ^ 概念 ^ 定义 ^ 集合记号 ^ | ||
| - | | **内点** | 存在球 $B_r(x) \subset A$ | 内部 $A^\circ$ | | ||
| - | | **触点** | $\forall r>0, B_r(x) \cap A \neq \emptyset$ | 闭包 $\overline{A}$ | | ||
| - | | **边界点** | $\forall r>0, B_r(x)$ 既含 $A$ 点也含 $A^c$ 点 | 边界 $\partial A$ | | ||
| - | | **聚点** | $\forall r>0, B_r(x)$ 含 $A$ 中异于 $x$ 的点 | 导集 $A'$ | | ||
| - | |||
| - | |||
| - | < | ||
| - | < | ||
| - | < | ||
| - | /* 容器基础样式 */ | ||
| - | .topo-demo-container { | ||
| - | font-family: | ||
| - | max-width: 850px; /* 稍微加宽一点 */ | ||
| - | margin: 20px auto; | ||
| - | border: 1px solid #e5e7eb; | ||
| - | border-radius: | ||
| - | background: white; | ||
| - | box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1); | ||
| - | display: flex; | ||
| - | flex-direction: | ||
| - | overflow: hidden; | ||
| - | } | ||
| - | |||
| - | /* 响应式布局:桌面端左右排列 */ | ||
| - | @media (min-width: 768px) { | ||
| - | .topo-demo-container { | ||
| - | flex-direction: | ||
| - | } | ||
| - | } | ||
| - | |||
| - | /* 左侧绘图区 */ | ||
| - | .topo-canvas-area { | ||
| - | position: relative; | ||
| - | background-color: | ||
| - | flex-grow: 1; | ||
| - | /* 这里的最小高度很重要,保证图形有空间展示 */ | ||
| - | min-height: 400px; | ||
| - | height: 400px; | ||
| - | cursor: crosshair; | ||
| - | overflow: hidden; | ||
| - | user-select: | ||
| - | /* 居中内容 */ | ||
| - | display: flex; | ||
| - | align-items: | ||
| - | justify-content: | ||
| - | } | ||
| - | |||
| - | .topo-canvas-hint { | ||
| - | position: absolute; | ||
| - | top: 16px; | ||
| - | left: 16px; | ||
| - | font-size: 14px; | ||
| - | color: #6b7280; | ||
| - | pointer-events: | ||
| - | background: rgba(255, | ||
| - | padding: 6px 10px; | ||
| - | border-radius: | ||
| - | border: 1px solid #e5e7eb; | ||
| - | z-index: 10; | ||
| - | } | ||
| - | |||
| - | /* 右侧面板 */ | ||
| - | .topo-panel { | ||
| - | width: 100%; | ||
| - | background: white; | ||
| - | border-top: 1px solid #e5e7eb; | ||
| - | padding: 24px; | ||
| - | box-sizing: border-box; | ||
| - | display: flex; | ||
| - | flex-direction: | ||
| - | } | ||
| - | |||
| - | @media (min-width: 768px) { | ||
| - | .topo-panel { | ||
| - | width: 340px; / | ||
| - | border-top: none; | ||
| - | border-left: | ||
| - | flex-shrink: | ||
| - | height: 400px; /* 匹配画布高度 */ | ||
| - | overflow-y: auto; /* 内容多时可滚动 */ | ||
| - | } | ||
| - | } | ||
| - | |||
| - | .topo-panel h3 { | ||
| - | margin: 0 0 16px 0; | ||
| - | font-size: 18px; | ||
| - | font-weight: | ||
| - | color: #1f2937; | ||
| - | border-bottom: | ||
| - | padding-bottom: | ||
| - | } | ||
| - | |||
| - | /* 状态卡片样式 */ | ||
| - | .status-card { | ||
| - | padding: 10px 12px; | ||
| - | border-radius: | ||
| - | border: 1px solid transparent; | ||
| - | margin-bottom: | ||
| - | transition: all 0.2s; | ||
| - | } | ||
| - | |||
| - | .status-header { | ||
| - | display: flex; | ||
| - | justify-content: | ||
| - | align-items: | ||
| - | margin-bottom: | ||
| - | } | ||
| - | |||
| - | .status-title { | ||
| - | font-weight: | ||
| - | font-size: 14px; | ||
| - | color: #1f2937; | ||
| - | } | ||
| - | |||
| - | .status-badge { | ||
| - | font-size: 10px; | ||
| - | font-weight: | ||
| - | padding: 2px 6px; | ||
| - | border-radius: | ||
| - | min-width: 24px; | ||
| - | text-align: center; | ||
| - | } | ||
| - | |||
| - | .status-desc { | ||
| - | font-size: 12px; | ||
| - | color: #4b5563; | ||
| - | margin: 0; | ||
| - | line-height: | ||
| - | } | ||
| - | |||
| - | .status-math { | ||
| - | font-family: | ||
| - | font-size: 10px; | ||
| - | color: #6b7280; | ||
| - | display: block; | ||
| - | margin-top: 2px; | ||
| - | } | ||
| - | |||
| - | /* 状态激活样式 */ | ||
| - | .card-inactive { background: #f9fafb; opacity: 0.6; } | ||
| - | .badge-no { color: #9ca3af; background: #f3f4f6; } | ||
| - | |||
| - | .card-interior { background: #f0fdf4; border-color: | ||
| - | .badge-interior { color: #16a34a; background: #dcfce7; } | ||
| - | |||
| - | .card-contact { background: #eff6ff; border-color: | ||
| - | .badge-contact { color: #2563eb; background: #dbeafe; } | ||
| - | |||
| - | .card-boundary { background: #faf5ff; border-color: | ||
| - | .badge-boundary { color: #9333ea; background: #f3e8ff; } | ||
| - | |||
| - | .card-limit { background: #fff7ed; border-color: | ||
| - | .badge-limit { color: #ea580c; background: #ffedd5; } | ||
| - | |||
| - | .topo-info { | ||
| - | margin-top: auto; /* 推到底部 */ | ||
| - | padding-top: | ||
| - | border-top: 1px solid #f3f4f6; | ||
| - | font-size: 11px; | ||
| - | color: #6b7280; | ||
| - | line-height: | ||
| - | } | ||
| - | | ||
| - | /* SVG 样式 */ | ||
| - | svg { | ||
| - | display: block; | ||
| - | width: 100%; | ||
| - | height: 100%; | ||
| - | } | ||
| - | </ | ||
| - | </ | ||
| - | < | ||
| - | |||
| - | <div class=" | ||
| - | <!-- 左侧绘图区 --> | ||
| - | <div class=" | ||
| - | <div class=" | ||
| - | < | ||
| - | viewBox=" | ||
| - | preserveAspectRatio=" | ||
| - | --> | ||
| - | <svg viewBox=" | ||
| - | < | ||
| - | <filter id=" | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <!-- 集合 A (主体) - 放大尺寸 --> | ||
| - | <!-- 圆心调整到 (180, 200),半径放大到 110 --> | ||
| - | <circle cx=" | ||
| - | <circle cx=" | ||
| - | <text x=" | ||
| - | |||
| - | <!-- 集合 A (孤立点) - 调整位置 --> | ||
| - | <!-- 位置调整到 (400, 200) --> | ||
| - | <circle cx=" | ||
| - | <text x=" | ||
| - | |||
| - | <!-- 动态元素组 --> | ||
| - | <g id=" | ||
| - | <!-- 邻域球 --> | ||
| - | <circle id=" | ||
| - | <line id=" | ||
| - | <text id=" | ||
| - | | ||
| - | <!-- 点 x --> | ||
| - | <circle id=" | ||
| - | <text id=" | ||
| - | </g> | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | <!-- 右侧面板 --> | ||
| - | <div class=" | ||
| - | < | ||
| - | | ||
| - | <!-- 内点 --> | ||
| - | <div id=" | ||
| - | <div class=" | ||
| - | <span class=" | ||
| - | <span id=" | ||
| - | </ | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | <!-- 触点 --> | ||
| - | <div id=" | ||
| - | <div class=" | ||
| - | <span class=" | ||
| - | <span id=" | ||
| - | </ | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | <!-- 边界点 --> | ||
| - | <div id=" | ||
| - | <div class=" | ||
| - | <span class=" | ||
| - | <span id=" | ||
| - | </ | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | <!-- 聚点 --> | ||
| - | <div id=" | ||
| - | <div class=" | ||
| - | <span class=" | ||
| - | <span id=" | ||
| - | </ | ||
| - | <p class=" | ||
| - | </ | ||
| - | |||
| - | <div class=" | ||
| - | < | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | (function() { | ||
| - | const svg = document.getElementById(' | ||
| - | const dynamicGroup = document.getElementById(' | ||
| - | const neighborCircle = document.getElementById(' | ||
| - | const radiusLine = document.getElementById(' | ||
| - | const radiusText = document.getElementById(' | ||
| - | const pointX = document.getElementById(' | ||
| - | const pointLabel = document.getElementById(' | ||
| - | const canvasArea = document.getElementById(' | ||
| - | |||
| - | // --- 关键配置:必须与 SVG 中的图形参数一致 --- | ||
| - | const mainCircle = { x: 180, y: 200, r: 110 }; // 对应 SVG 中的 cx, cy, r | ||
| - | const isolatedPoint = { x: 400, y: 200, r: 6 }; // 对应 SVG 中的 cx, cy | ||
| - | const r = 40; // 邻域半径 | ||
| - | |||
| - | // 更新UI状态的辅助函数 | ||
| - | function updateStatus(type, | ||
| - | const card = document.getElementById(`card-${type}`); | ||
| - | const badge = document.getElementById(`badge-${type}`); | ||
| - | | ||
| - | // 重置类 | ||
| - | card.className = ' | ||
| - | badge.className = ' | ||
| - | badge.textContent = isActive ? ' | ||
| - | |||
| - | if (isActive) { | ||
| - | card.classList.add(`card-${type}`); | ||
| - | badge.classList.add(`badge-${type}`); | ||
| - | } else { | ||
| - | card.classList.add(' | ||
| - | badge.classList.add(' | ||
| - | } | ||
| - | } | ||
| - | |||
| - | function updatePosition(clientX, | ||
| - | // 坐标转换:将屏幕坐标转换为SVG坐标 | ||
| - | // 这一步至关重要,它保证了无论SVG被缩放成多大,逻辑判断都是基于SVG内部坐标系的(0-500) | ||
| - | const pt = svg.createSVGPoint(); | ||
| - | pt.x = clientX; | ||
| - | pt.y = clientY; | ||
| - | const svgP = pt.matrixTransform(svg.getScreenCTM().inverse()); | ||
| - | | ||
| - | // 限制点 x 不跑出画布太远 (可选) | ||
| - | const x = Math.max(10, | ||
| - | const y = Math.max(10, | ||
| - | |||
| - | // 移动SVG元素 | ||
| - | neighborCircle.setAttribute(' | ||
| - | neighborCircle.setAttribute(' | ||
| - | | ||
| - | pointX.setAttribute(' | ||
| - | pointX.setAttribute(' | ||
| - | | ||
| - | pointLabel.setAttribute(' | ||
| - | pointLabel.setAttribute(' | ||
| - | |||
| - | radiusLine.setAttribute(' | ||
| - | radiusLine.setAttribute(' | ||
| - | radiusLine.setAttribute(' | ||
| - | radiusLine.setAttribute(' | ||
| - | |||
| - | radiusText.setAttribute(' | ||
| - | radiusText.setAttribute(' | ||
| - | |||
| - | // --- 逻辑计算 --- | ||
| - | const distToMain = Math.sqrt(Math.pow(x - mainCircle.x, | ||
| - | const distToIso = Math.sqrt(Math.pow(x - isolatedPoint.x, | ||
| - | |||
| - | // 1. 是否相交 A (碰到大圆 或者 碰到孤立点) | ||
| - | const intersectsA = (distToMain < mainCircle.r + r) || (distToIso < r); | ||
| - | |||
| - | // 2. 是否完全在 A 内 (不包含补集) | ||
| - | // 必须完全在大圆内,且不能碰到孤立点(虽然孤立点属于A,但这里简化逻辑,通常内点只在大块区域讨论) | ||
| - | // 严格来说,如果 x 在孤立点上,邻域超出孤立点,就不算内点。 | ||
| - | // 对于大圆:距离 + 半径 <= 大圆半径 | ||
| - | const isFullyInsideMain = distToMain + r <= mainCircle.r; | ||
| - | | ||
| - | // 补集判定:只要不是完全在A内部,就一定碰到了外部 | ||
| - | // 注意:如果点在孤立点附近,邻域肯定包含外部点,因为孤立点没有“内部” | ||
| - | const intersectsComplement = !isFullyInsideMain; | ||
| - | |||
| - | // 3. 聚点判断 | ||
| - | // 邻域内是否有 A 中异于 x 的点 | ||
| - | | ||
| - | // 针对大圆:只要邻域碰到大圆,且 x 不在大圆边界切点外侧极远... | ||
| - | // 简化判断:只要相交,且 x 不是仅在边缘蹭到一点点(数学上只要相交就有无穷多点,除非相切) | ||
| - | // 在计算机模拟中,我们认为只要 dist < R + r,就有交集。 | ||
| - | // 唯一例外:如果 A 只有有限个点。这里 A 是实心圆 + 孤立点。 | ||
| - | // 实心圆部分:只要邻域碰到实心圆,里面就有无数个点,肯定有异于 x 的点。 | ||
| - | const hasOtherPointsInMain = distToMain < mainCircle.r + r; | ||
| - | | ||
| - | // 针对孤立点: | ||
| - | // 如果 x 恰好在孤立点上 (distToIso 接近 0),那么邻域里 A 的成员只有 x 自己 -> 不是聚点。 | ||
| - | // 如果 x 在孤立点旁边 (distToIso < r 但 > 0),邻域里有孤立点 -> 是聚点。 | ||
| - | const isAtIsolatedPoint = distToIso < 6; // 稍微给点容差 | ||
| - | const hasOtherPointsInIso = !isAtIsolatedPoint && (distToIso < r); | ||
| - | | ||
| - | const hasLimitPoints = hasOtherPointsInMain || hasOtherPointsInIso; | ||
| - | |||
| - | // --- 更新状态 --- | ||
| - | updateStatus(' | ||
| - | updateStatus(' | ||
| - | updateStatus(' | ||
| - | updateStatus(' | ||
| - | } | ||
| - | |||
| - | // 事件监听 | ||
| - | canvasArea.addEventListener(' | ||
| - | updatePosition(e.clientX, | ||
| - | }); | ||
| - | | ||
| - | // 触摸支持 | ||
| - | canvasArea.addEventListener(' | ||
| - | e.preventDefault(); | ||
| - | const touch = e.touches[0]; | ||
| - | updatePosition(touch.clientX, | ||
| - | }, { passive: false }); | ||
| - | |||
| - | // 初始化位置:放在大圆边界附近演示 | ||
| - | const rect = canvasArea.getBoundingClientRect(); | ||
| - | // 模拟一个初始坐标 | ||
| - | // 由于我们现在有坐标转换,最好直接手动触发一次逻辑计算,传入屏幕中心点 | ||
| - | const centerX = rect.left + rect.width / 2; | ||
| - | const centerY = rect.top + rect.height / 2; | ||
| - | updatePosition(centerX, | ||
| - | |||
| - | })(); | ||
| - | </ | ||
| - | </ | ||
| - | </ | ||
| - | ==== 1. 开集与闭集 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * $A$ 是闭集 $\Leftrightarrow A^c$ 是开集 | ||
| - | |||
| - | **定理 3.3.2 (运算封闭性): | ||
| - | * | ||
| - | * | ||
| - | |||
| - | **定理 3.3.3 (结构):** | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 2. 区域 (Region) ==== | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 3. 邻域基 ==== | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ===== 复平面 (Complex Plane) ===== | ||
| - | |||
| - | $\mathbf{R}^2$ 赋予乘法结构后成为复数域 $\mathbf{C}$。 | ||
| - | |||
| - | ==== 1. 代数结构 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | **重要关系式: | ||
| - | * $z \bar{z} = |z|^2$ | ||
| - | * | ||
| - | * $|zw| = |z||w|$ | ||
| - | |||
| - | ==== 2. 复变函数基础 ==== | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | * | ||
| - | |||
| - | ==== 3. 三角恒等式 (由 Euler 公式推导) ==== | ||
| - | |||
| - | **求和公式: | ||
| - | $$ \sum_{k=1}^n \cos kx = \frac{\sin(n + 1/ | ||
| - | $$ \sum_{k=1}^n \sin kx = \frac{\sin(nx/ | ||
| - | |||
| - | **幂次展开 (Dirichlet Kernel 相关):** | ||
| - | $$ \cos^n x, \sin^n x $$ 可通过二项式展开 $(\mathrm{e}^{\mathrm{i}x} \pm \mathrm{e}^{-\mathrm{i}x})^n$ 转化为倍角余弦/ | ||
| - | |||
| - | $$ | ||
| - | \begin{cases} | ||
| - | \cos nx = \sum_{k=0}^{[n/ | ||
| - | \sin nx = \sum_{k=0}^{[(n-1)/ | ||
| - | \end{cases} | ||
| - | $$ | ||
| - | |||
| - | $$ | ||
| - | \begin{cases} | ||
| - | \sin^{2n}x = \frac{1}{4^n} \left[ \binom{2n}{n} + 2 \sum_{k=1}^{n} (-1)^k \binom{2n}{n-k} \cos 2kx \right], \\ | ||
| - | \sin^{2n+1}x = \frac{1}{4^n} \sum_{k=0}^{n} (-1)^k \binom{2n+1}{n-k} \sin(2k+1)x, | ||
| - | \cos^{2n}x = \frac{1}{4^n} \left[ \binom{2n}{n} + 2 \sum_{k=1}^{n} \binom{2n}{n-k} \cos 2kx \right], \\ | ||
| - | \cos^{2n+1}x = \frac{1}{4^n} \sum_{k=0}^{n} \binom{2n+1}{n-k} \cos(2k+1)x. | ||
| - | \end{cases} | ||
| - | $$ | ||