有限差分法理论基础
基本概念
对于微分方程及其边界条件 \[
\left\{
\begin{aligned}
\mathcal{L}u &= f,\,\, x \in \Omega\\
\mathcal{B}u &= g,\,\, x \,\text{on}\, \partial \Omega
\end{aligned}
\right.
\] 考虑对应的差分格式 \[
\left\{
\begin{aligned}
L v_j^n &= f_j^n,\,\, x_j \in \Omega\\
B v_j^{n} &= g_j^{n},\,\, x_j \,\text{on}\, \partial \Omega
\end{aligned}
\right.
\] 其中 \(L,B\) 分别是 \(\mathcal{L}\) 和 \(\mathcal{B}\) 的近似。
对于双层线性差分格式,我们有时考虑如下的规范形式(\(V^{n}\) 代表 \(\{v_j^n\}\) 组成的网格函数) \[
V^{n+1} = Q\,V^n + \Delta t\,F^n
\]
它是实际计算 ...
LaTeX 论文排版笔记
整理一下LaTeX论文排版中的基本要素。
页面布局
通常需要在使用文档时首先全局地规定一些排版参数,如字号、纸张大小、单双面等等。
比如调用 article 文档类排版文章,指定基本字号为 11pt,双面排版,纸张为
A4 大小: 1\documentclass[10pt,twoside,a4paper]{article}
常用的参数如下:
指定字号,例如10pt,11pt,12pt,默认10pt
指定纸张大小,默认为美式信纸 letterpaper(大约 21.6 cm × 28.0
cm)。可指定选项还包括 a4paper,b5paper,executivepaper 和
legalpaper等。有关纸张大小页边距的更多细节主要通过geometry包设置,当然在这里设置也可以
单面/双面排版,twoside,oneside。双面排版时,奇偶页的页眉页脚、页边距不同。article和report默认为oneside,book默认为twoside。
指定单栏/双栏排版,onecolumn, twocolumn。默认为 onecolum。
指定横向排版,landsc ...
pi的计算
从一个讲座中看见了一个有趣的问题:祖冲之是怎么计算圆周率的,割圆法真的足够吗?并由此引出了数值计算中常见的几个提高阶数的技巧,值得记录一下。写着写着就刹不住了,将维基百科上的很多相关内容都记录了下来。
\(\pi\)的定义
\(\pi\)作为最重要的数学常数之一,关于它的定义方式数不胜数。
最初等的定义即为周长与直径的比 \[
\pi = \frac{C}{d}
\]
可以利用三角函数定义:\(\pi\)
是正弦函数的最小正零点。
注意到三角函数的定义并不一定需要依赖于几何,它们可以独立依赖于微分方程的解来定义,从而避免循环定义。
可以利用积分公式来定义 \[
\pi = \int_{-1}^1 \frac{dx}{\sqrt{1-x^2}}
\]
甚至还可以通过偏微分方程的特征值来定义,很多模型问题的特征值都是
\(n \pi\) 的形式。
\(\pi\)还有很多基于连分数的定义/展开式,由于不便于敲公式,这里略去。
\(\pi\)的计算历史
\(\pi\)的计算历史非常悠久,主要分为如下几个阶段:
古代:自然产生的割圆法
近代:
16世纪开始的无穷级数法(包括梅钦类公式),基于 ...
LaTeX 数学笔记
整理一下LaTeX关于数学公式/定理与证明以及相关的内容。
AMS宏包
AMS提供了一系列最常用的LaTeX数学宏包:
amsmath 宏包:
提供了一套增强的数学排版命令和环境,使得数学公式的编辑和排版更加灵活和方便。
引入了一些新的数学环境,例如 align 和
gather,以便更好地控制多行公式的排版。
提供了诸如 \text, \DeclareMathOperator
等命令,用于在数学模式中插入文本或定义新的运算符。
amssymb 宏包:扩展了
amsmath,提供了额外的数学符号,如各种箭头、关系符号、集合符号等。
amsfonts 宏包:提供了一些额外的字体,例如
\mathbb 命令用于黑板粗体字母。
amsthm 宏包:提供了 theorem,
lemma, proof
等定理或证明环境,方便用户在文档中定义和使用定理。
下面的数学公式绝大部分都需要这些宏包,默认已经被导入
1\usepackage{amsmath,amssymb,amsfonts,amsthm}
这些宏包在实际使用时似乎要注意一下导入的先后顺序,例如最好先调用
am ...
LaTeX 命令行编译
整理一下关于 pdflatex,xelatex 和
latexmk 的基本使用和配置。
这部分的中文资料其实比较少,因为大部分资料都在关注 LaTeX
应该怎么写,而不是怎么用命令去编译, 本文参考:
LaTeX技巧912:使用latexmk自动编译LaTeX
在终端中编译
LaTeX
latexmk
的学习
Latex
编译和编写方案配置 — latexmk + latexworkshop
Using
Latexmk
pdflatex & xelatex
基本使用
这里只考虑 pdflatex 和 xelatex
的命令行基本用法,对于含有中文的文档只考虑使用 xelatex
编译。
最基本的用法如下,使用 pdflatex 和 xelatex
编译指定的源文件,源文件的.tex后缀名可以省略。
12pdflatex [options] main.texxelatex [options] main.tex
在源文件之前可以添加若干的选项,选项形如-<option1>、-<option2>=<string>,具体选项见下文,注意必须在源文 ...
LaTeX 插入图片
整理一下关于LaTeX中插入图片的笔记。
目前使用的发行版为 TexLive 2024,系统为 Windows 和
Linux(Ubuntu22)。 只考虑 pdflatex 和 xelatex
这两种编译引擎,考虑的图片格式包括:矢量图(pdf, eps),位图(png,
jpg)。 两种编译引擎都直接支持这些图片格式。
插入图片
LaTeX 本身不支持插图功能,需要 graphicx
宏包提供支持(或者更基础的 graphics
宏包,graphicx 宏包相当于其扩展) 1\usepackage{graphicx}
导入这个宏包之后,就可以使用 \includegraphics
命令来插入图片 1\includegraphics[⟨options⟩]{⟨filename⟩}
例如 12\includegraphics{example.png}\includegraphics{figure/example.png}
这里的图片文件名可以用相对路径或绝对路径表示,但是文件名里既不要有空格或其它特殊符号,否 ...
LaTeX 基本概念
这是关于\(\LaTeX\)基础概念的笔记,不涉及具体的\(\LaTeX\)语法细节,而是从宏观层面,包括历史和命令行用法等,来进一步理解
\(\TeX\) 和 \(\LaTeX\)。
\(\TeX\)语言
\(\TeX\)排版系统是 Knuth
发明的一种宏语言,提供了几百个类似\def的基础指令用于排版,主要解决的是自动断行,以及公式布局等排版问题。\(\TeX\)语言的版本在升级到 3.0
之后,主版本号就不再发生变动,而是以 3.1,3.14,3.141
的形式在更新时不断接近 pi,这体现了\(\TeX\)语言的稳定性。
关于排版系统的基本介绍,有一篇博客可以参考: 排版引擎纵谈:程序员的视角
\(\TeX\)语言并不适合直接使用:
最早设计时不支持非 ASCII 编码,更不要说 Unicode
字符和中文支持等
字体需要额外配置,不能利用系统现有的字体
原始的几百个基础指令太繁琐又太简陋,需要考虑很多细节
后续有很多基于\(\TeX\)基本指令封装的宏集,让使用者可以忽略很多细节,例如在
\(\LaTeX\) 格式中的 center
环境是如下编写的(在 latex ...
LaTeX Tex Live 安装
整理一下 Tex Live 2024
在Windows和Linux(Ubuntu22)中的安装过程,主要参考TeX Live 2024
安装教程(Windows/WSL/Linux)以及一份简短的关于
LATEX 安装的介绍。
在Linux系统上的LaTeX编译速度普遍比Windows更快,而且速度提升非常明显,并且TexLive的安装也是如此,在Linux中的安装过程比Windows更快,这种优势即使是在WSL2中也是很明显的,因此我选择在Windows和WSL2中都进行安装。
下载Texlive镜像
随便找一个 CTAN 镜像站下载 texlive2024 即可,例如清华镜像。
texlive
的下载安装其实非常友好,在不同系统上都只需要同一个镜像文件(texlive2024.iso,大约
5 个 G)。
安装Texlive
Windows
直接点击install-tl-windows.bat脚本安装即可,默认有GUI显示,根据提示进行确认即可。
其实也可以加上--no-gui选项关掉GUI,此时的安装过程和Linux类似。
最好重新设置一下安装目录,例如D:/texlive/20 ...
Brainfuck语言与解释器
图灵机
图灵机(Turing
machine)是图灵提出的一种抽象计算模型,它主要包括一个无限长的纸带(tape)、一个读写头(head)以及一系列状态和指令规则:
纸带(tape):图灵机的纸带被划分为单元格,每个单元格上可以存储一个字符。纸带是无限长的,可以向左或向右无限延伸。
字符表(alphabet):即字符的集合,它包含纸带上可能出现的所有字符。其中包含一个特殊的空白字符(blank),意思是此格子没有任何字符,这是默认状态。
读写头(head):读写头是指向纸带上的一个单元格的指针,可以读取/擦除/写入当前单元格的内容,也可以根据移动到相邻的单元格。
指令集(instructions
table):包括一组有限长度的指令,它根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。
状态寄存器(state
register):它用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态。
图灵机可以接受一些输入并产生输出,并根据状态转换规则进行计算。这个模型的关 ...
C语言 宏的学习笔记
对于宏有很多花里胡哨的用法,虽然C++已经不推荐使用复杂的宏,但是也要看得懂,因此整理一下。
基本概念
预处理器是一个正式编译C语言的源代码之前的文本处理工具,它负责执行预处理指令(#开头的指令),通常包括头文件包含,条件编译,宏等。
宏是预处理器支持的一种重要功能,允许程序员定义一些简单的代码替换规则:通过宏创建符号常量或者简单的代码片段,并在代码中多次使用。
这些宏会在编译前被预处理器替换为相应的内容。值得注意的是,预处理器只是文本处理工具,它不会分析任何语法层面的内容,行为完全是文本层面的。
预处理器支持的命令主要包括
文件包含:#include
用于在源文件中包含其他文件的内容
条件编译:#if、#ifdef、#ifndef、#elif、#else、#endif
用于条件编译,根据条件决定编译部分代码
宏定义:#define
用于创建宏,可以是简单的文本替换或带参数的宏
取消宏定义:#undef 用于取消已定义的宏
除此之外,还有几个不常见的命令:
错误指示:#error
用于在预处理阶段生成一个错误消息,编译终止,通常是用在条件编译中终止某个错误情形。警告指示#warn ...