[{"content":"AI 管理的 Hugo 博客与自动化部署计划 上一篇《本博客的框架与部署》记录了本站的技术栈与部署方式。 本文从另一个角度补充记录：AI 助手在本站扮演了什么角色，以及已落地的 Git 同步自动化部署——既是备忘，也是给未来的自己看的工作记录。\nAI 在本站搭建中做了什么 本站从零搭建到最后上线，大部分机械而繁琐的工作由 AI 助手完成，人工只负责做决策和写内容：\n阶段 AI 承担的工作 架构决策 对比 Ghost / Hugo / Hexo，确定 Hugo + PaperMod + Nginx + Cloudflare 方案 环境搭建 安装 Hugo v0.165 (extended)、初始化 git 仓库、拉取 PaperMod submodule 主题配置 hugo.toml 全部参数：菜单、RSS、SEO（Open Graph / Twitter Cards / Schema）、暗色模式 数学公式 配置 goldmark passthrough 扩展保护 $...$，KaTeX 资源本地化到 static/katex/ 代码高亮 配置 Chroma（github-dark 主题） 部署 Nginx 站点配置（HTTP→HTTPS 301、缓存头、404 页）、Cloudflare Full (strict) 内容创作 生成文章模板、测试文章、本文档类的说明文章 文档化 docs/latex-guide.md 写作规范、README、部署脚本 deploy.sh AI 是怎么\u0026quot;测试\u0026quot;博客的 搭建过程中最花时间的是验证。AI 的验证方式是真实浏览器访问，而不是只靠构建成功：\ncurl 检查全部页面返回 200 浏览器实测：KaTeX 公式渲染 0 错误、代码高亮正常、TOC 自动生成、暗色/亮色切换 375px 移动端视口检查：公式/代码/表格不撑破页面 调试中踩过的坑 多行公式被 setext heading 破坏 Hugo 的 goldmark 会把\u0026quot;独立的 = 行\u0026quot;误判为 setext 二级标题。因此多行 $$...$$ 中若出现单独一行的 =，公式会被拆坏。\n$$\\sum_{i=1}^{n} i = \\frac{n(n+1)}{2}$$ 这种单行写法没问题；多行公式请用 \\begin{aligned}（\u0026amp;= 与 \\\\ 换行），这是数学博客的主力格式，实测完全正常。规范已写入 docs/latex-guide.md。\nlocalhost:1313 打不开 开发服务器跑在 VPS 上，监听 127.0.0.1:1313。从 Mac 浏览器访问 localhost:1313 时，localhost 指向的是 Mac 自己——Mac 上并没有 hugo server，于是报 ERR_CONNECTION_REFUSED。\n这不是服务器挂了，而是网络拓扑问题。两种解决办法：\nSSH 隧道（本地预览用，安全）： ssh -N -L 1313:127.0.0.1:1313 root@\u0026lt;VPS-IP\u0026gt; # 然后浏览器访问 http://localhost:1313 直接看生产站（已发布内容用）：https://meilingxiangmoyu.uk/posts/fft-eigenvalue/ 不要把 hugo server 直接绑到 0.0.0.0 暴露公网——开发服务器无鉴权且会展示 draft: true 的文章，防火墙也不该为此开 1313 端口。\ndev server 会把草稿写进 public/ Hugo v0.165 的 hugo server 默认把渲染结果写到磁盘（public/）。配合 -D 启动时，draft: true 的文章也会被写进 public/，而 Nginx 直接指向 public/——意味着草稿会被直接发布上线，同时 dev server 还会与部署流程争抢写 public/。\n修复：dev server 用 --renderToMemory 只做内存渲染，public/ 只归部署流程写：\nhugo server -D --renderToMemory --port 1313 --bind 127.0.0.1 Git 同步自动化部署（已落地） 架构 写作 → 同步 → 上线的完整链路已经跑通：\nMac (Typora 写作) ↓ git add / commit / push GitHub (BWmagician/MeilingXiangMoyu) ↓ VPS cron 每 2 分钟 git pull（deploy key，只读） /var/www/meilingxiangmoyu ↓ 有更新才重建（sync.sh） public/ → Nginx → Cloudflare → https://meilingxiangmoyu.uk 方案对比（当时的选择过程） 方案 实时性 复杂度 安全/暴露面 GitHub Actions 秒级 高（需在 VPS 放 Runner 或 SSH 回连） 需给 CI 开放 SSH 入口 Webhook 秒级 中（需一个公网接收端点 + secret 校验） 多一个对外端点 cron 轮询 git pull 1~5 分钟 低 零新增暴露面 个人博客最终选了 cron 轮询：每 2 分钟检查一次远程更新，命中才执行重建。简单、可靠、无新增攻击面，几秒的延迟对博客完全无感。若以后需要\u0026quot;push 即上线\u0026quot;的实时体验，再升级为 webhook。\n落地过程 VPS 生成 SSH deploy key（ed25519），添加到 GitHub 仓库 Deploy Keys（只读） 配置 ~/.ssh/config 让 github.com 走这把专用密钥 git remote add origin git@github.com:BWmagician/MeilingXiangMoyu.git 一次性种子推送：git push -u origin master（当前 84 个文件全量上传） 编写增量同步脚本 sync.sh：git pull --ff-only → 对比 HEAD → 有变化才 hugo --gc --minify + nginx -s reload；无变化静默退出 cron 注册：每 2 分钟执行一次 sync.sh 端到端验证：本机改文章 → push → 手动跑一次 sync.sh → 确认远端 HEAD 变化触发重建 → 生产站验证内容更新 写作工作流（当前生效） hugo new content posts/my-post/index.md # 建文章 # Typora 打开 content/posts/ 写作，图片放同目录（Page Bundle） hugo server -D # 本地预览 git add . \u0026amp;\u0026amp; git commit -m \u0026#34;...\u0026#34; \u0026amp;\u0026amp; git push # 发布 # VPS 每 2 分钟自动同步 → 构建 → 上线 ✓ 结语 AI 负责繁琐的搭建、配置、测试与文档化，人负责内容与决策——这是本站当前的维护模式。 自动化部署落地后，发布一篇新文章只需一次 git push，从\u0026quot;手动运维\u0026quot;彻底走向\u0026quot;内容创作\u0026quot;。\n","permalink":"https://meilingxiangmoyu.uk/posts/ai-managed-blog/","summary":"\u003ch1 id=\"ai-管理的-hugo-博客与自动化部署计划\"\u003eAI 管理的 Hugo 博客与自动化部署计划\u003c/h1\u003e\n\u003cp\u003e上一篇《本博客的框架与部署》记录了本站的技术栈与部署方式。\n本文从另一个角度补充记录：\u003cstrong\u003eAI 助手在本站扮演了什么角色\u003c/strong\u003e，以及\u003cstrong\u003e已落地的 Git 同步自动化部署\u003c/strong\u003e——既是备忘，也是给未来的自己看的工作记录。\u003c/p\u003e","title":"AI 管理的 Hugo 博客与自动化部署计划"},{"content":"本博客的框架与部署 本文记录本站的技术选型、关键配置和从零部署的完整流程，既是备忘，也方便未来维护。\n整体架构 本站是一个零数据库、零 CMS 的纯静态博客：\nTypora ↓ Markdown (content/posts/) ↓ Git ↓ Hugo build ↓ 静态 HTML (public/) ↓ Nginx ↓ Cloudflare (CDN + HTTPS + WAF) ↓ https://meilingxiangmoyu.uk 技术栈 组件 选型 说明 静态生成器 Hugo v0.165 (extended) 单二进制，毫秒级构建 主题 PaperMod 免费开源，简洁现代 数学公式 KaTeX（本地化） 不依赖远程 CDN 代码高亮 Chroma（Hugo 内置） github-dark 主题 Web 服务器 Nginx 1.24 直接提供静态文件 DNS/CDN Cloudflare Proxied + Full (strict) 不使用的：Ghost、数据库、CMS、在线编辑器、Node.js 服务端。\n写作工作流 Typora 打开 content/posts/\u0026lt;slug\u0026gt;/index.md 图片拖入同目录（Page Bundle），写相对路径 ![](image.png) 本地预览：hugo server -D git add . \u0026amp;\u0026amp; git commit \u0026amp;\u0026amp; git push 服务器 git pull \u0026amp;\u0026amp; hugo，网站更新 创建新文章：\nhugo new content posts/my-post/index.md 自动生成带 frontmatter 的模板（title/date/draft/description/tags/categories）。\n关键配置 LaTeX 支持 Hugo 0.123+ 内置 passthrough 扩展，保护 $...$ 不被 Markdown 误解析：\n[markup.goldmark.extensions.passthrough] enable = true [markup.goldmark.extensions.passthrough.delimiters] block = [[\u0026#34;$$\u0026#34;, \u0026#34;$$\u0026#34;]] inline = [[\u0026#34;$\u0026#34;, \u0026#34;$\u0026#34;]] 渲染由 KaTeX 的 auto-render 完成，资源全部本地化在 static/katex/。\n代码高亮 [markup.highlight] codeFences = true guessSyntax = true noClasses = false style = \u0026#34;github-dark\u0026#34; SEO hugo.toml 中配置了 baseURL、Open Graph、Twitter Cards、Schema 结构化数据；robots.txt 自动引用 sitemap.xml。\n部署流程 服务器端 # 一次性初始化 git clone \u0026lt;repository\u0026gt; /var/www/meilingxiangmoyu cd /var/www/meilingxiangmoyu git submodule update --init --recursive # 拉取 PaperMod # 日常更新 git pull --ff-only hugo Nginx Nginx 直接指向 Hugo 输出目录：\nroot /var/www/meilingxiangmoyu/public; index index.html; 不需要 hugo server，不需要任何常驻进程。\nCloudflare DNS 两条 A 记录（Proxied）：@ 与 www 指向源站 IP。SSL 模式 Full (strict)，源站使用 Cloudflare Origin Certificate。VPS 防火墙 80/443 仅放行 Cloudflare IP 段。\n目录结构 meilingxiangmoyu/ ├── archetypes/ # 新文章模板 ├── assets/ │ └── css/extended/ # 自定义样式（代码块滚动、表格、KaTeX） ├── content/ │ ├── posts/ # 文章（Page Bundle） │ └── about/ ├── layouts/partials/ # extend_head / extend_post_content (KaTeX) ├── static/ │ ├── katex/ # 本地 KaTeX 资源 │ └── favicon.svg ├── themes/PaperMod/ # 主题 (git submodule) ├── hugo.toml └── public/ # 构建产物（不入 Git） 为什么选 Hugo 快：上千篇文章也是毫秒级构建 简单：单个二进制，无 Node.js 依赖，无数据库 Markdown-first：文章就是普通 Markdown 文件，Typora 直接编辑 免费开源：Hugo 与 PaperMod 均免费 易维护：git 管理一切，回滚/备份就是 git 操作 ","permalink":"https://meilingxiangmoyu.uk/posts/hugo-blog-setup/","summary":"\u003ch1 id=\"本博客的框架与部署\"\u003e本博客的框架与部署\u003c/h1\u003e\n\u003cp\u003e本文记录本站的技术选型、关键配置和从零部署的完整流程，既是备忘，也方便未来维护。\u003c/p\u003e\n\u003ch2 id=\"整体架构\"\u003e整体架构\u003c/h2\u003e\n\u003cp\u003e本站是一个\u003cstrong\u003e零数据库、零 CMS 的纯静态博客\u003c/strong\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eTypora\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eMarkdown (content/posts/)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eGit\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eHugo build\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e静态 HTML (public/)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eNginx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCloudflare (CDN + HTTPS + WAF)\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  ↓\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttps://meilingxiangmoyu.uk\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"技术栈\"\u003e技术栈\u003c/h2\u003e\n\u003ctable\u003e\n\t\u003cthead\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003cth\u003e组件\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e选型\u003c/th\u003e\n\t\t\t\t\t\u003cth\u003e说明\u003c/th\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/thead\u003e\n\t\u003ctbody\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e静态生成器\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e v0.165 (extended)\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e单二进制，毫秒级构建\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e主题\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e\u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e免费开源，简洁现代\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e数学公式\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eKaTeX（本地化）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e不依赖远程 CDN\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003e代码高亮\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eChroma（Hugo 内置）\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003egithub-dark 主题\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eWeb 服务器\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eNginx 1.24\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003e直接提供静态文件\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\t\t\u003ctr\u003e\n\t\t\t\t\t\u003ctd\u003eDNS/CDN\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eCloudflare\u003c/td\u003e\n\t\t\t\t\t\u003ctd\u003eProxied + Full (strict)\u003c/td\u003e\n\t\t\t\u003c/tr\u003e\n\t\u003c/tbody\u003e\n\u003c/table\u003e\n\u003cp\u003e不使用的：\u003cdel\u003eGhost\u003c/del\u003e、\u003cdel\u003e数据库\u003c/del\u003e、\u003cdel\u003eCMS\u003c/del\u003e、\u003cdel\u003e在线编辑器\u003c/del\u003e、\u003cdel\u003eNode.js 服务端\u003c/del\u003e。\u003c/p\u003e","title":"本博客的框架与部署"},{"content":"Markdown Test Text 这是中文。\nThis is English.\n中文 + English 混排测试：Hugo 使用 goldmark 渲染，支持 加粗、斜体、行内代码、链接。\nList Item 1 Item 2 Item 3 有序列表：\nFirst Second Third Quote Hello Hugo.\nCode C++:\n#include \u0026lt;bits/stdc++.h\u0026gt; using namespace std; int main() { cout \u0026lt;\u0026lt; \u0026#34;Hello Hugo\\n\u0026#34;; return 0; } Python:\nimport numpy as np x = np.arange(10) print(x) Bash:\necho \u0026#34;hello\u0026#34; \u0026amp;\u0026amp; ls -la JSON:\n{ \u0026#34;name\u0026#34;: \u0026#34;hugo\u0026#34;, \u0026#34;version\u0026#34;: \u0026#34;0.165.0\u0026#34; } YAML:\ntitle: Markdown Test draft: false tags: [Markdown] Formula 行内公式：$E = mc^2$\n块公式（单行）：\n$$ \\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2} $$求和公式：\n$$ \\sum_{i=1}^{n} i = \\frac{n(n+1)}{2} $$多行对齐公式（aligned）：\n$$ \\begin{aligned} (a+b)^2 \u0026= a^2 + 2ab + b^2 \\\\ (a-b)^2 \u0026= a^2 - 2ab + b^2 \\end{aligned} $$矩阵：\n$$ \\begin{pmatrix} a \u0026 b \\\\ c \u0026 d \\end{pmatrix} $$Table 语言 支持 备注 C++ ✅ 高性能 Python ✅ 易用 Rust ✅ 安全 Footnote 这是一段带脚注的文字1。\n脚注内容示例。\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://meilingxiangmoyu.uk/posts/markdown-test/","summary":"\u003ch1 id=\"markdown-test\"\u003eMarkdown Test\u003c/h1\u003e\n\u003ch2 id=\"text\"\u003eText\u003c/h2\u003e\n\u003cp\u003e这是中文。\u003c/p\u003e\n\u003cp\u003eThis is English.\u003c/p\u003e\n\u003cp\u003e中文 + English 混排测试：Hugo 使用 goldmark 渲染，支持 \u003cstrong\u003e加粗\u003c/strong\u003e、\u003cem\u003e斜体\u003c/em\u003e、\u003ccode\u003e行内代码\u003c/code\u003e、\u003ca href=\"https://gohugo.io\"\u003e链接\u003c/a\u003e。\u003c/p\u003e\n\u003ch2 id=\"list\"\u003eList\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eItem 1\u003c/li\u003e\n\u003cli\u003eItem 2\u003c/li\u003e\n\u003cli\u003eItem 3\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e有序列表：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eFirst\u003c/li\u003e\n\u003cli\u003eSecond\u003c/li\u003e\n\u003cli\u003eThird\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"quote\"\u003eQuote\u003c/h2\u003e\n\u003cblockquote\u003e\n\u003cp\u003eHello Hugo.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch2 id=\"code\"\u003eCode\u003c/h2\u003e\n\u003cp\u003eC++:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-cpp\" data-lang=\"cpp\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"cp\"\u003e#include\u003c/span\u003e \u003cspan class=\"cpf\"\u003e\u0026lt;bits/stdc++.h\u0026gt;\u003c/span\u003e\u003cspan class=\"cp\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eusing\u003c/span\u003e \u003cspan class=\"k\"\u003enamespace\u003c/span\u003e \u003cspan class=\"n\"\u003estd\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kt\"\u003eint\u003c/span\u003e \u003cspan class=\"nf\"\u003emain\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecout\u003c/span\u003e \u003cspan class=\"o\"\u003e\u0026lt;\u0026lt;\u003c/span\u003e \u003cspan class=\"s\"\u003e\u0026#34;Hello Hugo\u003c/span\u003e\u003cspan class=\"se\"\u003e\\n\u003c/span\u003e\u003cspan class=\"s\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003ePython:\u003c/p\u003e","title":"Markdown Test"},{"content":"FFT 求特征值 快速傅里叶变换（FFT）不仅是信号处理的利器，也是数值线性代数的优雅工具。 本文讨论 FFT 与特征值之间的内在联系。\n离散傅里叶变换 DFT 定义为：\n$$ X_k = \\sum_{n=0}^{N-1} x_n \\, e^{-2\\pi i k n / N}, \\quad k = 0, 1, \\dots, N-1 $$行内公式示例：频率为 $k$ 的分量幅值 $|X_k|$ 由上式给出。 勾股定理是最基础的例子：$a^2 + b^2 = c^2$。\n循环矩阵与特征值 DFT 矩阵 $F_N$ 的列向量是循环矩阵的特征向量。设 $C$ 为循环矩阵，则：\n$$ C \\, \\mathbf{v}_k = \\lambda_k \\, \\mathbf{v}_k $$其中特征值 $\\lambda_k$ 是 $C$ 第一行元素离散傅里叶变换的结果。更一般地，对厄米矩阵 $A = A^\\dagger$，存在酉矩阵 $U$ 使得：\n$$ A = U \\Lambda U^\\dagger, \\quad \\Lambda = \\operatorname{diag}(\\lambda_1, \\dots, \\lambda_n) $$其中 $\\lambda_i \\in \\mathbb{R}$。牛顿第二定律的矩阵形式也遵循类似结构：\n$$ \\mathbf{F} = m\\mathbf{a} $$复杂度对比 方法 时间复杂度 空间复杂度 直接 DFT $O(N^2)$ $O(N)$ FFT (Cooley–Tukey) $O(N \\log N)$ $O(N)$ 特征值分解 $O(N^3)$ $O(N^2)$ 代码实现 #include \u0026lt;bits/stdc++.h\u0026gt; using namespace std; using cd = complex\u0026lt;double\u0026gt;; const double PI = acos(-1); void fft(vector\u0026lt;cd\u0026gt;\u0026amp; a, bool invert) { int n = a.size(); for (int i = 1, j = 0; i \u0026lt; n; i++) { int bit = n \u0026gt;\u0026gt; 1; for (; j \u0026amp; bit; bit \u0026gt;\u0026gt;= 1) j ^= bit; j ^= bit; if (i \u0026lt; j) swap(a[i], a[j]); } for (int len = 2; len \u0026lt;= n; len \u0026lt;\u0026lt;= 1) { double ang = 2 * PI / len * (invert ? -1 : 1); cd wlen(cos(ang), sin(ang)); for (int i = 0; i \u0026lt; n; i += len) { cd w(1); for (int j = 0; j \u0026lt; len / 2; j++) { cd u = a[i + j], v = a[i + j + len / 2] * w; a[i + j] = u + v; a[i + j + len / 2] = u - v; w *= wlen; } } } if (invert) { for (cd\u0026amp; x : a) x /= n; } } Python 版本：\nimport numpy as np def fft(x): n = len(x) if n \u0026lt;= 1: return x even = fft(x[0::2]) odd = fft(x[1::2]) factor = np.exp(-2j * np.pi * np.arange(n // 2) / n) return np.concatenate([even + factor * odd, even - factor * odd]) Bash 示例：\necho \u0026#34;hello\u0026#34; | awk \u0026#39;{print toupper($0)}\u0026#39; 频谱图 注意事项 使用 FFT 时注意数值精度：$N \u003e 10^6$ 时相对误差约为 $10^{-12}$ 量级。\n输入长度应为 2 的幂，否则先补零1 复数乘法顺序会影响精度 逆变换记得除以 $N$ 参考 Cooley, J. W.; Tukey, J. W. (1965), An algorithm for the machine calculation of complex Fourier series FFT 笔记 Bluestein 算法可以处理任意长度，但常数较大。\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","permalink":"https://meilingxiangmoyu.uk/posts/fft-eigenvalue/","summary":"\u003ch1 id=\"fft-求特征值\"\u003eFFT 求特征值\u003c/h1\u003e\n\u003cp\u003e快速傅里叶变换（FFT）不仅是信号处理的利器，也是数值线性代数的优雅工具。\n本文讨论 FFT 与特征值之间的内在联系。\u003c/p\u003e\n\u003ch2 id=\"离散傅里叶变换\"\u003e离散傅里叶变换\u003c/h2\u003e\n\u003cp\u003eDFT 定义为：\u003c/p\u003e\n$$\nX_k = \\sum_{n=0}^{N-1} x_n \\, e^{-2\\pi i k n / N}, \\quad k = 0, 1, \\dots, N-1\n$$\u003cp\u003e行内公式示例：频率为 $k$ 的分量幅值 $|X_k|$ 由上式给出。\n勾股定理是最基础的例子：$a^2 + b^2 = c^2$。\u003c/p\u003e","title":"FFT 求特征值"},{"content":"Hello Hugo 这是我的第一篇 Hugo 文章。\n以后这里使用 Typora 编写 Markdown。\n","permalink":"https://meilingxiangmoyu.uk/posts/hello-hugo/","summary":"\u003ch1 id=\"hello-hugo\"\u003eHello Hugo\u003c/h1\u003e\n\u003cp\u003e这是我的第一篇 Hugo 文章。\u003c/p\u003e\n\u003cp\u003e以后这里使用 Typora 编写 Markdown。\u003c/p\u003e","title":"Hello Hugo"},{"content":"About 这里以后填写个人介绍。\n","permalink":"https://meilingxiangmoyu.uk/about/","summary":"\u003ch1 id=\"about\"\u003eAbout\u003c/h1\u003e\n\u003cp\u003e这里以后填写个人介绍。\u003c/p\u003e","title":"About"}]