数学建模和数学分析是工科类专业学生学习的基础,同时也是工程设计中的首要工作,随着现代系统的大规模发展趋势,所需的数学运算日益复杂,特别是对于矩阵运算的要求逐渐增多,这些工作已经难以以手工完成,因此,随着科学技术的前进以及计算机技术的日益完善,一些便于实现的仿真应用软件逐步在科技领域占了重要的地位。仿真软件不同于编程软件,作为一种分析工具,它们在人机交互式方面有着极大的优越性,人们可以不必对编程所用语言下很大的工夫去学习它,从而可以节省大量的时间用于科学研究,提高了工作进程和效率。
MATLAB软件包最早由美国Mathwork公司于1967年推出,是“Matrix Laboratory”的缩写,早期是为了实现一些矩阵运算;而随着这种软件的逐步发展,它以计算及绘图功能强大的优势逐渐渗入到了各个工程领域,比如数学、物理、力学、信号分析以及数字信号处理等,目前已是深受工程师们喜爱的一种分析工具,目前该软件已经发展到了Matlab70版本。Matlab大大降低了对使用者数学基础和计算机语言知识方面的要求,而且编程效率较高,还可以直接在计算机上输出结果和精美的图形。
91MATLAB语言概述
911 Matlab语言的特点
1 编程效率高
作为一种面向工程的高级语言,Matlab允许用数学形式的语言来编写程序,这种编程语言和其它诸如C、Fortran等语言相比,其语言格式更接近于我们平时的书写习惯,因此,Matlab又被称为纸式算法语言。由于其编写程序简单,因此编程效率高,易学易懂,初学者在几小时之内便可以达到简单 *** 作的程度。
另外在Matlab中还可以调用C和Fortran子程序,而且调用格式非常简单。
2 采用交互式人机界面,用户使用方便
Matlab语言为解释型 *** 作,人们可以在每条指令之后马上得到该指令执行的结果;同时在执行的过程中如发现指令有错,在屏幕上马上会出现出错提示。该语言提供了丰富的在线帮助功能,想了解指令或 *** 作的格式、功能等,只要在窗口输入‘HELP 指令’,该指令的格式、功能等便能马上在屏幕上显示出来。
3 语句简单,涵盖丰富
Matlab语言中有丰富库函数功能,这些函数功能和C语言中的函数一样使用方便,而且Matlab的函数调用起来要更方便,更接近于生活语言。这些函数包括常用的数学计算,绘图以及一些扩展工具箱。
4 具有多个功能强大的应用工具箱
Matlab中包括了一些扩展的函数功能,一般称为工具箱,这些工具箱实际上是一些功能函数集,每一个工具箱适用于各自不同的科学分析领域。现在Matlab中已有系统分析、信号处理、图象处理、DSP等多个工具箱,而且Matlab所包括的工具箱还在不断地被扩展。
5 方便的计算和绘图功能
Matlab中的很多运算符不仅可以用于数值计算,而且有很多运算符只要增加一个‘’便可以用于矩阵运算,另外在Matlab中还给出了适用于不同领域的特殊函数,使得一些诸如卷积等的复杂运算也可以很方便的得到解决;Matlab的绘图函数十分丰富,用适用于不同坐标系的绘图语句,还可方便地在所绘图形上标注横、纵坐标变量、图形名称等。另外,在调用绘图语句时,只需改变函数变量,就可以绘出不同颜色、不同风格的线或图。
912 Matlab命令的结构
MATLAB语言的典型结构为:
MATLAB语言=窗口命令+M文件
Matlab的命令窗口就是其工作空间,也是Matlab运行的屏幕环境,在这种环境下输入的Matlab语句,称为“窗口命令”。所谓窗口命令,就是在上述环境下输入的Matlab语句并直接执行它们完成相应的运算、绘图等。
但对于复杂功能,Matlab利用了M文件。Matlab的程序可以向下兼容。
M文件由一系列Matlab语句组成,在Matlab的编辑窗口完成输入。它既可以是一系列窗口命令,又可以是由各种控制语句和说明语句构成的函数。
913 Matlab的库函数
库函数是系统根据需要编制好了,提供用户使用的函数,用户使用它们时,只要写出函数名,调整函数参量,无须再编写该函数的程序。
各种不同版本的Matlab都提供了一批库函数,但其提供的库函数的数目不同,函数名和函数功能也不完全一样。
常用的库函数包括一些基本数学函数、字符与字符串函数、输入输出函数等
除了基本库函数外,不同版本的Matlab还增加了不同的有专门功能的功能库函数,也称为工具箱,例如信号处理工具箱、控制系统工具箱等。
914 Matlab命令的执行
一般常用的有两个窗口,“命令窗口”和“调试窗口”,用户可以在“调试窗口”中输入自己编制的程序以及对程序进行修改和调试。程序输入后应该进行存盘 *** 作,文件名按规定选择,开头必须为字母,长度不能超过19个字符,文件名前19个字符相同的文件按同一文件处理;在“命令窗口”中用户可以执行Matlab命令或将用户编制的文件以命令形式在界面上运行。
执行M文件的方法有两个,一是直接在调试窗口中利用功能菜单的调试命令完成。;二是将在“调试窗口”中存好的M文件的文件名在“命令窗口”中输入后按回车即可
915 数据的输入和结果输出
Matlab的文件格式为固定格式,由于其数据输入极为简单,因而对少量的数据输入,不需要花费很多的时间。
Matlab的结果输出有数据输出(包括表达式)和图形输出两种,数据结果会直接输出到命令窗口中,图形则在专门的图形窗口中显示。
916 环境参数
*** 作系统中的PATH是很常见的,MATLABPATH也是Matlab中很重要的环境参数,设置好适当的MATLABPATH以后,Matlab可以方便地调用任何地方的M文件和运行可执行文件。
如果在Matlab中输入一个名字,例如abc,则Matlab会按以下顺序做
1 看abc是否为工作空间中的变量
2 检查abc是否是一个内部变量
3 在当前目录中寻找abcMEX或abcM文件,假若两个文件同时存在,则abcMEX优先考虑。
4 根据环境参数MATLABPATH指定的搜索路径来寻找包含abcMEX或abcM的目录
MATLABPATH已经在Matlab进行安装时自动设置好,它包括了除Matlab的工作目录(MATLAB/BIN)之外的所有其他Matlab的子目录。
用户也可以增加或修改MATLABPATH的内容来增加或修改搜索路径,以便建立一些特殊的、专用的文件库,修改MATLABPATH可以用Matlab的PATH命令,但是这种修改不能被保存下来,在退出Matlab后就自动取消,要保持的MATLABPATH设置可以通过编辑的启动控制文件—MATLABCM来实现。
917 命令与文件的编辑和建立
1 命令行的编辑
鼠标和键盘上的箭头等可以帮助修改输入的错误命令和重新显示前面输入过的命令行。例如准备输入:
y=square(pix);
而误将square拼写成了squae,MATLAB将返回出错信息:
Undefined function or variable squae
其中是出错信息的提示符,说明输入有MATLAB不能识别的命令。此时只须按上下箭头,刚才输入的命令即可重新显示在屏幕上。这时利用鼠标或键盘,将光标置于e的位置,再输入字符r即可。回车后,屏幕将给出命令执行的结果。先前输入的命令存放在内存中。由于内存缓冲区的大小有限,只能容纳最后输入的一定量的命令行,因而可重新调用的也是后面输入的一定数据的命令行。下表9-1是一些编辑键及其功能:
表9-1 MATLAB的编辑键及功能
命令行编辑和重新调出键
↑ 重新调出前一命令行
↓ 重新调出后一命令行
← 光标左移一个字符
→ 光标右移一个字符
ctrl+← 光标左移一个字
ctrl+→ 光标右移一个字
Home 光标移到行首
End 光标移到行尾
Delete 删除光标所在位置的字符
Backspace 删除光标所在位置左边的一个字符
若在提示符下输入一些字符,则↑键将重新调出以这些字符为开头的命令行。
这里没有插入和改写的转换 *** 作,因为光标所在处总是执行插入的功能。
如果使用鼠标,会使这些 *** 作更为方便。把鼠标放到光标移到位置,并定位即完成光标移动。利用鼠标,还可以方便地完成字符串的选择、复制和删除。
2 文件的编辑与建立
一般我们常用的建立M文件的途径是利用Matlab提供的M文件窗口。
①建立新的M文件
图9-1 Matlab命令窗口
选择Matlab命令窗口中的菜单File—New—M-File菜单,如图9-1所示,即可出现文件调试窗口,如图9-2所示,在此窗口中将用户程序输入,
图9-2Matlab调试窗口
退出该窗口时应存盘,文件名的命名按前所述,其扩展名必须为M。
②编辑已有的文件
选择Matlab命令窗口中的菜单File—Open命令,出现文件选择窗口,选择所需文件即可。
92 MATLAB的基本语法
921基础知识
1 语句和变量
Matlab语句的通常形式为:
变量=表达式
简单的形式为:表达式
表达式由 *** 作符或其他字符,函数和变量名组成,表达式的结果为一个矩阵,显示在屏幕上,同时输送到一个变量中并存放于工作空间中以备调用。如果变量名和“=”省略,则ans变量将自动建立,例如输入:1900/81
得到输出结果:
ans=
234568
如果在语句的末尾是分号“;”,则说明除了这一条命令外还有下一条命令等待输入,Matlab这时将不给出中间运行结果,当所有命令输入完毕后,直接打回车键,则Matlab将给出最终的运行结果。
如果一条表达式很长。一行放不下则键入“…”后回车,即可在下一行继续输入。注意“…”前要有空格。
变量和函数名由字母或字母加数字组成,但最多不能超过19个字符,否则只有前19个字符被接受。
Matlab的变量区分字母大小写,函数名则必须用小写字母,否则会被系统认为是未定义函数,也可以用casesen命令使Matlab不区分大小写。
2 数和算术表达式
惯用的十进制符号和小数点、负号等,在Matlab中可以同样使用。表示10的幂次要用符号e或E。
在计算中使用IEEE算法精确度是eps,且数值允许在10-308-10308间16位长的十进制数。
Matlab的算术运算符如下表9-2所示:
表9-2 Matlab的算术运算符
+ 加
- 减
乘
/ 右除
\ 左除
^ 幂
对于矩阵来说,这里左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于标量,两种除法运算的结果相同。
3 输出格式
任何Matlab语句的执行结果都可以在屏幕上显示,同时赋值给指定变量时赋值给ans,数字显示格式可由format命令来控制。format只影响结果的显示,不影响其计算与存储。Matlab总是以双精度执行所有的运算。
1 Help命令
Help命令很有用,它为Matlab绝大多数命令提供了联机帮助信息。
Help除了可以以菜单形式提供帮助外,还可以在命令窗口输入“Help”命令来取得信息。
输入help lsim将得到特征函数lsim的信息。如图9-3所示:
图9-3 help命令的使用
输入help [ 将显示如何使用方括号输入矩阵。
922向量
1 产生向量
在Matlab中“:”是一个重要的字符,如产生一个1-5单位增量的行向量:在命令窗口中输入
x=1:5
回车后得到结果:
x=
1 2 3 4 5
也可以产生一个单位增量小于1的行向量,方法是把增量放在起始和结尾量的中间,如:
t=0:02:1
在命令窗口中输入后回车将得到以下结果:
t =
0 02000 04000 06000 08000 10000
“:”也可以用来产生简易的表格。为了产生纵向表格形式,首先可形成行向量,而后转置得到,即可与另一列向量合成两列的一个矩阵,如:
在MATLAB命令窗口中输入如下语句:
t=(0:01:1)’;
y1=exp(-t);
[t y1]
命令窗口中将会显示结果如下:
ans =
0 10000
01000 09048
02000 08187
03000 07408
04000 06703
05000 06065
06000 05488
07000 04966
08000 04493
09000 04066
10 03679
由结果可以看到,简单的命令语句便可以生成一个十一行两列的矩阵。
2 下标
单个的矩阵元素可在括号中用下标来表达。例如已知:
A=
1 2 3
4 5 6
7 8 9
其中元素A(3,3)=9,A(1,2)=2等。如用语句A(3,2)=A(1,1)+A(2,1),则产生的新矩阵为:
A=
1 2 3
4 5 6
7 5 9
下标也可以是一个向量。例如若x和v是向量,则x(v)也是一个向量;[x(v(1)) x(v(2))…x(v(n))]。对于矩阵来说,向量下标可以将矩阵中邻近或不邻近元素构成一新的子矩阵,假设A是一个1010的矩阵,则A(1:5,3)指A中由前五行对应第三列元素组成的51子矩阵。
又如A(1:5,7:10)是前5行对应最后四列组成的54子矩阵。使用“:”代替下标,可以表示所有的行或列。如:A(:,3)代表第三列元素组成的字矩阵,A(1:5,:)代表由前5行所有元素组成的子矩阵。对于子矩阵的赋值语句,“:”有更明显的优越性。如A(:,[3,5,10])=B(:,1:3)表示将矩阵的前三列,赋值给矩阵的第三、五、十列。
923数组运算
数组和矩阵是两个完全不同的概念,虽然在Matlab中它们在形式上有很多的一致性,但它们实际上遵循着不同的运算规则。Matlab数组运算符由矩阵运算符前面加一个“”来表示,如“”“/”等。
924 数学函数
一组基本函数作用在一个数组上,如
A=[1 2 3;4 5 6]
B=fix(pi A)
C=cos(piB)
运算将按函数分别作用于数组的每一个元素进行,其结果为:
A =
1 2 3
4 5 6
B =
3 6 9
12 15 18
C =
-1 1 -1
1 -1 1
表9-3是Matlab所提供的数学函数主要有:
表9-3 Matlab的主要数学函数
三角函数
sin 正弦
cos 余弦
tan 正切
asin 反正弦
acos 反余弦
atan 反正切
atan2 第四象限的反正切
sinh 双曲正弦
cosh 双曲余弦
tanh 双曲正切
asinh 反双曲正弦
acosh 反双曲余弦
atanh 反双曲正切
另外还有一些以此为基础的基本数学函数如表9-4所示。
表9-4 Matlab的基本数学函数
基本数学函数
abs 绝对值或复数模
angle 相角
sqrt 开平方
real 实部
imag 虚部
conj 复数共轭
round 四舍五入到最近的整数
fix 朝零方向取整
floor 朝负无穷方向取整
ceil 朝正无穷方向取整
sign 正负符号函数
rem 除后余数
exp 以e为底的指数
log 自然对数
log10 以10为底的对数
以及一些特殊的数学函数如表9-5:
表9-5 Matlab的特殊函数
特殊函数
bassel 贝塞尔函数
gamma 完整和非完整的γ函数
rat 有理逼近
ert 误差函数
invert 逆误差函数
ellipk 第一类完整椭圆积分
ellipj 雅可比椭圆函数
以及在此基础上扩充的特殊数学函数。
93 绘图
在Matlab中把数据绘成图形的命令有多种。以下表9-6列出了这些命令:
表9-6 Matlab的主要绘图命令
绘图命令
plot 线性X—Y坐标图
loglog 双对数坐标图
semilogx X轴对数半对数坐标图
semilogy Y轴对数半对数坐标图
polar 极坐标图
mesh 三维消隐图
contour 等高线图
bar 条形图
stairs 阶梯图
除了可以在屏幕上显示图形外,还可以对屏幕上已有的图形加注释、题头或坐标网格。主要命令如表9-7所示:
表9-7 Matlab的主要图形注解函数命令
图形加注
title 标题头
xlabel X轴标注
ylabel Y轴标注
text 任意定位的标注
gtext 鼠标定位标注
grid 网格
关于坐标轴尺寸的选择和图形处理等控制命令如下表9-8所示:
表9-8 Matlab的主要图形控制命令
图形控制命令
axis 人工选择坐标轴尺寸
clr 清图形窗口
ginput 利用鼠标的十字准线输入
hold 保持图形
shg 显示图形窗口
subplot 将图形窗口分成N块子窗
还有很多此类命令,在以后的学习中大家可以逐步掌握。
931X—Y绘图
plot命令绘制坐标图,loglog命令绘制全对数坐标图,semilogx和semilogy命令绘制半对数坐标图,polar命令绘制极坐标图。具体命令的格式及使用方法可以利用help在线帮助详细了解。
1 基本形式
如果y是一个向量,那么绘制一个y元素和y元素排列序号之间关系的线性坐标图。例如要画y元素的序号1,2,3,4,5,6,7和对应的y元素值分别为0,048,084,1,091,06,014的图形,则输入命令:
y=[0 048 084 1 091 06 014];
plot(y)
则结果如下图9-4所示:
图9-4 曲线波形图
图中坐标轴是软件自动给出的,也可任意对图形加注,当输入以下命令:
title(’my first plot’); % 输入题头
xlabel(’x’); % 输入x轴标注
ylabel(‘y’); % 输入y轴标注
grid % 加网格
则图形显示如下图9-5所示:(注意x和y应是同样长度的向量)
图9-5 选定坐标的波形图
933图线形式和颜色
1 形式
如果不使用缺省条件,可以选择不同的线条或点形式作图,对应符号及效果如表9-9所示:
表9-9 绘图曲线格式及命令
线方式
点方式
实线 -
虚线 ……
冒号线 :
点划线 –▪–▪
点
加号 +
星
小圆 ○
x形式 x
2 颜色
命令及效果如表9-10所示:
表9-10 图形颜色命令
颜色
黄 y
洋红 m
青 c
红 r
绿 g
蓝 b
白 w
黑 k
94 MATLAB 使用简介
首先在PC机上安装Matlab,不同版本的Matlab需要不同的系统支持;当机器上装载了Matlab软件包后,用户就可以使用了。
下面以一个具体的小例子简要介绍如何使用Matlab软件包来实现一些计算及绘图功能。使用中我们采用了Matlab65版本。
工程中经常会遇到曲线拟合的问题,当实验测定了发生事件的一组数据后,根据数据拟合出一条曲线,从而对事件发生的将来做出预测或在后续的系统分析中进行理论研究。在这里我们不关心曲线拟合的具体算法,只是来熟悉一下Matlab的各个窗口及命令。
实际中,一般的电信号以时间作为自变量,测定数据时可以以等时间间隔为测量依据,假设我们现在有这样的一组数据:[1,2],[15,3],[2,4],[25,35],[3,5],[35,4],[4,6],[45,66],[5,72],[55,8],要求以这组数据拟合出一条曲线。
进入MATLAB后,我们首先看到的是它的主界面——命令窗口,如图9-6所示
图9-6 Matlab命令窗口
在命令窗口中我们可以直接输入如下命令:
t=[1:05:55]; %定义自变量范围
y=[2,3,35,38,5,49,6,66,72,8]; %定义函数值
qx1=polyfit(t,y,1) %对数据做一次拟合
qx2=polyfit(t,y,5) %对数据做五次拟合
t1=1:005:55; %确定作图横坐标范围
y1=polyval(qx1,t1); %形成曲线数学模型
y2=polyval(qx2,t1);
plot(t,y,'',t1,y1,':',t1,y2) %作图
即可得到这些命令的执行结果,它以图形的形式给出,如图9-7所示,从图中可以看到,兰色的‘’是数据点,绿色的虚线是一次拟合曲线,而红色的实线则是三次拟合曲线。
图9-7 曲线拟合图
我们可以多次反复进行不同次数的曲线拟合,最终可以得到一条和数据点最接近的曲线。这样的反复工作在Matlab中很容易就可以实现,只要改变命令中的‘polyfit’函数的参数就可以得到。
由于我们不是主要对软件做详细的介绍,所以在后面内容中有一些命令并没有做很细致的描述,大家可以充分利用Matlab的在线帮助功能对这些命令做一些深入的认识,例如,在学习过程中我们若不了解‘polyval’函数的作用,就可以在Matlab的命令窗口中输入
helppolyval
然后回车,便可看到如下窗口图9-8,从而可以很方便地了解和熟悉该函数的作用和调用格式
图9-8 Matlab帮助窗口
从窗口信息中我们可以知道,‘polyval’函数的功能是构建数据的多项式数学模型。在图9-6中我们可以看到有如下的输出信息,它即我们所构造的两个多项式的系数矩阵
qx1 =
12776 08479
qx2 =
00160 -02798 18717 -58876 97583 -34642
通过调用函数‘polyval’我们即可得到两个多项式所表示的曲线方程:
值得注意的是,如果需要编写复杂一些或经常需要进行参数改动的程序,则最好在Matlab的调试窗口中进行编程,然后形成M-文件,过程如下:
1 从命令窗口进入调试窗口
2 在调试窗口中输入以上语句
3 调试程序,获得所需要的信息
调试程序有两种方法,一是在调试窗口中直接进行,如图9-9所示,在调试窗口中选择命令菜单Debug—Run命令,即可得到调试结果;二是在调试窗口完成程序的编制后存盘(例如文件名为qxm),推出调试窗口,返回到命令窗口中,在命令窗口中键入qx然后回车,也可以马上得到调试结果。
图9-9 调试窗口中的程序调试
95 交互式人机界面介绍
利用编程的方法可以方便地实现一些分析的仿真,但是这种仿真设计的方法还是需要掌握一定的编程语言,怎样脱离开编程而实现更简捷的EDA设计是所有EDA设计软件发展的一个思路,在MATLAB软件包中还提供有一些交互式的图形用户界面,用户可以直观地利用鼠标直接在屏幕上控制图形就可以完成一些设计和分析任务。
在MATLAB数字信号处理工具箱中,用户便可以利用这种图形形式的人机界面在窗口中利用鼠标而完成信号的输入、观察和测量;对信号进行频谱分析,了解信号的频率特征以及实现数字滤波器的设计等。在这里,用户不必去了解MATLAB中众多的函数功能及语法规则就可以完成大部分的信号及系统的分析工作。
下面简要介绍这种界面的基本组成。
在MATLAB命令窗口中,键入‘sptool’命令,一个sptool窗口便会马上d出,如图9-10所示。第一次打开是,窗口的名称是一个未定义的sptool窗(untitled)。用户在使用后可以对窗口进行命名,从而可以在下次使用时进行打开调用。
图9-10 SPTOOL窗口
在sptool窗口中,用户可以可视化地实现信号分析及处理的全部工作。窗口有信号(SIGNALS)、滤波器(FILTER)和频谱(SPECTRA)三个栏目,它们分别记录了用户所用过的信号、滤波器和频谱。
Sptool窗口的主要命令菜单有文件(FILE)和编辑(EDIT)两个:
1 File菜单
l Open session 打开已经存在的扩展名为spt的SPTool窗口;
l Import 鼠标选择该项后会d出一个对话框,用户根据提示可以从磁盘或MATLAB工作空间向SPTool窗口输入信号、滤波器或频谱,它们文件名的后缀必须是 MAT文件形式;
l Export 向MATLAB工作空间或磁盘输出信号、滤波器或频谱的结构参数
l Save Session ,Save Session As 将所命名的SPTool窗口以扩展名为 spt的MAT文件存放
l Perferences 设置信号处理交互式用户界面工具的性能
l Close 关闭SPTool窗口
在d出的SPTool窗口下方还有四种命令:
Signals 栏下的View命令用来激活信号浏览窗
Filter 栏下有四个命令按钮
l View命令用来激活滤波器浏览窗
l New Design命令用来激活滤波器设计窗,从而可以设计新的滤波器
l Edit Design命令用来激活滤波器设计窗口并对所设计的滤波器进行编辑,可以任意选择滤波器的某些参数
l Apply命令用来实现新设计的应用
Spectra 栏下有三条命令:
l View 用来激活频谱观察窗口,观察所选择的信号频率特性
l Create 命令用来激活频谱观察窗,产生所选定信号的频谱
l Update 用于更新已选定信号频谱
2 Edit菜单
l Duplicate 用于复制所选定的参量
l Name 用于对所选定的参量命名
l Clear 清除所选定的参量
l Sampling Frequency 给选定的信号或滤波器设置采样频率
3 Window菜单用于显示当前所激活的窗口名称
4 Help菜单提供在线帮助
我们可以在SPTool窗的Signals栏下输入所要观测的信号,在Filter栏下进行数字滤波的设计,而在Spectra栏中对选定信号进行频谱分析,有兴趣的可以自己进一步深入学习。
1 半经典理论跟全经典理论的区别
半经典理论中将光场体现在微扰哈密顿量中,全经典的哈密顿量则包括了原子,光场及相互作用部分。
2 半经典求解步骤
①哈密顿量=多模原子自由哈密顿量+相互作用哈密顿量。
② 电偶极近似 (忽略磁场,光场视为均匀)。
③将态矢量用自由哈密顿量本质矢展开后代入薛定谔方程得概率幅方程。
④在单模光场情况下,取 一级微扰近似 (作用时间短,相互作用强度弱)和 旋转波近似。
⑤考虑单模光场与二能级原子作用,变换到相互作用绘景,将态矢量用二能级基矢展开后代入得概率幅方程组,设定初始条件求解方程组可以求解:布局概率(密度算符对角矩阵元),布局数差,电偶级矩(密度算符非对角矩阵元)。考虑发生共振时,原子发生 Rabi振荡 ,处于两能级的叠加态。也可用 布洛赫方程组或密度算符方程组 求解。
⑥考虑双模光场和三能级原子的 作用,同样对微扰哈密顿量取电偶级近似,旋转波近似,变换到相互作用绘景,态矢量用三能级基矢展开后代入,求解概率幅方程。当满足一定条件时,虽然发生共振但原子总是处于某个态(囚禁态)。
1 将腔内电场进行驻波(行波)展开,由麦氏方程的到磁场的驻波展开,进而得到哈密顿量。
2 将广义坐标q,和广义动量p视为算符并赋予对易关系。
3 引入光子湮灭、产生算符表示(电场正交分量算符 位置、动量算符)。
1 任何算符都可以表示成正、反序排列的形式(原因是任何算符都可以表示成坐标动量算符的形式)
2 P,Q 函数用来求正反排列算符平均值时直接是一个积分关系。
3 坐标动量空间的wigner函数,可用于计算对称排序算符的平均值。
4 特征函数,概率分布函数互为傅里叶变换。
1 相干态跟光子数态同样具有完全相干性。(g1=1)
2 光子反群聚意味着亚泊松分布(对于单模光场)
1 哈密顿量=多能级原子自由哈密顿量+多模光场自由哈密顿量+相互作用哈密顿
2 对相互作用哈密顿取电偶级近似
3 变换到狄拉克绘景然后将态矢量用自由哈密顿量基矢展开得到概率幅方程
4 设定初态并取一级微扰近似求得概率幅,得到与半经典理论同样结论
5 在单模光场及二能级情况下,取电偶级近似和旋转波近似得相互作用哈密顿。
6 考虑共振情况并变换到狄拉克绘景并将态矢量按自由哈密顿量本征矢展开代入薛定谔方程得概率幅方程。设定初始条件(光场处于光子数态)得到Rabi振荡的解,态矢量处于纠缠态。(时间演化算符得到同样结果)。当光场初始处于相干态(光子数态叠加),反转粒子数W随时间是呈现崩塌与复苏现象(多个Rabi振荡的叠加),在半经典(即光场视为经典)情况下,只有Rabi振荡形式而没有崩塌与复苏。
7 在非共振情况下并考虑初始光场是光子数态的叠加态,求解概率幅方程组得到联合概率幅。讨论原子性质则对联合概率幅对光子数求和,讨论光场性质则对原子能级求和。
8 在单模光场二能级的总哈密顿的本征态为两个 缀饰态 (裸态的相干叠加,共振时兼并,失谐时近似为裸态),利用时间演化算符可以得到态矢量为缀饰态叠加。
9 二能级和多模光场作用取电偶级近似并变换到狄拉克绘景,取旋转波近似得相互作用哈密顿量,在初态为上能态和真空态直积的情况下,将态矢量展开为 ,代入薛定谔方程得到概率幅方程,进一步得到 上能级概率幅微分-积分方程 。假设场模很密集(求和化为积分),并且相互作用近似为共振频率处的delta函数,得到自发辐射速率方程,说明上能级粒子数以指数衰减,寿命为 ,其中 为衰减速率,与频率3次方成正比,与电偶级矩平方成正比。跃迁到某个模的概率随着失谐量越大,越小。
10 三能级和多模光场相互作用取电偶级近似,变换到狄拉克绘景并取旋转波近似得哈密顿量。在初态为最高能态和真空态直积的情况下,将态矢量展开。代入薛定谔方程得到概率幅方程,考虑采用WW近似,得到末态的速率方程组。只有在两能级差跟两光子达到共振时才有较大的跃迁概率。
主方程(描述耗散过程)→相干态衰减为真空态,奇偶相干态则先 退相干成混合态后 衰减为真空态。
①讨论在热库和压缩真空库情况下的密度算符方程,
②体系具体化为二能级原子和单模光场
③具体通过密度算符矩阵元讨论原子布局数和光子数概率分布,用密度算符求平均的方法求反转布局数和平均光子数。
④将密度算符方程在相干态表象写出可以得到福克普朗克方程。
①具体到热库可以得到湮灭算符随时间的演化(指数衰减),同时光子数也是指数衰减并趋于热库中同频的光子数。
②通过关联函数的傅里叶变换可以得到腔场的光谱函数。
①在海森堡绘景中,得到体系和库湮灭算符随时间演化
②定义体系输入场和输出场的湮灭算符得到边界条件和输入输出频谱关系。
概率模型与条件随机场
1、概率模型
机器学习中的很多模型可以根据概率分布形式分为生成模型和判别模型,其中生成模型以输入输出的联合分布P(X,Y)为基础建模,如朴素贝叶斯、隐马尔可夫模型;判别模型以条件概率分布P(Y|X)为基础建模,如最大熵模型、条件随机场等。这几个模型之间有一定的关系,它们的关系如下:
其中,NB表示朴素贝叶斯,ME表示最大熵,HMM表示隐马尔科夫,CRF表示条件随机场。joint联合分布,conditional条件分布。single class输出单一类别,sequence输出序列。例如,朴素贝叶斯将输出y扩展成序列(y1,y2,,yn),就可以以此为基础构造HMM;在满足输入条件下的HMM可以扩展成CRF。
这里面,朴素贝叶斯假设最强 ,因为它要求所有输入特征之间条件独立,如P(y|x1,x2,,xn)=∏i=1nP(y|xi);这是一种为计算方便而做的近似假设,然而现实中基本不会有模型符合输入特征间的独立,因此以朴素贝叶斯建模一般会有精度损失。
隐马尔科夫模型进了一步,它考虑一定的变量相关性,如马尔科夫假设状态序列中,当前状态只与其前一个状态有关,如:
P(X,Y)=∏i=0nP(yi|yi−1P(xi|yi)
但是HMM只考虑了状态之间的邻接关系,没有考虑观测序列间的关系,条件随机场刚好弥补了这个缺陷。所以条件随机场是一个相对比较完善的模型,但代价是计算复杂性的提高。
2、概率图模型
上面讲到的概率模型可以用图的形式表示出来,称为概率图模型。概率图模型用图中结点表示随机变量,结点之间的边表示变量间的概率相关关系。
在概率图中,两结点没有边相连,说明两节点是条件独立的,比如P(a,b|c)=P(a|c)⋅P(b|c)。在概率图中,结点间全连接是不包含任何概率分布信息的,所以我们更关注的是哪些边是缺失的,这些缺失的边表示边连接的结点条件独立。
下图中的两个图是概率图的两种表示形式,一个是独立图,一个是因子图。通过条件独立的条件,可以将一个复杂的概率分布分解成简单的概率分布乘积,如下图中(a),联合概率分布P(x1,x2,y)=P(x1)⋅P(x2)⋅P(y|x1,x2)。
若定义因子,也称势函数Ψs为概率分布的分解因子,对任意概率图G=(V,E),有:
p(V)=∏sΨs(Vs)
其中,s表示随机变量构成的集合,Vs表示该集合中包含的变量。
则可以将P(x1,x2,y)写成P(x1,x2,y)=Ψ1⋅Ψ2⋅Ψ3,这里的Ψi分别与独立图中的概率对应。
概率图模型可大致分为两类:一类是有向图模型,表示变量间的依赖关系,也称为贝叶斯网;一类是无向图模型,表示变量间的相关关系,也称为马尔科夫网或马尔科夫随机场。
21 有向图模型
在有向图中,边表示了变量之间的一种依赖关系。联合分布概率可以写作是所有变量在在父节点条件下的概率乘积:
P(V)=∏i=1KP(vk|vnk)
如下图所示的隐马尔可夫有向图,联合概率可以写作:
P(x1,x2,x3,y1,y2,y3)=Ψ1(y1)⋅Ψ2(x1,y1)⋅Ψ3(x2,y2)⋅Ψ4(x3,y3)⋅Ψ5(y1,y2)⋅Ψ6(y2,y3)
22 无向图模型
在无向图模型中,有个团和最大团的概念,表示了变量之间的关系。团的意思是一些随机变量结点构成的子集中,两两结点都有边相连,如下图中(1,2)、(1,2,5)等;最大团表示结点构成的团中再添加任何一个新结点后都不会构成团,如(1,4,5)。在一些线性链结构的无向图,如线性链条件随机场中,最大团只考虑(yj−1,yj,x)。
像有向图的分解一样,无向图也可以分解,无向图是基于最大团进行分解,如下:
P(V)=1Z∏C∈CΨC(VC)
其中每个最大团对应一个势函数ΨC。是不是跟最大熵模型的形式很相似?因为最大熵模型也是一个无向图模型。像在最大熵模型中一样,Z是一个归一化因子,如下:
Z=∑V∏C∈CΨC(VC)
一般,势函数要求严格非负,所以在使用中会选择指数函数作为势函数。如下图的一个最大熵模型,可以写作:
P(y|x)=1Zλ(x)eλ1f1⋅eλ2f2⋅eλ3f3
有向图与无向图的一个主要区别在于概率分布的分解不同,在概率有向图中,分解因子是条件概率分布;在无向图中,分解因子可以是任意函数,无向图不需要说明变量间是如何关联的,而是将在一个团中的变量作为一个整体来看。
3、条件随机场
在前面,我们说可以把隐马尔科夫模型看作是对贝叶斯模型的序列化;类似地,我们可以把条件随机场看作是对最大熵模型的序列化。条件随机场并不要求线性序列,即它可以是任意结构的,通常我们使用较多的是线性链随机场,它可以看作是有条件的HMM(即加入了观测序列x的条件)。
条件随机场属于判别模型,即它要求出在观测序列x的条件下得到可能输出序列y的概率P(y|x)。
由上面的无向图分解公式
P(V)=1Z∏C∈CΨC(VC)
条件概率P(y|x)可以写作:
p(y|x)=p(x,y)p(x)
=p(x,y)∑y′p(y′,x)
=1Z∏C∈CΨC(xC,yC)1Z∑y′∏C∈CΨC(xC,yC)
=1Z(x)∏C∈CΨC(xC,yC)
其中,
Z(x)=∑y′∏C∈CΨC(xC,yC)
下面介绍一下常用的线性链条件随机场,
线性链CRFs是条件随机场中的一种特殊结构,与隐马尔科夫一样,输出形成一个线性序列,如下图:
根据上面的公式,其条件概率可以写作,
p(y|x)=1Z(x)∏j=1nΨj(x,y)
其中,n+1表示输出状态序列长度,n为势函数个数。
由图可知,状态yj与输入x和yj−1有关,特征函数可以写作:
f(yj−1,yj,x,j)
势函数:
Ψj(x,y)=exp(∑i=1mλifi(yj−1,yj,x,j))
进而,线性链CRFs的条件概率分布可以写作,
pλ(y|x)=1Zλ(x)exp(∑nj=1∑i=1mλifi(yj−1,yj,x,j))
其中,Zλ(x)是归一化因子,
从CNN到GCN的联系与区别——GCN从入门到精(fang)通(qi)
了解GCN(图卷积神经网络)之前,必须对离散卷积(具体说就是CNN中的卷积)有个清楚的认识。
如何通俗易懂地解释卷积? , 离散卷积本质就是一种加权求和。
如图1所示,CNN中的卷积本质上就是利用一个共享参数的卷积核, 通过计算中心像素点以及相邻像素点的加权求和构成feature map实现空间特征的提取 ,其中权重就是卷积核的值。
那么卷积核的值如何确定呢?实际上卷积核值的确定过程就是模型训练的过程:首先随机初始化卷积核的值,然后根据反向传播梯度下降不断优化(即不断更新卷积核的值)直到模型收敛,此时卷积核的值被确定。
卷积核的参数通过优化求出才能实现特征提取的作用,GCN的理论很大一部分工作就是为了引入可以优化的卷积参数。
注:这里的卷积是指深度学习(CNN)中的卷积,与数学中定义的卷积运算严格意义上是有区别的。可以参考该内容 卷积神经网络中的卷积与数学中卷积的区别
CNN在计算机视觉中具有广泛应用,对具有强大的特征提取能力。但需要注意的是: CNN处理的图像或者视频数据中的像素点(pixel)是排列很整齐的矩阵 (如图2所示,也就是很多论文中提到的Euclidean Structure)。
与之相对应,科学研究中还有很多 Non Euclidean Structure的数据,如图3所示,社交网络、信息网络中有很多类似的结构。
实际上,这样的网络结构(Non Euclidean Structure)就是图论中抽象意义上的拓扑图。
所以, Graph Convolutional Network中的Graph是指数学(图论)中的用顶点和边建立相应关系的拓扑图。
那么为什么要研究GCN?原因有三:
综上所述,GCN是要为除CV、NLP之外的任务提供一种处理、研究的模型。
GCN的本质目的是来提取不规则的拓扑图的空间特征 ,那么实现这个目标只有graph convolution这一种途径吗?当然不是,vertex domain(spatial domain)和spectral domain实现该目标是两种最主流的方式。
(1) vertex domain(spatial domain) 是非常直观的一种方式。顾名思义:提取拓扑图上的空间特征,那么就把每个顶点相邻的neighbors找出来。这里面蕴含的科学问题有二:
a、按照什么条件去找中心vertex的neighbors,也就是如何确定receptive field?
b、确定receptive field,按照什么方式处理包含不同数目neighbors的特征?
根据a,b两个问题设计算法,就可以实现目标了。推荐阅读这篇文章 Learning Convolutional Neural Networks for Graphs
图4是其中一张,可以看出大致的思路)。
这种方法主要的缺点如下:
c、每个顶点提取出来的neighbors不同,使得计算处理必须针对每个顶点
d、提取特征的效果可能没有卷积好
(2) spectral domain 就是GCN的理论基础了。这种思路就是希望借助图谱的理论来实现拓扑图上的卷积 *** 作。从整个研究的时间进程来看:首先研究GSP(graph signal processing)的学者定义了graph上的Fourier Transformation, 进而定义了graph上的convolution,最后与深度学习结合提出了Graph Convolutional Network。
认真读到这里,脑海中应该会浮现出一系列问题:
Q1 什么是Spectral graph theory?(解释待定)
Spectral graph theory 请参考,简单来说就是 借助于图的拉普拉斯矩阵的特征值和特征向量来研究图的性质 。
Q2 GCN为什么要利用Spectral graph theory?
这应该是看论文过程中读不懂的核心问题了,要理解这个问题需要大量的数学定义及推导,没有一定的数学功底难以驾驭(我也才疏学浅,很难回答好这个问题)。
所以,先绕过这个问题,来看Spectral graph实现了什么,再进行探究为什么?
Graph Fourier Transformation及Graph Convolution 的定义都用到图的拉普拉斯矩阵,那么首先来介绍一下拉普拉斯矩阵。
对于图 , 其Laplacian 矩阵的定义为 , 其中 是Laplacian矩阵, 是顶点的度矩阵(对角矩阵),对角线上元素依次为各个顶点的度, 是图的邻接矩阵。看图5的示例,就能很快知道Laplacian 矩阵的计算方法。
这里要说明的是: 常用的拉普拉斯矩阵实际有三种 :
不需要相关内容的读者可以略过此部分
其实维基本科对 Laplacian matrix 的定义上写得很清楚, 国内的一些介绍中只有第一种定义 。这让我在最初看文献的过程中感到一些的困惑,特意写下来,帮助大家避免再遇到类似的问题。
为什么GCN要用拉普拉斯矩阵?
拉普拉斯矩阵矩阵有很多良好的性质,这里写三点我感触到的和GCN有关之处
superbrother 拉普拉斯矩阵与拉普拉斯算子的关系
GCN的核心基于拉普拉斯矩阵的谱分解,文献中对于这部分内容没有讲解太多,初学者可能会遇到不少误区,所以先了解一下特征分解。
矩阵的谱分解,特征分解,对角化都是同一个概念 ( 特征分解_ )。
不是所有的矩阵都可以特征分解 ,其充要条件为n阶方阵存在n个 线性无关 的 特征向量
但是拉普拉斯矩阵都是半正定对称矩阵 (半正定矩阵本身就是对称矩阵, 半正定矩阵_
, 此处这样写为了和下面的性质对应,避免混淆),有如下三个性质:
由上可知,拉普拉斯矩阵一定可以谱分解,且分解后有特殊形式。
对于拉普拉斯矩阵其谱分解为:
其中 ,是单位特征向量组成的矩阵, 是列向量。 是n个特征值构成的对角矩阵。
由于 是正交矩阵,即
因为 (这是定义)
所以
进而这里的特征分解又可以写成:
把传统的傅立叶变换以及卷积迁移到Graph上来,核心就是把拉普拉斯算子的特征函数 变为Graph对应的拉普拉斯矩阵的特征向量。
参考论文 The Emerging Field of Signal Processing on Graphs
(a) Graph上的傅里叶变换
传统的傅立叶变换定义为
是信号 与基函数 的积分, 那么为什么要找 作为基函数呢?从数学上看, 是拉普拉斯算子的特征函数(满足特征方程), 就和特征值有关 。
广义的特征方程定义为
其中, (一个矩阵)是一种变换(对向量 变换), 是特征向量或者特征函数(无穷维的向量), 是特征值。
满足:
当然 就是变换 的特征函数 , 和特征值密切相关。
那么,可以联想了, 处理Graph问题的时候,用到拉普拉斯矩阵 (拉普拉斯矩阵就是拉普拉斯算子,想了解更多可以参考 Discrete Laplace operator ), 自然就去找拉普拉斯矩阵的特征向量了。
是拉普拉斯矩阵, 是其特征向量,自然满足下式
离散积分就是一种内积形式,仿照上述内容定义Graph的傅立叶变换
是Graph上的 维向量, 与Graph的顶点一一对应, 表示第 个特征向量的第 个分量。那么特征值(频率) 下的 的Graph傅立叶变换就是与 对应的特征向量 进行内积运算 。
注:上述的内积运算是在复数空间中定义的,所以采用了 ,也就是特征向量 的共轭。
利用矩阵乘法将Graph上的傅立叶变换推广到矩阵形式 :
即 在Graph上傅立叶变换的矩阵形式 为:
式中: 的定义与第五节中的相同
(b)Graph上的傅立叶逆变换(频域( )到时域( ))
类似地, 传统的傅立叶逆变换是对频率 求积分 :
迁移到Graph上变为对特征值 求和 :
利用矩阵乘法将Graph上的傅立叶变换推广到矩阵形式 :
即 在Graph上傅立叶逆变换的矩阵形式为:
式中: 的定义与第五节中的相同
(2)推广卷积
在上面的基础上,利用 卷积定理 类比来将卷积运算,推广到Graph上。
由卷积定理可知, 两个函数的卷积等于各个函数傅立叶变换的乘积的逆变换 ,即
将上述过程推广到Graph:
则有
存疑:可能是满足交换律?不确定
进一步得到
注:通过乘以 对等式右边做逆变换。
很多论文中的Graph卷积公式为:
式(2)中, 表示Hadamard product(哈达马积),对于两个维度相同的向量、矩阵、张量进行对应位置的逐元素乘积运算。
式(1)和式(2)是完全相同的。
(1)为什么拉普拉斯矩阵的特征向量可以作为傅里叶变换的基?
傅里叶变换一个本质理解就是: 把任意一个函数表示成了若干个正交函数(由sin,cos 构成)的线性组合。
那么: 为什么graph上任意的向量 都可以表示成这样的线性组合?
原因在于 是graph上 维空间中的 个线性无关的正交向量,由线性代数的知识可以知道: 维空间中 个线性无关的向量可以构成空间的一组基,而且拉普拉斯矩阵的特征向量还是一组正交基。
(2)怎么理解拉普拉斯矩阵的特征值表示频率?
在graph空间上无法可视化展示“频率”这个概念,那么从 特征方程 上来抽象理解。
将拉普拉斯矩阵 的 个非负实际特征值,从小到大排列为 ,而且最小的特征值 ,因为 维的全为1向量对应的特征值为0(这一句不太懂)。
从特征方程的数学理解来看:
在有Graph确定的 维空间中,越小的特征值 表明:拉普拉斯矩阵 其对应的基 上的分量、“信息”越少,那么当然就是可以忽略的低频部分了。
其实 图像压缩 就是这个原理, 把像素矩阵特征分解后,把小的特征值(低频部分)全部变成0,PCA降维也是同样的,把协方差矩阵特征分解后,按从大到小取出前K个特征值对应的特征向量作为新的“坐标轴”。
Graph Convolution的理论告一段落了,下面开始Graph Convolution Network
Deep learning 中的Graph Convolution直接看上去会和第6节推导出的图卷积公式有很大的不同,但是万变不离其宗,(1)式是推导的本源。
第1节的内容已经解释得很清楚:Deep learning 中的Convolution 就是要设计含有trainable共享参数的kernel,从(1)式看很直观:graph convolution中的卷积参数就是
Spectral Networks and Locally Connected Networks on Graphs 中简单粗暴地把 变成了卷积核 ,也就是:
(为避免混淆,本文中称 是卷积核, 的运算结果为卷积运算矩阵)
式(3)就是标准的第一代GCN中的layer了, 其中 是激活函数, ,就跟三层神经网络中的weight一样是任意的参数,通过初始化赋值然后利用误差反向传播进行调整, 就是graph上对应于每个顶点的feature vector(由数据集提取特征构成的向量)。
第一代的参数方法存在着一些弊端,主要在于:
(1) 每一次前向传播,都要计算 三者的矩阵乘积,特别是对于大规模的graph,计算的代价较高,也就是论文中, 的计算复杂度
(2) 卷积核不具有spatial localization(这个在第9节中进一步阐述)
(3) 卷积核需要 个参数
由于以上的缺点第二代的卷积核设计应运而生。
Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering ,把 巧妙设计成了 ,也就是:
上面的公式仿佛还什么都看不出来,下面利用矩阵乘法进行变换,来一探究竟。
进而可以导出:
小说明:
上述等式成立的原因是 ,其中
(4)式就变成了:
其中 是任意的参数,通过初始化赋值然后利用误差反向传播进行调整。
式(5)所设计的卷积核其有点在于:
(1)卷积核只有K个参数,一般K远小于n,参数的复杂度被大大降低了。
(2)矩阵变换后,神奇地发现不需要做特征分解了,直接用拉普拉斯矩阵L进行变换。然而由于要计算 ,计算复杂度还是
(3)卷积核具有很好的spatial localization,特别地,K就是卷积核的receptive field,也就是说每次卷积会将中心顶点K-hop neighbor上的feature进行加权求和,权系数就是
更直观地看, 就是对每个顶点上一阶neighbor的feature进行加权求和,如下图所示:
同理,K=2的情形如下图所示:
注: 上图只是以一个顶点作为实例,GCN每一次卷积对所有的顶点都完成了图示的 *** 作。
在第二代GCN中, 是 的矩阵,所以 的计算复杂度还是 , Wavelets on graphs via spectral graph theory 提出了利用Chebyshev多项式拟合卷积核的方法,来降低计算复杂度。卷积核 可以利用截断(truncated)的shifted Chebyshev多项式来逼近。 (这里本质上应该寻找Minimax(极小值) Polynomial Approximation, 但是作者说直接利用Chebyshev Polynomial的效果也很好)
其中 是Chebyshev多项式的系数, 是取 的Chebyshev多项式,进行这个shift变换的原因是Chebyshev多项式的输入要在[-1, 1]之间。
由Chebyshev多项式的性质,可以得到如下的递推公式
其中, 的定义同上,是 维的由每个顶点的特征构成的向量(当然,也可以是 的特征矩阵,这时每个顶点都有 个特征,但是 远小于 。
这个时候不难发现:式(6)的运算不再有矩阵乘积了,只需要计算矩阵与向量的乘积即可。计算一次 的复杂度是 , 是图中边的集合,则整个运算的复杂度是 。当graph是稀疏图的时候,计算加速尤为明显,这个时候复杂度远低于
上面的讲述是GCN最基础的思路,很多论文中的GCN结构是在上述思路的基础上进行了一些简单数学变换。理解了上述内容,就可以做到“万变不离其宗” 。
CNN中有两大核心思想:网络局部连接,卷积核参数共享 。
那么我们不禁会联想:这两点在GCN中是怎样的呢?以下图的graph结构为例来探究一下
(a)如果利用第一代GCN,根据式(3)卷积运算矩阵( )即为
这个时候,可以发现这个卷积核没有 local的性质,因为该卷积核得到的运算矩阵在所有位置上都有非0元素。以第一个顶点为例,如果考虑一阶local关系的话,那么卷积核中第一行应该只有[1,1],[1,2],[1,5]这三个位置的元素非0。 换句话说,这是一个global全连接的卷积核。
(b)如果是第二代GCN,根据式(5)当 K=1卷积运算矩阵即为
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)