泛函中的Lagrange乘子法
1. 经典的 Lagrange 乘子法 经典的 Lagrange 乘子法是针对等式约束下的非线性方程最优化问题,将其转化为一个方程组的求解问题,具体形式如下: \[ \left\{ \begin{aligned} &\max f(\mathbf{x})\\ &s.t. g(\mathbf{x})=0 \end{aligned} \right. \] 其中 \(\mathbf{x}\in R^N\),\(f,g:R^N \to R\),对于上述问题引入 Lagrange 乘子 \(\lambda \in R\),定义 Lagrange 函数 \(L(\mathbf{x},\lambda)\): \[ L(\mathbf{x},\lambda) = f(\mathbf{x}) - \lambda \,g(\mathbf{x}) \] 则 \(\mathbf{x}\) 取到最优解的必要条件为 \((\mathbf{x}, \lambda)\) 满足如下方程组: \[ \left\{ \begin{aligned} \nabla f(\mathbf{x}) -...
vim入门笔记
vim 被称为编辑器之神,学习难度很大,但是熟练掌握后可以更高效地敲代码,因此学一下。 安装与配置文件 vim 默认是命令行版本的,而 gvim 是 GUI 版本的 vim,这里我们使用的是 Git for Windows 里面附带的 vim(不含 GUI),可以按 Linux 风格进行配置和使用,感觉比直接下载Vim 官网的 Windows 版的 gvim 更方便,便于直接把配置应用到到 Linux 服务器上。 在 vim 中输入:version可以查看很多信息,例如 1234567// vim的版本号VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Nov 22 2021 19:31:05)Included patches: 1-3582Compiled by <https://www.msys2.org/>// vim的安装模式(tiny,small,normal,big,huge等,huge的功能最全)Huge version without GUI. 还有一个列表描述了当前编译的...
web自学3——JavaScript
在简单学习了 HTML 和 CSS 之后,接下来是 JavaScript 的学习,学习的重点不是 JavaScript 作为一个脚本语言的语法内容,而是 JavaScript 对于网页的控制,参考教程:https://developer.mozilla.org。 HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 控制了网页的行为 1. 在 HTML 中使用 JS 在 HTML 和 CSS 一起组装成一个网页之后,浏览器的 JavaScript 引擎将执行 JavaScript 代码,这保证了当 JavaScript 开始运行之前,网页的结构和样式已经就位,然后 JS 可以更新这个网页的具体内容等。 对于浏览器,它的每一个标签页使用了一个独立的运行环境,不同标签页之间没有任何联系,JS 代码也相互独立运行,一定程度上保证了信息安全。 script 标签 在 HTML 的 head 或者 body 部分都可以使用,例如: 12345678910111213<!DOCTYPE html><html...
web自学2——CSS
在简单学习了 HTML 之后,我们可以得到一个简单的静态网页,但是为了让网页呈现更加丰富的样式,一个明智的做法把样式信息和文本信息分离开,文本信息对应 HTML,样式信息对应 CSS,完成一个网页的组织分离,接下来是 CSS 的简单学习,参考教程:https://developer.mozilla.org HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 控制了网页的行为 CSS 1. 在 HTML 中使用样式 我们最终的目标是把 CSS 文件和 HTML 文件结合起来,但是在此之前,还有一些方法可以直接在 HTML 文件中使用简单的样式: style 属性 例如添加背景色 background-color, 可以直接使用元素的style属性定义的样式 源代码如下: 1<p style="background-color: #00BFFF">可以直接使用元素的style属性定义的样式</p> 嵌入 CSS 语句 我们使用如下简单的 html 文件,在头部使用<style...
web自学1——HTML
众所周知,web 前端主要包括 HTML+CSS+JavaScript 三部分组成,其中 HTML 是超文本标记语言,CSS 是层叠样式表,JavaScript 是脚本语言。 以下学习的内容都是静态网页而非动态网页,不涉及服务器数据库之类的知识,目标之一是了解最基本的网页知识,例如可以写出几个简单的静态网页,并且利用 Hexo+Github Pages 部署,目的之二是看懂 Hexo 搭建博客的样式配置等。参考教程:https://developer.mozilla.org HTML 定义了网页的内容 CSS 描述了网页的布局 JavaScript 控制了网页的行为 HTML 1. 元素 一个典型的 html 元素如下: 1<p class="note">content</p> 其中<p>是开始标签,</p>是结束标签,中间的content是元素的内容,class="note"是标签的属性。 上述元素是成对的,包括开始标签和结束标签,元素可以相互嵌套,例如 1<p>My cat is...
Cpp MPI学习笔记
本文是关于并行计算的学习,根据具体的实现方式不同,并行计算主要考虑两类方式: 以 MPI 为代表的多进程,不共享内存,进程之间通过消息传递机制进行通信; 以 OpenMP 为代表的多线程,共享内存; 本文主要针对的是 MPI,使用 C++ 接口。后续还可能有关于 OpenMP 和专门的 C++...
INSE学习笔记——6. SIMPLE算法
SIMPLE 算法全称是压力耦合方程组的半隐式方法(Semi-Implicit Method for Pressure Linked Equations), 作为经典的压力修正算法在 Fluent 等工业软件中被广泛应用。 SIMPLE 算法介绍 考虑无量纲化的二维不可压缩方程组 \[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2 \mathbf{u}\\ \nabla \cdot \mathbf{u} &= 0\\ \end{aligned} \] 现在我们已有 \(\mathbf{u}^n\),希望下一步的 \(\mathbf{u}^{n+1},p^{n+1}\) 满足 \[ \begin{aligned} \frac{\mathbf{u}^{n+1}-\mathbf{u}^n}{\Delta t} +...
INSE学习笔记——5. 投影法
投影法也称为时间分裂法,分步法,按照思路分为两类: 第一类基于 N-S 方程组的半离散格式,基于 Helmholtz 分解定理; 第二类基于 N-S 方程组的全离散格式,采用近似算子分裂/近似矩阵分裂。 下文只包括第一类投影法。 Helmholtz 分解定理 对于任意光滑的向量场\(V\)可以唯一分解为一个无源场 \(V^d\) 和一个无旋场 \(\nabla \phi\) 之和。 \[ V = V^d + \nabla \phi \] 满足 \(\nabla \cdot V^d = 0\), 和 \(\nabla \times \nabla \phi=0\)。 这一说法是不严谨的,因为唯一性需要向量场满足一定的边界条件,暂时略过边界的考虑 投影法简介 考虑无量纲化的二维不可压缩方程组 \[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2...
INSE学习笔记——4. MAC方法
标记网格法(Marker-and-Cell method,MAC),是一种求解压力 Poisson 方程算法,最初被设计用于求解含自由面的不可压缩流动,下文的算法并不涉及自由面,只是关注对不可压缩条件的处理。 求解压力 Poisson 方程算法 求解压力 Poisson 方程算法是一大类 N-S 方程的求解算法,它的特点是:通过求解一个 Poisson 方程获取压强 \(p\),并且使得速度散度为零间接地得到满足。(张德良,计算流体力学教程) 考虑无量纲化的二维不可压缩方程组 \[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2 \mathbf{u}\\ \nabla \cdot \mathbf{u} &= 0\\ \end{aligned} \] 记 \(D = \nabla...
INSE学习笔记——3. 人工压缩性方法(ACM)
人工压缩性方法(ACM),主要用于求解不可压缩定常流问题。 人工压缩性方程 考虑无量纲化的二维不可压缩方程组 \[ \begin{aligned} \frac{\partial \mathbf{u}}{\partial t} + (\mathbf{u}\cdot \nabla) \mathbf{u} &= -\nabla p + \frac{1}{Re} \nabla^2 \mathbf{u}\\ \nabla \cdot \mathbf{u} &= 0\\ \end{aligned} \] 由于缺少 \(\frac{\partial p}{\partial t}\),难以计算压强,因此引入人工压缩性因子 \(\beta >0\),使得连续性方程替换为人工压缩性方程: \[ \frac{\partial p}{\partial t} + \beta \nabla \cdot \mathbf{u} = 0 \] 这里的人工压缩性因子 \(\beta\) 相当于声速的平方 \(c^2\),也可以从物理的角度进行理解,在 \(\beta >0\)...