0%

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

Jordan Canonical Form is an important form of matrix, because not all matrices have the eigen decomposition. But it is guaranteed that all real matrices have Jordan canonical form decomposition.

This article gives an example to show that when a matrix cannot be diagonalized, it is still similar to some approximate diagonal form. We can construct varieties of approximate diagonal form, but the Jordan canonical form is the simplest.

We have

A=[434102110]A=\begin{bmatrix} 4 &3 &-4\\ -1 &0 &2\\ 1 &1 &0 \end{bmatrix}

We solve the equation AV=λvAV=\lambda v to get the eigen value and the eigenvectors. We get:

λ1=2,  v1=(2,0,1)Tλ2=1,  v2=(1,1,0)T\begin{aligned} &\lambda_1 = 2,\ \ v_1=(2, 0, 1)^T \\ &\lambda_2 = 1,\ \ v_2=(-1, 1, 0)^T \end{aligned}

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/

The Goal of This Tutorial

EM (Expectation Maximization) algorithm is a widely used method when a model has hidden variables that cannot be observed from the dataset. In this tutorial, we focus on the outline and intuition of the EM algorithm. A Gaussian mixture model is studied as an example.

Gaussian Mixture Model

In the Gaussian mixture model, we assume that there are several generators which can generate samples from a Gaussian distribution. Each sample (denoted as x(i)=(x1,x2,...,xd)x^{(i)}=(x_1,x_2,...,x_d)) of our data is sampled from one of the generators. We can only observe the position of each sample xx and we don’t know for each sample x(i)x^{(i)}, which generator z(i)z^{(i)} generate it. Here, z(i)={1,2,..,k}z^{(i)}=\{1,2,..,k\} stand for the ID of each generator. For each generator jj(j[1,k]j\in[1,k]), it generates samples by a Gaussian distribution with parameter μj,Σj\mu_j,\Sigma_j. We use θ\theta to denote all model parameters, θ=(μ1,μ2,...,μk,Σ1,Σ2,...,Σk,ϕ1,ϕ2,...,ϕk)\theta=(\mu_1,\mu_2,...,\mu_k,\Sigma_1,\Sigma_2,...,\Sigma_k,\phi_1,\phi_2,...,\phi_k). Where ϕj\phi_j is the probability of selecting jjth generator and j=ikϕj=1\sum_{j=i}^k \phi_j=1. The goal of Gaussian mixture model is to find a most suitable parameter θ\theta to describe the data.

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
## Goals We explore the method to embed python code into C++ . This is useful when we want to integrate some python code snippets into some C++ based systems. ## compile python Here, we compile python into dynamic link libraries. 1. Download python from python.org
1
wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz
2. Unzip and build the python
1
2
3
4
5
6
7
tar xvf Python-2.7.13.tgz
cd Python-2.7.13
mkdir build
cd build
../configure --prefix=/home/me/pythonPKG --enable-unicode=ucs4 --disable-ipv6 --enable-shared
make -j20
make install
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
## 三门问题 三门问题是一个很出名也受到了很多争议的问题,这个问题出自美国的电视游戏节目Let's Make a Deal。问题名字来自该节目的主持人蒙提·霍尔(Monty Hall)。参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门可赢得该汽车,另外两扇门后面则各藏有一只山羊。当参赛者选定了一扇门,但未去开启它的时候,节目主持人开启剩下两扇门的其中一扇,露出其中一只山羊。主持人其后会问参赛者要不要换另一扇仍然关上的门。问题是:换另一扇门会否增加参赛者赢得汽车的机率?

关于这个问题有两个思路,看起来都很有道理,然而却得出了截然不同的结论,我们先来看一下两种解法。

  1. 主持人排除了一个门之后,还剩两个门,随便选哪个都是12\frac{1}{2}

  2. 选手选择的那扇门的概率是13\frac{1}{3},而主持人手上的门打开后,那13\frac{1}{3}的概率就跑到另一个门上了,所以另一个门的概率是23\frac{2}{3}

这两个思路看着都有道理,可是为什么会出现两个截然不同的答案呢?其实,问题出在题目里面,题目并没有说主持人是任意选择了一个门,还是只选择空门。玩了一个语言上的trick,把一个很重要的隐含假设一语带过,大家各自采用了自认为显然的隐含假设,便导致了两种不同的结果。我们先介绍一下贝叶斯公式,再用贝叶斯公式理解下这两种思路。

贝叶斯公式

贝叶斯公式是关于条件概率的公式,假设我们有两个事件AABB,我们可以根据AABB下发生概率去求得BBAA下发生的概率。其公式表述为:

P(AB)=P(BA)P(A)P(BA)P(A)+P(BA)P(A)P(A|B)=\frac{P(B|A)P(A)}{P(B|A)P(A)+P(B|\overline{A})P(\overline{A})}

其中A\overline{A}表示AA不发生的概率。

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
拉格朗日方程是理论力学中非常重要的一个方程,它和牛顿力学一样,都是一种对力学系统的描述。但与牛顿力学不同的是,他以整个系统的视角来分析系统的运动状态,而牛顿力学则是对每一个质点进行单独的分析。两种方法等效、且可相互推导,但使用场景则大不相同。本文旨在通过牛顿力学来导出拉格朗日方程。

拉格朗日方程导出

我们研究物体在保守系统中的运动情况。所谓保守系统,是指物体所受的力都是保守力。而保守力则是指物体在该力的作用下做功的大小与路径无关。
我们首先给出牛顿第二定律:

ma=Fma=F

以下的步骤皆是通过对牛顿第二定律的变形,来得出拉格朗日方程。我们先补充一个动量pp、速度vv和动能TT的等式。我们有

Tv=(12mv2)v=mv=p\frac{\partial T}{\partial v}=\frac{\partial (\frac{1}{2}mv^2)}{\partial v}=mv=p

可以看出动能关于速度的导数是动量。而

dpdt=mdvdt=ma\frac{dp}{dt}=\frac{mdv}{dt}=ma

我们把速度vv记作x˙\dot{x},有:

ma=mx¨i=ddtTx˙ima=m\ddot{x}_i=\frac{d}{dt}\frac{\partial T}{\partial \dot{x}_i}

同时,我们来看势能UU与力FF的关系:

F=UxF=-\frac{\partial U}{\partial x}

带入牛顿第二定律有:

Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
## 简介 Ising Model(伊辛模型)最早用于磁性材料的研究,而后来在社会学中也取得了重要的应用,Ising Model可衍生出投票模拟和种族隔离模型(诺贝尔奖得主Thomas C. Schelling)。Ising Model对磁性物质极性建模模型如下: ## 模型
![](/blog/images/ising-67792.png)
假设一个系统有两种状态A、B,在每种状态下有对应的能量$E_A,E_B$,而每种状态出现的概率与能量相关为: $$p_A=\frac{1}{Z}e^{-E_A/T}$$ $$p_B=\frac{1}{Z}e^{-E_B/T}$$ $$Z=e^{-E_A/T}+e^{-E_B/T}$$ 其中T是温度,Z是归一化项,可见能量越高的状态,概率越小;能量越低的状态,概率越大,而一个系统的能量跟这个系统里的所有粒子状态有关,假设每个粒子$S_i$只能有两种状态$\{+1,-1\}$,所有的粒子分布在网格的格点上,相邻粒子有相互作用,那么Ising Model定义能量为: $$E=-J\sum_{i,j}S_iS_j-H\sum_iS_i$$ ## 模型含义 我们来看这个式子。
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
## C++类型推导 用过C++11的同学一定对里面的auto和decltype映像深刻,auto常用于申明变量的自动推导。例如:
1
2
auto c = a + b;
decltype(a + b) c = a + b;
如果a、b都是int型,那么c自动为int型;如果a、b都是double型,那么c自动为double型。但是,如果c是一个模板的类型,模板里面的东西往往很长,如果不使用auto的话,将要写很多的东西。而且在设计模板的时候,如果涉及两个class操作得出第三个class,则更加无法事先指定类型。然而,很多公司的编译器过于古老,本文探讨了一种auto/decltype的近似实现方式(boost的typeof)。 ## boost typeof 这个想法非常trick,因为我们要在编译期决定其类型,而sizeof是在编译期执行的,我们可以利用这个特性。
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
C++的enable_if常用于构建需要根据不同的类型的条件实例化不同模板的时候。本文主要讲了enable_if的使用场景和使用方式。 ## 函数重载的缺陷 函数重载能解决同名函数针对不同传入参数类型而实现不同的功能。举一个简单的例子:
1
2
3
4
5
6
7
8
9
10
void print(int a){
cout<<"in int print";
}
void print(double a){
cout<<"in double print";
}
int main(){
f(1);
f(1.0);
}
输出:
in int f()
in double f()

可以看出,这里的选择方式是通过不同的参数类型实现的。那么问题来了,如果我们是写的模板,想根据模板的条件来选择实现该怎么办?(例如,对于我们定义的一些class做输入时,采用一种方式实现,而对于其他类型的话采用另一种方式)。这就需要用到enable_if

SFINAE原则与enable_if简介

C++模板函数重载依赖于 SFINAE (substitution-failure-is-not-an-error) 原则,即替换失败不认为是错误,而只是简单地pass掉。看下面一个例子:

Read more »

By Z.H. Fu, X.Y. Xu
https://fuzihaofzh.github.io/blog/
## 虚函数效率缺陷 在需要使用多态的场合中,我们采用虚函数来实现。具体来说,一般实现多态是采用如下虚函数的方式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
struct Base{
virtual void eval() = 0;
};

struct Derived:public Base{
void eval(){
cout<<"in Derived.";
}
};

int main(){
Derived d;
Base* b = &d;
b->eval();
return 0;
}
这是一个最简单的继承的例子,在基类中定义一个纯虚函数,子类实现了这个函数,用基类指针指向子类并调用该函数时,
Read more »

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
《世说新语》是南朝宋刘义庆编著的一本记录魏晋士族言谈的一本书。魏晋时期是中国最糟糕的时代之一,社会阶层分化空前扩大,底层民众长期生活在战乱和流离之中,而与之形成鲜明对比的是上层的士族阶层,长期把持国家的政权,架空了皇权,几大家族轮换更替,对内无一个光明伟大的理想,对外无一份进取扩展的勇气,以至于整个六朝皆浸淫在一种奢靡浮华的氛围里,没有大的事功。而魏晋却又是中国思想史上最灿烂的时代,士族阶层的思想家打破了传统名教的束缚,思想领域出现了蓬勃发展的景象,他们从传统的条条框框中挣脱出来,将眼光转向自然、转向内心、转向宇宙大千,他们思想之宏大、人格之完备时至今日亦多可见教。本文主要通过《世说新语》来回味这段绮丽的历史。 ## 略论两汉选举制度对士族风尚的影响 魏晋士族风尚的形成,似乎都与两汉的选举制度有关。东汉选举主要包括地方的察举和公府的征辟两方面。察举主要包括之前的贤良与后来的孝廉,由地方官员向上推荐。而征辟则是直接由皇帝(征)和地方官员(辟)选拔任用,东汉的公卿尤以辟士为高,而公府征辟又以一时之清议为转移(清议即指按儒家道德规范臧否人物)。在此等政治环境下,造成士族风尚形成了几个特点:1)过分重视道德。汉末士族过分看中道德,而轻视实务,以致在对抗宦官的过程中并无一个切实有效的应对,同时随着清议的发展,这种臧否人物的手段堕落为不着实务的空谈;2)畸形的道德观。道德本为人的基本素质,以道德为标杆进行选拔,造成竞相攀比,弄出一些“道德亢奋”的事情。 ## 略论汉末政治形势 东汉的政治局势是三方角力的一种平衡。皇室、士大夫、外戚,东汉皇帝皆短命,皇室的权利实际上掌握在宦官手里,而士大夫阶层于利益、于道义上讲都是与宦官阶层对立的,而外戚是一个比较有意思的阶层,也就在汉代有,其他朝代皆不多见,从魏其侯窦婴、武安侯田蚡起,外戚就在汉代政治上起着举足轻重的作用,他们大多代表着皇室掌握军队,待到汉武帝托少帝于霍光,弄出个大司马大将军来,不想霍光擅行废立,外戚权势达到一个高潮,
Read more »