Vimscripts 编程

变量

普通变量

创建变量、变量赋值都需要用到let关键字

1
2
3
4
let foo = "bar"
echo foo
let foo = "foo"
echo foo

数字

  • Number32位带符号整形(整形之间除法同c)

    • :echo 0xef:16进制
    • :echo 017:8进制(鉴于以下,不建议使用)
    • :echo 019:10进制(9不可能出现,vim自动处理)
  • Float

    • :echo 5.1e-3:科学计数法)
    • :echo 5.0e3:科学计数法中一定要有小数点

类型转换:Number和Float运算时会强制转换为Float

字符串

类型转换
  • +if这些“运算”中,vim会强制转换变量类型

    • 数字开头的字符串会转为相应Number(即使符合Float也 会舍弃小数点后)
    • 而非数字开头 则转换为0
  • 连接.

    • .连接时vim可以自动将Number转换为字符串然后连接
    • 但是对于 Float,vim不能自动转换
  • 转义\

    • 注意echom "foo\nbar"类似的输出时,echom不会像 echo一样输出两行,而是将换行输出为vim默认 (即使设置了listchars)的“换行符”
  • 字符串字面量''

    • 所见即所得(py中r’’),注意连续两个单引号表示单引号
  • 内建字符串函数

    • strlen(str)(len(str)效果对字符串同)
    • split(str, token=" ")
    • join([str], token=" ")
    • tolower(str)
    • toupper(str)
  • 字符串比较====?==#

    • ==:对字符串比较是否大小写敏感取决于设置

      1
      2
      3
      4
      5
      6
      7
      8
      9
      set noignorecase
      if "foo"=="Foo"
      echo "bar"(不会输出)
      endif

      set ignorecase
      if "foo"=="Foo"
      echo "bar"(会输出)
      endif
    • ==?:对字符串比较大小写永远不敏感

    • ==#:对字符串比较大小写永远敏感

  • <>:同上,也有3种

集合类型变量

列表

vim列表特点

  • 有序、异质
  • 索引从0开始,可以使用负数索引,使用下标得到对应元素
  • 支持切割
    • 是闭区间(这个和python不同)
    • 可以负数区间切割
    • 可以忽略起始/结尾索引表示从0开始/末尾截至
    • 切割区间越界是安全的

      字符串可以像列表一样切割、索引,但是不可以使用负数 索引,却可以使用负数切割

  • +用于连接两个列表

列表内建函数

  • add(list, item):添加新元素
  • len(list):列表长度
  • get(list, index, default_val):获取列表元素,越界则 返回default_val
  • index(list, item):返回元素索引,不存在返回-1
  • join(list, token):将列表中元素转换为字符串后,使用 toke连接,缺省为<space>
  • reverse(list):反转列表

字典

字典特性

  • 值是异质的,键可以不是字符串,但是会被强制转换为字符串, 因此,在查找值时也可以使用非字符串dict[100],同样会被 强制转换为字符串dict["100"]之后查找

  • 支持属性.查找,甚至可以后接Number

  • 添加新元素就和普通赋值一样:let dict.100 = 100

  • 移除字典中的元素

    • remove(dict, index)
    • unlet dict.index/unlet dict[index] 移除不存在的元素事报错

允许定义时多一个,

内建函数
  • get(dict, index, default_val):同列表

  • has_key(dict, index):检查字典中是否有给定键,返回 1(真)或0(假)

  • item(dict):返回字典键值对,和字典一样无序

  • keys(dict):返回字典所有键

  • values(dict):返回字典所有值

作为变量的选项

  • bool选项输出0、1

    1
    2
    :set wrap
    :set nowrap
  • 键值选项

    1
    2
    :set textwidth=80
    :echo &textwidth
  • 本地选项(l:作用域下)

    1
    let &l:number=1
  • 选项变量还可以参与运算

    1
    2
    let &textwidth=100
    let &textwidht = &textwidth + 10

作为变量的寄存器

1
2
3
4
let @a = "hello"
echo @a
echo @"
echo @/

变量作用域

<char>:开头表示作用域变量

  • 变量默认为全局变量
  • b::当前缓冲区作用域变量
  • g::全局变量

语句

条件语句

vim中没有not关键字,可以使用!表示否定

  • !:否
  • ||:或
  • &&:与
1
2
3
4
5
6
7
8
if "1one"
echo "one"(会输出)
endif
if ! "one"
echo "one"(会输出)
else
echo "two"
endif

finish关键字

finally时结束整个vimscripts的运行

循环语句

for语句

1
2
3
4
5
let c = 0
for i in [1,2,3]
let c+=i
endfor
echom c

while语句

1
2
3
4
5
6
7
let c = 1
let total = 0
while c<=4
let total+=c
let c+=1
endwhile
echom total

函数

没有作用域限制的vimscripts函数必须以大写字母开头 (有作用域限制最好也是大写字母开头)

1
2
3
4
5
6
7
8
func Func(arg1,...)
echo "Func"
echo a:arg1(arg1)
echo a:0(额外(可变)参数数量)
echo a:1(第一个额外参数)
echo a:000(所有额外参数的list
return "Func"
endfunction

function后没有紧跟!时,函数已经被定义,将会给出 错误,而function!时会直接将原函数替换,除非原函数正在 执行,此时仍然报错

  • 调用方式

    • :call Func():call直接调用(return值会被直接丢弃)
    • :echo Func():表达式中调用
  • 函数结束时没有return,隐式返回0

  • 函数参数:最多20个

    • 参数全部位于a:参数作用域下

      • a:arg1:一般参数
      • a:0:额外(可变)参数数量
      • a:n:第n个额外参数
      • a:000:包含额外参数list
    • 参数不能重新赋值

vim中函数可以赋值给变量,同样的此时变量需要大写字母开头, 当然可以作为集合变量的元素,甚至也可以作为参数传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function! Reversed(l)
let nl = deepcopy(a:l)
call reverse(nl)
return nl
endfunction

let Myfunc = function("Reversed")

function! Mapped(func, l)
let nl = deepcopy(a:l)
call map(nl, string(a:func) . '(v:val)')
return nl
endfunction

call Mapped(function("Reversed"), [[3,2], [1,2]])

let funcs = [function("Reversed"), function("Mapped")]

更多函数参见functions.vim(如果完成了)

Execute、Normal

  • :execute:把字符串当作vimscript命令执行(命令行输入) :execute "echom 'hello, world'"<cr>

    大多数语言中应该避免使用”eval”之类构造可执行字符串,但是 vimscripts代码大部分只接受用户输入,安全不是严重问题, 使用:execute命令能够极大程度上简化命令

    :execute命令用于配置文件时,不要忽略结尾的<cr>, 表示“执行命令”

  • :normal:接受一串键值,并当作是normal模式接受按键

    • :normal后的按键会执行映射,:normal!忽略所有映射

    • :normal无法识别“”这样的特殊字符序列 :normal /foo<cr> 这样的命令并不会搜索,因为“没有按回车”

  • :execute和:normal结合使用,让:normal接受按下 “无法打印”字符(<cr><esc>等),execute能够接受 按键

    1
    2
    :execute "normal! gg/foo\<cr>dd"
    :execute "normal! mqA;\<esc>`q"

正则表达式

vim有四种不同的解析正则表达式的“模式”

  • 默认模式下\+表示“一个或多个之前字符”的正常+意义, 其他的符号如{,},*也都需要添加转义斜杠表示正常意义, 否则表示字符字面意

    • :execute "normal! gg/for .\\+ in .\\+:\<cr>: execute接受字符串,将\\转义,然后正则表达式解析, 查找pythonfor语句

    • :execute "normal! gg".'/for .\+ in .\+:'."\<cr>": 使用字符串字面量避免\\,但是注意此时\<cr>也不会 被转义为按下回车\n才是换行符),所以需要分开 书写、连接

  • \v模式下,vim使用“very magic”正常正则解析模式

    • :execute "normal! gg".'/\vfor .+ in .+:'."\<cr>"

确定性时序分析

Time Series Decomposition

  • 因素分解方法:克服其他因素干扰,单纯测度某个确定性因素(季节、趋势、交易日)的序列的影响
  • 指数平滑预测方法:根据序列呈现的确定性特征,选择适当的方法对序列进行综合预测

因素分解模型

  • 因素分解模型思想

    • 所有序列波动可以归纳为受到以下 4 种因素影响(全部或部分)
    • 导致序列呈现不同的波动特征,即任何时间序列可以用 4 因素的某个函数进行拟合 $x_t = f(T_t, C_t, S_t, I_t)$
  • Trend:序列呈现的长期递增、递减的变化趋势

  • Circle:序列呈现的从高到低、在由低到高的反复循环波动

    • 很多经济、社会现象确实有循环周期,但是这个周期往往很长、长度不固定
    • 如何观测值序列不够长,没有包含多个周期,周期的一部分会和趋势重合,无法准确、完整地提取周期影响
    • 在经济学领域常用的周期有
      • 基钦周期:平均 40 个月
      • 朱格拉周期:平均 10 年
      • 库兹涅茨周期:平均 20 年
      • 康德拉季耶夫周期:平均 53.3 年
  • Season:和季节变化相关的稳定周期波动

  • Immediate:其他不能用确定性因素解释的序列波动

常用模型(函数)

  • 加法模型:$x_t = T_t + C_t + S_t + I_t$
  • 乘法模型:$x_t = T_t C_t S_t * I_t$
  • 伪加法模型:$x_t = T_t * (S_t + D_t + I_s)$
  • 对数加法模型:$log{x_t} = log{Tt} + log{St} + log{Dt} + log{I_t}$

考虑节假日

  • 有些社会、经济现象显示某些 特殊日期 是很显著的影响因素,但是在传统因素分解模型中,没有被纳入研究

    • 股票交易受交易日影响
    • 超市销售受周末、节假日影响
    • 交通、运输、旅游同样受到周末、节假日影响
  • 如果观察时期不足够长,考虑将模型中 Circle(周期) 改为 Day(节假日)

Exponential Smoothing

  • 根据序列是否具有长期趋势、季节效应,可以把序列分为3大类
    • 既没有长期趋势、又没有季节效应
    • 只有长期趋势、没有季节效应
    • 有季节效应,无论是否有长期趋势

简单指数平滑

简单移动平均

  • 对无趋势、季节的水平平稳序列
    • 可以认为序列在比较短时间内,序列取值比较稳定,序列值差异主要是随机波动造成
    • 根据此假定,可以使用最近一段时间内平均值作为未来几期预测值
  • 简单移动平均假定无论时间远近,近 $n$ 期的序列观测值影响力一样

简单指数平滑预测

  • 实务中,对一般的随机事件,近期的结果对现在的影响更大
  • 指数平滑法构造思想
    • 考虑到事件间隔对事件发展的影响,各期权重随时间间隔增大而指数衰减
  • 初值:很多方法可以确定,最简单指定 $\hat x_1 = x_1$
  • 平滑系数 $\alpha$
    • 经验值在 $[0.05, 0.3]$,
      • 对于变化较缓慢的序列,取较小值
      • 对于变化迅速的序列,取较大值
    • 如果 $\alpha$ 过大,说明序列波动性过强,不适合使用简单指数平滑
  • 理论上可以预测任意期值,但是任意期预测值都是常数
    • 因为没有新的观测值提供新信息

Holt 两参数指数平滑

  • 两参数指数平滑
    • 适合对含有线性趋势的序列进行修匀
    • 即分别用指数平滑的方法,结合序列最新观察值,不断修匀参数 $a, b$ 的估计值
  • $a(t-1) = x{t-1} - \epsilon{t-1}$
  • $b(t) = b + \epsilon_t$
  • 两参数递推公式

  • 序列预测公式

  • 初值设置

    • $\hat a(0)=x_1$
    • $\hat b(0)=\frac {x_{n+1} - x_1} n$

Holt-Winter 三参数指数平滑

  • 三参数指数平滑
    • Holt 指数平滑的基础上构造,以修匀季节效应

加法模型

  • 模型表达式

    • $a(t-1) = x{t-1} - c{t-1} - \epsilon_{t-1}$
    • $b(t) = b + \epsilon_t$
    • $c_t = Sd_t + e_t, e_t \sim N(0, \sigma_e^2)$
  • 三参数递推式

  • 序列预测公式

乘法模型

  • 模型表示式

    • $a(t-1) = x{t-1}/c{t-1} - \epsilon_{t-1}$
    • $b(t) = b + \epsilon_t$
    • $c_t = S_j + e_t, e_t \sim N(0, \sigma_e^2)$
  • 三参数递推式

  • 序列预测公式

协整与误差修正模型

Spurious Regression

  • 多变量分析中,平稳性非常重要,忽略序列平稳性判断,容易出现伪回归现象

  • GrangerNewbold 的非平稳序列的伪回归随机模型实验(两个独立随机游走模型)表明

    • 非平稳场合,参数显著性检验犯弃真错误的概率远大于 $\alpha$,伪回归显著成立
    • 即 $P(|t| \geqslant t_{\alpha/2}(n) | 非平稳序列) \leqslant \alpha$

Cointegration 协整关系

  • ${x_1}, {x_2}, \cdots, {x_k}$:自变量序列
  • $y_t$:响应变量序列
  • ${\epsilon_t}$:平稳回归残差序列

协整检验

  • 假设条件

    • $H_0: \epsilon_t ~ I(k), k \geqslant 1$:多元非平稳序列之间不存在协整关系
    • $H_1: \epsilon_t ~ I(0)$:多元非平稳序列之间存在协整关系
  • 建立响应序列与输入序列之间的回归模型

  • 对回归残差序列进行 EG 平稳性检验

Error Correction Model

ECM:误差修正模型,解释序列短期波动关系

  • Granger 证明协整模型、误差修正模型具有 1-1 对应关系
    • 协整模型度量序列之间长期均衡关系
  • 实务中,响应序列与解释序列很少处于均衡点上,实际观测的是序列间短期或非均衡关系

Granger 表述定理

  • 如果变量 $X$、$Y$ 是协整的,则他们之间的短期非均衡关系总能用一个误差修正模型表述 $$
      \Delta Y_t = lagged(\Delta Y, \Delta X) - \lambda ECM_{t-1} + \epsilon_t
    
    $$
  • 对关系 $y_t = \beta x_t + \epsilon_t$

  • 响应序列当期波动 $\Delta y_t$ 主要受到三方面短期波动影响

    • $\Delta x_t$:输出序列当前波动
    • $ECM_{t-1}$:上一期误差
    • $\epsilon_t$:纯随机波动

误差修正模型

  • $\beta_1 < 0$:表示负反馈机制
    • $ECM_{t-1} > 0$:正向误差,则会导致下一期值负向变化
    • $ECM_{t-1} < 0$:负向误差,则会导致下一期值正向变化

Granger 因果关系

  • 因果关系:原因导致结果

    • 时间角度:原因发生在前,结果发生在后
    • 影响效果:$X$ 事件发生在前,且对 $Y$ 事件发展结果有意义
  • Granger 检验可检验统计学意义上的 Granger 因果关系

    • 统计意义上的因果关系和现实意义上因果关系不同
    • 现实意义上变量因果关系强调逻辑自洽

Granger 因果关系

  • 序列 $X$ 是序列 $Y$ 的 Granger 原因,当且仅当最优线性预测函数使得下式成立 $$

      \theta^2(y_{t+1}|I_t) \leq \theta^2(y_{t+1}|I_t-X_t)
    

    $$

  • $It = { x_t, x{t-1}, \cdots, yt, y{t-1}, \cdots }$:$t$ 时刻所有有用信息集合

  • $Xt = { x_t, x{t-1}, \cdots }$:t时刻所有序列信息集合
  • $\theta^2(y_{t+1}|I_t)$:使用所有可获得历史信息 (包括 ${x}$ 序列历史信息)得到的一期预测值方差
  • $\theta^2(y_{t+1}|I_t-X_t)$:从所有信息中刻意扣除 ${x}$ 序列历史信息得到的一期预测值方差
  • Granger 因果关系分类
    • $(x, y)$:相互独立
    • $(x \leftarrow y)$:$x$ 是 $y$ 的 Granger 原因
    • $(x \rightarrow y)$:$y$ 是 $x$ 的 Granger 原因
    • $(x \leftrightarrow y)$:互为因果

Granger 因果检验

  • 建立回归方程

    • $z_t$:其他解释变量集合
    • $\epsilon_t \sim I(0)$
  • 假设

    • $H_0: \alpha_1 = \alpha_2 = \cdots = \alpha_m = 0$
    • $H_1: \alpha_i 不全为0$
  • 检验统计量:F统计量

Granger 因果检验说明

  • Granger 因果检验思想:对响应变量预测精度有显著提高的自变量,就视为响应变量的因

    • 因果性可以推出预测精度提高,但预测精度提高不能等价推出因果性
    • 即使检验结果显著拒绝原假设,也不能说明两个序列之间有真正因果关系
  • Granger 因果检验是处理复杂变量关系时的工具

    • 借助因果检验信息,可以帮助思考模型结果
    • 不一定准确,但是提供信息比完全没有信息好
  • Granger 因果结果说明

    • 检验结果严重依赖解释变量的延迟阶数,不同延迟阶数可能会得到不同的检验结果
    • 检验结果会受到样本随机性影响,样本容量越小随机性越大,所以最好在样本容量比较大时进行检验

统计检验

JJ 检验

检验思想

  • JJ 检验:检验 $VAR(k)$ 模型的协整关系
    • 参考多元分析中典型相关分析的构造思想
  • $Yt = (y{1,t}, y{2,t}, \cdots, y{N,t})^T \sim I(1)$
  • $\Pi = \sum_{i=1}^k \Pi_i - I$
  • $\Gammai = -\sum{j=i+1}^k$
  • 基础协整关系 = $\Pi$ 非零特征根数量
    • 基础协整关系的任意线性组合依然是协整的
    • 系统中协整关系至少为非零特征根数量

检验方法

  • 假设 $\lambda_1 \geq \lambda_2 \geq \cdots \lambda_m$ 是 $\Pi$ 的所有特征根

最大特征根检验

  • 检验统计量:Bartlette 统计量 $Q = -Tln(1-\lambda_i^2)$

  • 假设

    • 原假设:$H_0: \lambda_i = 0$
  • 检验流程

    • 从 $\lambda_1$ 开始检验是否显著不为 0
    • 直到某个 $\lambda_k$ 非显著不为0,则系统有 $k-1$ 个协整关系

迹检验

  • 检验统计量:Bartlette 统计量 $Q = -T \sum_{j=i}^m ln(1-\lambda_j^2)$

  • 假设

    • 原假设:$H0: \sum{j=i}^m \lambda_j = 0$
  • 检验流程

    • 从 $\sum_{j=1}^m \lambda_j = 0$ 开始检验是否显著不为 0
    • 直到某个 $\sum_{j=k}^m ln(1-\lambda_j^2)$ 非显著不为 0,说明系统存在$k-1$个协整关系

时间序列分析

时间序列分析

  • 时间序列数据:在不同时间点收集到的数据,反映某事物、现象随实际变化状态、程度

  • 描述性时序分析:通过直观的数据比较、绘图观测,寻找序列中蕴含的发展规律

    • 操作简单、直观有效,是时序分析的第一步
    • 但是只能展示非常明显的规律性
    • 最早的时序分析方法,所有时序分析的基础
    • 帮助人们找到自然规律
      • 尼罗河的泛滥
      • 范蠡稳定粮价
      • 小麦价格指数序列
      • 太阳黑子运动规律
  • 确定性时序分析:根据序列的观察特征,先构想一个序列运行的理论,默认序列按照此理论确定性运作

    • 侧重于确定性信息的提取
    • 通常不能通过分析误差自行修正模型,只能通过新的模型假定, 推翻旧模型实现分析方法的改进
    • 假定条件决定了序列的拟合精度,如果确定性的假定条件不对, 误差将很大,因此限制其使用范围

时域分析

确定性时域分析

  • 原理:事件的发展通常具有一定的惯性,用统计语言描述就是序列值之间存在一定的相关关系,即某种统计规律

  • 目的:寻找序列值之间的相关关系的统计规律,并拟合适当数学模型描述,进而用于预测

  • 特点

    • 理论基础扎实
    • 操作步骤规范
    • 分析结果易于解释

常用领域

  • 宏观经济领域的 Time Series Decomposition

  • 确定性趋势预测

    • 趋势预测:线性趋势预测、非线性趋势预测
    • 指数平滑预测:简单、两参、三参指数平滑

随机性时域分析

  • 原理:假设序列为随机变量序列,利用对随机变量分析方法研究序列

  • 特点

    • 预测精度更高
    • 分析结果可解释性差
    • 是目前时域分析的主流方法

频域分析

  • 思想:假设任何一种无趋势的实现序列,都可以分解成若干不同频率的周期波动(借助傅里叶变换,用三角函数逼近)

时域分析发展

启蒙阶段

  • AR 模型:George Undy Yule
  • MA 模型、Yule-Walker 方程:Sir Gilbert Thomas Walker

核心阶段

  • ARIMA:经典时间序列分析方法,是时域分析的核心内容
    • Box & Jenkins 书中系统的阐述了ARIMA模型的识别、估计、检验、预测原理和方法

完善阶段

  • 异方差场合

    • ARCHRobert Fry Engle
    • GARCHBollerslov
    • GARCH 衍生模型
      • EGARH
      • IGARCH
      • GARCH-M
      • NGARCH
      • QGARCH
      • TGARCH
  • 多变量场合

    • ARIMAXBox & Jenkins
    • Co-intergration and error correction modelC.Granger,协整理论
    • SYSLINKlein,宏观经济连理方程组模型
    • Vector Autoregressive ModelSims,货币政策及其影响
  • 非线性场合

    • Threshold Autoregressive Model
    • Artificical Neural Network
    • Hebbian Learning:神经可塑性假说
    • Multivariate Adaptive Regression Splines
    • Linear Classifier
    • Support Vector Machines

Vector Auto-regression Model

Vector Auto-regression Model

VAR 模型:向量自回归模型

  • 模型特点

    • 不以经济理论为基础
    • 结构简介明了
    • 预测精度高
  • 模型方程特点

    • 采用多方程联立的形式
    • 需要估计 $m(mp+1)$ 个参数的,对样本数量要求高
    • 模型的每个方程中,内生变量 对模型的全部内生变量滞后项进行回归,估计全部内生变量的动态关系
  • 模型用途

    • 脉冲响应分析
    • 方差分解

VAR 模型参数

  • VAR 模型系数由统计相关性估计

    • 不具有逻辑上的因果关系
    • 通常不直接解读 VAR 模型每个方程的经济学意义
  • VAR 模型参数不进行参数显著性检验,但是允许研究人员对参数施加特殊约束

  • VAR 模型通常是由一系列 非平稳序列构造的平稳系统

    • 所以若包含非平稳变量,其中至少存在 1 个协整关系
    • 协整关系具有经济学意义,可以解读系数(所以需要进行协整检验)

VAR模型形式

两变量 VAR(1)

  • 方程组形式

  • 矩阵形式

  • $u{1,t}, u{2,t} \overset {i.i.d.} {\sim} (0, \theta^2)$:随机波动项,$Cov(u{1,t}, u{2,t}) = 0$

多变量的 VAR(k)(含外生变量)

  • $Yt = (y{1,t}, y{2,t}, \cdots, y{N,t})^T$:内生变量
  • $C = (c_1, c_2, \cdots, c_N)^T$:常数项
  • $\Pi_j = \begin{bmatrix}
      \pi_{11,j} & \pi_{12,j} & \cdots & \pi_{1N,j} \\
      \pi_{21,j} & \pi_{22,j} & \cdots & \pi_{2N,j} \\
      \vdots & \vdots & \ddots & \vdots \\
      \pi_{N1,j} & \pi_{N2,j} & \cdots & \pi_{NN,j} \\
    
    \end{bmatrix}$:内生变量待估参数
  • $Ut = (u{1,t}, u{2,t}, \cdots, u{N,t})^T \overset {i.i.d.} {\sim} (0, \Omega)$:随机波动项
  • $Zt = (z{1,t}, z{2,t}, \cdots, z{N, t})^T$:外生变量

VAR(k) 变换

  • VAR(k) 模型可通过变换附加伴随矩阵式,改写为 VAR(1)

Structured VAR

SVAR:结构 VAR 模型,在 VAR 模型基础上加入内生变量当期值

  • 即解释变量中含有当期变量

两变量 SVAR(1)

含外生变量 VAR(1)

  • $Y_t, Z_t, V_t$:内生变量向量、外生变量向量、误差项向量
  • $A, D, B, F$:模型结构参数
  • $C=A^{-1}D, \Pi_1=A^{-1}B, H=A^{-1}F, U_t=A^{-1}V_t$

VAR 模型稳定性

  • 把脉冲施加在 VAR 模型中某个方程的 Iinnovation 过程上
    • 随着时间推移,冲击会逐渐消失,则模型稳定
    • 冲击不消失的则模型不稳定

一阶 VAR 模型分析

  • $\mu = (I + \Pi_1 + \Pi_2^2 + \cdots + \Pi_1^{t-1})C$:漂移向量
  • $Y_0$:初始向量
  • $U_t$:新息向量
  • $t \rightarrow \infty$ 时有

两变量 VAR(1) 稳定条件

  • 稳定条件
    • 特征方程$|\Pi_1 - \lambda I|=0$根都在单位圆内
    • 相反的特征方程$|I - L\Pi_1|=0$根都在单位圆外

VAR(k) 稳定条件

  • $A$:$Nk$ 阶方阵
  • $N$:回归向量维度
  • $k$:自回归阶数
  • 稳定条件
    • 特征方程 $|A - \lambda I| = 0$ 根全在单位圆内
    • 相反的特征方程 $|I - LA| = 0$ 根全在单位圆外

VEC 模型

N 变量 VEC(k)

  • $\Pi = \sum_{i=1}^k \Pi_i - I$:影响矩阵
  • $\Gammai = -\sum{j=i+1}^k$

VEC(1)

Impulse-Response Function

脉冲响应函数:描述内生变量对误差冲击的反应

  • 脉冲响应函数含义

    • 在随机误差下上施加标准查大小的冲击后,对内生变量当期值和未来值所带来的影响
    • 即将 VAR 模型表示为无限阶的向量 $MA(\infty)$ 过程
  • 对脉冲响应函数的解释的困难源于,实际中各方程对应误差项不是完全非相关

    • 误差相关时,其有一个共同组成部分,不能被任何特定变量识别
    • 故,左乘变换矩阵 $M$ 得到 $V_t = MU_t$ 修正相关性(常用 Cholesky 分解求解)
      • 即将其协方差矩阵变换为对角矩阵 $V_t = MU_t \sim (0, \Omega)$

VAR(1) 转换为 MA

  • $\Psis = A^s = \frac {\partial Y{t+s}} {\partial U_t}$
  • $\Psis[i, j] = \frac {\partial y{i,t+s}} {\partial u{j,t}}$:脉冲响应函数,表示其他误差项在任何时期都不变条件下,第 $j$ 个变量 $y{j,t}$ 在对应误差项 $u{j,t}$ 在 $t$ 期受到一个单位冲击后,对第 $i$ 个内生变量 $y{i,t}$ 在 $t+s$ 期造成的影响

方差分解

方差分解:分析未来 $t+s$ 期 $y_{j, t+s}$ 的预测误差受不同新息冲击影响比例

均方误差

  • 误差可以写为 MA 形式

  • 则预测s期的均方误差为

  • $\Omega = E(U_tU_t^T)$:不同期 $U_t$ 协方差阵为 0

计算比例

  • $v{1,t}, v{2,t}, \cdots, v_{N,t}$不相关
  • 将 $\Omega$ 带入 MSE 表达式中,既可以得到第 $j$ 个新息对 $s$ 期预测量 $\hat Y_{t+s|t}$ 的方差贡献比例

VAR 建模

var_procedure

  • 进行单变量平稳性检验

  • 拟合 VAR(p) 模型

    • 确定模型阶数
      • 理论上初步模型阶数可以任意确定
      • 然后根据 AICBIC、对数似然函数值选择相对最优阶数
  • 若所有变量平稳,则 Granger 因果检验

    • VAR 模型通过平稳性检验,理论上就可以利用模型进行分析、预测
    • VAR 模型是超系数模型,默认所有内生变量互为因果
      • 但实际上变量之间因果关系复杂
      • 可通过 Granger 因果检验判断变量之间长期、短期因果关系
  • 若有变量非平稳

    • 检验模型平稳性
    • Granger 因果检验
    • 协整检验:JJ 检验
      • 非平稳系统必然存在协整关系,具有经济学意义
      • 所以需要找出存在的基础协整关系,解读其代表的长期、短期相关影响
    • 构建 VEC 模型
      • 如果协整检验显示基本协整关系满秩,说明系统中每个序列都是平稳序列,直接建立VAR模型
      • 如果协整检验限制基本协整关系为 0 秩,则系统不存在协整关系,通常说明系统不平稳,需要重新选择变量, 或者适当差分后建模
      • 最常见情况是协整检验显示基本协整关系数量处于 0 至满秩中间,此时建立 $VEC$ 模型
  • 脉冲响应分析

  • 方差分析

  • 模型预测

Cmd Markdown Reference


我们理解您需要更便捷更高效的工具记录思想,整理笔记、知识,并将其中承载的价值传播给他人,Cmd Markdown 是我们给出的答案 —— 我们为记录思想和分享知识提供更专业的工具。 您可以使用 Cmd Markdown:

  • 整理知识,学习笔记
  • 发布日记,杂文,所见所想
  • 撰写发布技术文稿(代码支持)
  • 撰写发布学术论文(LaTeX 公式支持)

cmd-markdown-logo

除了您现在看到的这个 Cmd Markdown 在线版本,您还可以前往以下网址下载:

Windows/Mac/Linux 全平台客户端

请保留此份 Cmd Markdown 的欢迎稿兼使用说明,如需撰写新稿件,点击顶部工具栏右侧的 新文稿 或者使用快捷键 Ctrl+Alt+N


什么是 Markdown

Markdown 是一种方便记忆、书写的纯文本标记语言,用户可以使用这些标记符号以最小的输入代价生成极富表现力的文档:譬如您正在阅读的这份文档。它使用简单的符号标记不同的标题,分割不同的段落,粗体 或者 斜体 某些文字,更棒的是,它还可以

1. 制作一份待办事宜 Todo 列表

  • [ ] 支持以 PDF 格式导出文稿
  • [ ] 改进 Cmd 渲染算法,使用局部渲染技术提高渲染效率
  • [x] 新增 Todo 列表功能
  • [x] 修复 LaTex 公式渲染问题
  • [x] 新增 LaTex 公式编号功能

2. 书写一个质能守恒公式LaTeX

3. 高亮一段代码code

1
2
3
4
5
6
7
@requires_authorization
class SomeClass:
pass

if __name__ == '__main__':
# A comment
print 'hello world'

4. 高效绘制 流程图

1
2
3
4
5
6
7
8
st=>start: Start
op=>operation: Your Operation
cond=>condition: Yes or No?
e=>end

st->op->cond
cond(yes)->e
cond(no)->op

5. 高效绘制 序列图

1
2
3
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!

6. 高效绘制 甘特图

1
2
3
4
5
6
7
8
9
10
11
12
13
title 项目开发流程
section 项目确定
需求分析 :a1, 2016-06-22, 3d
可行性报告 :after a1, 5d
概念验证 : 5d
section 项目实施
概要设计 :2016-07-05 , 5d
详细设计 :2016-07-08, 10d
编码 :2016-07-15, 10d
测试 :2016-07-22, 5d
section 发布验收
发布: 2d
验收: 3d

7. 绘制表格

项目 价格 数量
计算机 $1600 5
手机 $12 12
管线 $1 234

8. 更详细语法说明

想要查看更详细的语法说明,可以参考我们准备的 Cmd Markdown 简明语法手册,进阶用户可以参考 Cmd Markdown 高阶语法手册 了解更多高级功能。

总而言之,不同于其它 所见即所得 的编辑器:你只需使用键盘专注于书写文本内容,就可以生成印刷级的排版格式,省却在键盘和工具栏之间来回切换,调整内容和格式的麻烦。Markdown 在流畅的书写和印刷级的阅读体验之间找到了平衡。 目前它已经成为世界上最大的技术分享网站 GitHub 和 技术问答网站 StackOverFlow 的御用书写格式。


什么是 Cmd Markdown

您可以使用很多工具书写 Markdown,但是 Cmd Markdown 是这个星球上我们已知的、最好的 Markdown 工具——没有之一 :)因为深信文字的力量,所以我们和你一样,对流畅书写,分享思想和知识,以及阅读体验有极致的追求,我们把对于这些诉求的回应整合在 Cmd Markdown,并且一次,两次,三次,乃至无数次地提升这个工具的体验,最终将它演化成一个 编辑/发布/阅读 Markdown 的在线平台——您可以在任何地方,任何系统/设备上管理这里的文字。

1. 实时同步预览

我们将 Cmd Markdown 的主界面一分为二,左边为编辑区,右边为预览区,在编辑区的操作会实时地渲染到预览区方便查看最终的版面效果,并且如果你在其中一个区拖动滚动条,我们有一个巧妙的算法把另一个区的滚动条同步到等价的位置,超酷!

2. 编辑工具栏

也许您还是一个 Markdown 语法的新手,在您完全熟悉它之前,我们在 编辑区 的顶部放置了一个如下图所示的工具栏,您可以使用鼠标在工具栏上调整格式,不过我们仍旧鼓励你使用键盘标记格式,提高书写的流畅度。

tool-editor

3. 编辑模式

完全心无旁骛的方式编辑文字:点击 编辑工具栏 最右侧的拉伸按钮或者按下 Ctrl + M,将 Cmd Markdown 切换到独立的编辑模式,这是一个极度简洁的写作环境,所有可能会引起分心的元素都已经被挪除,超清爽!

4. 实时的云端文稿

为了保障数据安全,Cmd Markdown 会将您每一次击键的内容保存至云端,同时在 编辑工具栏 的最右侧提示 已保存 的字样。无需担心浏览器崩溃,机器掉电或者地震,海啸——在编辑的过程中随时关闭浏览器或者机器,下一次回到 Cmd Markdown 的时候继续写作。

5. 离线模式

在网络环境不稳定的情况下记录文字一样很安全!在您写作的时候,如果电脑突然失去网络连接,Cmd Markdown 会智能切换至离线模式,将您后续键入的文字保存在本地,直到网络恢复再将他们传送至云端,即使在网络恢复前关闭浏览器或者电脑,一样没有问题,等到下次开启 Cmd Markdown 的时候,她会提醒您将离线保存的文字传送至云端。简而言之,我们尽最大的努力保障您文字的安全。

6. 管理工具栏

为了便于管理您的文稿,在 预览区 的顶部放置了如下所示的 管理工具栏

tool-manager

通过管理工具栏可以:

</i> 发布:将当前的文稿生成固定链接,在网络上发布,分享 新建:开始撰写一篇新的文稿 </i> 删除:删除当前的文稿 导出:将当前的文稿转化为 Markdown 文本或者 Html 格式,并导出到本地 </i> 列表:所有新增和过往的文稿都可以在这里查看、操作 模式:切换 普通/Vim/Emacs 编辑模式

7. 阅读工具栏

tool-manager

通过 预览区 右上角的 阅读工具栏,可以查看当前文稿的目录并增强阅读体验。

工具栏上的五个图标依次为:

</i> 目录:快速导航当前文稿的目录结构以跳转到感兴趣的段落 视图:互换左边编辑区和右边预览区的位置 </i> 主题:内置了黑白两种模式的主题,试试 黑色主题,超炫! 阅读:心无旁骛的阅读模式提供超一流的阅读体验 全屏:简洁,简洁,再简洁,一个完全沉浸式的写作和阅读环境

8. 阅读模式

阅读工具栏 点击 或者按下 Ctrl+Alt+M 随即进入独立的阅读模式界面,我们在版面渲染上的每一个细节:字体,字号,行间距,前背景色都倾注了大量的时间,努力提升阅读的体验和品质。

9. 标签、分类和搜索

在编辑区任意行首位置输入以下格式的文字可以标签当前文档:

标签: 未分类

标签以后的文稿在【文件列表】(Ctrl+Alt+F)里会按照标签分类,用户可以同时使用键盘或者鼠标浏览查看,或者在【文件列表】的搜索文本框内搜索标题关键字过滤文稿,如下图所示:

file-list

10. 文稿发布和分享

在您使用 Cmd Markdown 记录,创作,整理,阅读文稿的同时,我们不仅希望它是一个有力的工具,更希望您的思想和知识通过这个平台,连同优质的阅读体验,将他们分享给有相同志趣的人,进而鼓励更多的人来到这里记录分享他们的思想和知识,尝试点击 (Ctrl+Alt+P) 发布这份文档给好友吧!


再一次感谢您花费时间阅读这份欢迎稿,点击 (Ctrl+Alt+N) 开始撰写新的文稿吧!祝您在这里记录、阅读、分享愉快!

作者 @ghosert
2016 年 07月 07日

LaTeX. 支持 LaTeX 编辑显示支持,例如:$\sum_{i=1}^n a_i=0$, 访问 MathJax 参考更多使用方法。
code. 代码高亮功能支持包括 Java, Python, JavaScript 在内的,四十一种主流编程语言。

MarkDown Basics


[TOC]

标题

  • Setext形式: 以底线的形式
    • = 表示最高阶标题
    • - 表示次阶标题
  • Atx形式: 在行首插入1-6各#表示1-6阶标题

  • [TOC]可以生成标题链接目录(兼容性不好,不是标准实现)

段落

  • 类似html格式, md忽略文件中的换行符
  • 如果需要新开段落, 手动使用空行(可包含不可见<space> <tab>字符)

区块引用

  • 使用email形式的>标识
  • 可嵌套, 根据层次添加不同数量的>
  • 其中可使用其他形式的语法, 如: 标题, 列表, 代码区块
  • 也可以只给整个”段落”第一行加上>

修辞和强调

  • *_包裹输出为html标签<em>
  • **__包裹则是输出为html标签<strong>
  • ~~包裹输出<del>(删除线)
  • 符号两边如果有空格则会当作普通符号
  • 可以\*, \_转义的方式输出普通符号

列表

  • 无序列表: -, +, *都可以输出无序列表
  • 有序列表: 数字接半角句点.
  • 列表项目标记一般放在最左边, 也可以缩进, 最多3个空格, 项目 标记后面一定要<space><tab>
  • MD其实不关心有序列表中数字的顺序正确性, 只是单纯的输出为 <li>, 如果需要避免将1.类似输出为有序列表, 需要转义 1\.
  • 在列表项目增加空行, 会把列表内容用<p>包裹, 列表 项目可以包含多个段落, 此时列表内段落间也需要空行分隔, 且 项目下所有段落都需要缩进<tab>或4个<space> (这里的段落是指MD意义上的一段, 不是源文件的一段, 即缩进 也只是需要在MD意义上一段的第一行缩进, 当然所有行都缩进 比较美观)
  • 在列表项目内添加引用, >需要缩进, 而代码块本身就需要 缩进, 所以需要缩进2个<tab>或8个<space>

链接

  • 行内形式: 直接在链接内容之后用括号添加链接
       [link_content](link "title(optional)")
    
  • 参考形式: 为链接定义一个名称, 然后可以在其他地方给出地址
       [link_content][id]
       [id]: link "title(optional)"
       [id]: link 'title'
       [id]: link (title)
    

参考形式中

  • 三种定义title的方式都可以
  • id可以包括空格, 不区分大小写
  • 隐式链接标记功能可以省略id, 此时链接标记(id)视为等同 于链接内容

自动链接

  • <link>: 自动转换为链接, 内容就是链接地址
  • <email>: 自动转换为邮箱链接

图片

  • 行内形式: ![alt text](link "title(optional)")
  • 参考形式: ![alt text][id] [id]: link "title(optional)"

代码

  • 段落内代码: 使用`包裹回输出html标签<code>
  • 代码区块
    • 每行缩进<tab>或者4个<space>
    • 3个`包裹, 后面还可以接代码类型, 可能会有代码高亮
1
2
def fn():
print('hello markdown')
def fn():
    print('hello markdown')

表格

  • |: 纵向边界
  • -: 表头和内容边界, 可用于设置对齐
    • :----: 左对齐
    • -----: 默认左对齐
    • :---:: 居中对齐
    • ----:: 右对齐

特殊字符

对于html中特殊字符<(起始标签)和&(标记html实体)会自动 “智能”转义. 如果使用的&字符是html实体字符的一部分, 那么会 保留原状, 否则会转换为&amp

如: 输入©会被保留, 直接显示为copyright字符

分隔线

一行中3个以上的-, *, _可以建立分隔线, 符号之间可以有 空格, 不能有其他东西

其他

  • 注脚: 在注脚文字后接[^footer1]footer1, 然后在其他 地方[^footer1]: 注脚内容

VSCode基础

Settings

  • VSCode配置文件分为两种(其中项目会重复)

    • User Settings:用户对所有项目的配置
    • Workspace Settings:针对当前项目的设置
  • 配置方式分为两种完全相同

    • UI:提示丰富
    • JSON:配置快捷,JSON字典格式

Command Palette

Python

  • 选择默认python环境

Terminal

  • 选择默认terminal,可能的terminal包括cmd、powershell、 WSL(若启用Linux子系统)

Original Setting

Terminal

1
2
3
4
5
6
7
8
{
"terminal.integrated.shell.windows""/path/to/shell",
// 默认shell
"terminal.integrated.shellArgs.windows": [ ],
"terminal.integrated.shellArgs.linux": [ ],
"terminal.integrated.shellArgs.osx": [ ],
// VSCode创建terminal启动参数(3系统分别配置)
}
  • VSCode terminal分为很integrated、external

  • VSCode应该是兼容所有terminal shell,如

    • C:/Windows/System32/cmd.exe
    • C:/Windows/System32/powershell.exe
    • C:/Windows/System32/wsl.exe:WSL启用
    • “/path/to/git/bin/bash.exe”:Git中bash等
  • VSCode terminal虽然兼容多种shell,但只能创建默认shell

    • 需要多种shell只能切换默认shell再创建
    • python shell等shell是特殊shell,无法默认创建,必须要 在命令面板中创建(虽然在普通shell中打开python环境, 但是VSCode不认可)

Python

1
2
3
4
5
6
7
8
9
10
11
{
"python.condaPath": "/path/to/conda/Scripts",
// conda安装目录Scripts文件夹
"python.venvPath": "/path/to/conda/envs",
// 虚拟环境目录,VSCode会在其中查找虚拟环境,作为
// Command Palette中的备选项
"python.pythonPath": "/path/to/python.exe",
// 默认python解释器路径
"python.terminal.activateEnvironment": true,
// 创建python shell时,尝试中激活虚拟环境
}
  • python.terminal.activateEnviroment激活的虚拟环境由 python.pythonPath决定

    • VSCode会尝试执行python.pythonPath同级中 Scripts/activate.bat激活虚拟环境

    • 因此虚拟环境需要安装conda,否则没有 Scripts/ativate.bat无法正常激活默认虚拟环境

CPPC

配置文件

  • .vscode/c_cpp_properties.json

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
    "configurations": [
    {
    "name": "WSL",
    "includePath": [
    "${workspaceFolder}/**"
    ],
    "defines": [
    "LOCAL",
    "_DEBUG",
    "UNICODE",
    "_UNICODE"
    ],
    "compilerPath": "/usr/bin/gcc",
    "cStandard": "c11",
    "cppStandard": "c++14",
    "intelliSenseMode": "gcc-x64"
    }
    ],
    "version": 4
    }
    • C/C++项目基本配置
  • .vscode/tasks.json:利用VSCode的Tasks功能调用WSL的 GCC/G++编译器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    {
    // tasks.json
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format

    "version": "2.0.0",
    "tasks": [
    {
    "label": "Build",
    "command": "g++",
    "args": [
    "-g",
    "-Wall",
    "-std=c++14",
    "/mnt/c/Users/xyy15926/Code/cppc/${fileBasename}",
    "-o",
    "/mnt/c/Users/xyy15926/Code/cppc/a.out",
    "-D",
    "LOCAL"
    ],
    "problemMatcher": {
    "owner": "cpp",
    "fileLocation": [
    "relative",
    "${workspaceRoot}"
    ],
    "pattern": {
    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warining|error):\\s+(.*)$",
    "file": 1,
    "line": 2,
    "column": 3,
    "severity": 4,
    "message": 5
    }
    },
    "type": "shell",
    "group": {
    "kind": "build",
    "isDefault": true
    },
    "presentation": {
    "echo": true,
    "reveal": "silent",
    "focus": true,
    "panel": "shared"
    }
    },
    {
    "label": "Run",
    "command": "/mnt/c/Users/xyy15926/Code/cppc/a.out",
    "type": "shell",
    "dependsOn": "Build",
    "group": {
    "kind": "test",
    "isDefault": true
    },
    "presentation":{
    "echo": true,
    "reveal": "always",
    "focus": true,
    "panel": "shared",
    "showReuseMessage": true
    }
    }
    ]
    }
    • 这里为方便将运行程序任务同> Task: Run Test Task 任务关联,可以在命令面板执行此指令
  • .vscode/launch.json:gdb调试配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    {
    // launch.json
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
    {
    "name": "(gdb) Bash on Windows Launch",
    "type": "cppdbg",
    "request": "launch",
    "program": "/mnt/c/Users/xyy15926/Code/cppc/a.out",
    "args": ["-f", "Threading"],
    "stopAtEntry": false,
    "cwd": "/mnt/c/Users/xyy15926/Code/cppc/",
    "environment": [],
    "externalConsole": true,
    "MIMode": "gdb",
    "pipeTransport": {
    "debuggerPath": "/usr/bin/gdb",
    "pipeProgram": "C:\\windows\\system32\\bash.exe",
    "pipeArgs": ["-c"],
    "pipeCwd": ""
    },
    "setupCommands": [
    {
    "description": "Enable pretty-printing for gdb",
    "text": "-enable-pretty-printing",
    "ignoreFailures": false
    }
    ],
    "sourceFileMap": {
    "/mnt/c": "c:\\",
    "/mnt/d": "d:\\"
    },
    "preLaunchTask": "Build"
    },
    ]
    }

Git

1
2
3
4
{
"git.ignore.MissingGitWarning": true,
"git.path": "/path/to/xxxgit.exe"
}
  • “git.path”既可以是windows下Git,也可以是“伪装”Git,使用 工具wslgit,让VSCode 直接使用WSL内的Git

KeyMapper

  • <c-s-\>`:新建默认terminal绘画
  • <c-s-p>:command palette

网络设置

VMware网络模式

虚拟网络组件

虚拟交换机

Virtual Network Editor中默认有三个虚拟交换机

  • VMnet0(Bridged):桥接模式下的虚拟交换机
  • VMnet1(Host-only);仅主机模式下的虚拟交换机
  • VMnet8(NAT):NAT模式下虚拟交换机

虚拟网卡

在宿主机上安装完成VMware后,在网络适配器中会安装有两块 虚拟网卡

  • VMware Network Adapter VMnet1:主机模式下虚拟网卡
  • VMware Network Adapter VMnet8:NAT模式下虚拟网卡

卸载虚拟网卡后,可以Virtual Network Editor->还原默认设置, 还原虚拟网卡

Bridged

桥接模式:将主机网卡同虚拟机网卡利用虚拟网桥进行通信

  • 网络结构

    • 在桥接作用下,类似从物理主机虚拟出一个交换机
    • 所有桥接设置的虚拟机都连接到这个交换机的接口上
    • 物理主机也同样连接在此交换机上
    • 虚拟机就像是外部局域网中的独立主机,同宿主机逻辑上 同等地位
  • 网络连通性

    • 所以桥接下的网卡与网卡的都是交换模式的, 可以相互访问,不受干扰
    • 虚拟机可以在外部网络上可见
  • 机器网络配置

    • 虚拟机IP地址需要和宿主机在同一网段(外网网段)
    • 需要手动配置虚拟机配置IP地址、子网掩码
    • 若需要联网,虚拟机Gateway、DNS需要和主机一致

vmware_bridged

适用场景

  • 利用VMware在局域网中新建虚拟服务器,位局域网提供网络服务
  • 网络环境ip资源充裕

网络设置

  • 宿主机网络连接

    • 网络连接属性中VMware Bridge Protocal是否勾选 (安装VMware后一般会默认勾选)
    • 确认宿主机:IP、Gateway、DNS
  • 虚拟机网络设置

    • 编辑虚拟机设置->网络适配器->Bridged/桥接模式
  • 虚拟机网卡配置:网卡配置文件方式参见config_file

    • IP地址要和宿主机IP在同一网段
    • Gateway默认网关要和宿主机一致

NAT

Network Address Translation:网络地址转换,借助 虚拟NAT设备虚拟DHCP服务器,使得虚拟机能够联网

  • 网络结构

    • 主机网卡与虚拟NAT设备相连
    • 虚拟NAT设备、虚拟DHCP服务器、虚拟机共同连接在虚拟 交换机VMnet8上
    • VMnet8通过虚拟网卡VMware Network Adapter VMnet8和 宿主机相连,宿主机成为双网卡主机,同时参与宿主网络 和虚拟网络
  • 网络连通性

    • 借助虚拟NAT设备连通宿主机网卡、虚拟机,实现了 虚拟机通过宿主机网卡联网,所以虚拟机在外部网络 不可见
    • VNAV8连通宿主机、虚拟机,使得宿主机可以和虚拟机连通 ,要注意此时宿主机双网卡,连通虚拟局域网的网卡是虚拟 网卡
    • 虚拟网卡只是起连通虚拟机、宿主机的作用,卸载不影响 虚拟机连通外网
  • 机器网络配置

    • 由于虚拟DHCP服务器的存在,虚拟机无需特殊配置,只需要 启用虚拟机网卡DHCP服务即可

vmware_nat

适用场景

  • 虚拟系统介入互联网简单,不需要其他配置,只需要宿主机能 访问网络即可
  • 网络ip资源紧缺,且需要虚拟机能够联网

网络配置

  • 宿主机服务设置

    • 检查宿主机VMware DHCP ServiceVMware NAT Service 服务是否启动(VMware安装一般默认启动此服务)
  • Virtual Network Eidtor配置

    • VMnet8虚拟交换机默认为NAT模式
    • 配置VMnet8->子网IPVMnet8->子网掩码
    • 配置VMnet8->NAT设置VMnet8->DHCP参数
  • 虚拟机网络配置

    • 编辑虚拟机设置->网络适配器->NAT模式
  • 虚拟机网卡配置

    • NAT虚拟网络有DHCP服务,只需要修改BOOTPRPOTO=dhcp, 使用DHCP协议即可
    • 也可以设置静态ip,但是需要注意要在DHCP范围内

Host-Only

仅主机模式:将虚拟机与外网隔开,使得虚拟机成为独立系统,只和 主机相互通讯

  • 网络结构:类似于NAT模式

    • NAT模式去除了虚拟NAT设备
    • 使用VMware Network Adapter VMnet1虚拟网卡连接宿主机 、VMnet1交换机
    • 虚拟局域网可以认为是单独从属当前宿主机的私有网络
  • 连通性

    • 虚拟机网络、真实网络相互隔离,两者不相互连通
    • 宿主机、虚拟机相互通过虚拟网卡VNAV1相互连接
    • 事实上,可以在宿主机中设置,通过将主机网卡共享给 虚拟网卡VNAV1实现虚拟机联网

vmware_host_only

适用场景

  • 特殊的网络调试环境下,要求真实环境、虚拟环境隔离开

网络设置

  • 虚拟机网络设置

    • 编辑虚拟机设置->网络适配器->Host-only/仅主机模式
  • Virtual Network Eidtor配置:类似于NAT模式,只是VMnet1 虚拟交换机才默认为Host-only模式

  • 虚拟机网卡配置:类似NAT模式

共享宿主机网卡

Host-only模式下下,虚拟局域网默认无法联网,需要将宿主机网卡 共享给给虚拟网卡VNAV8才能实现联网

  • 网络连接->属性->共享->选择VMAV1

  • 共享宿主机网卡可能会要强制修改虚拟网卡VMAV1的ip地址, 需要根据提示在虚拟网络编辑其中修改虚拟网络的DHCP参数 host_only_network_sharing

  • 然后修改虚拟网卡Gateway、DNS为VMAV1的ip地址