1、.编号:河南大学 2014 届本科毕业论文Matlab 在固体物理中的应用论文作者姓名: 作 者 学 号: 1003618013 所 在 学 院: 所 学 专 业: 电子信息科学与技术 导师姓名职称: 论文完成时间: 2014 年 04 月 23 日 .目 录摘 要: 10 前言 11 固体物理的发展 .21.1 关于固体物理的知识 21.2 固体物理的新发展及应用 32 关于 MATLAB32.1 MATLAB 的基本知识 .32.2 MATLAB 的实例 .52.3 MATLAB 的优势 .63 紧束缚模型 .73.1 紧束缚模型中二维晶格等能面 74 倒格子 84.1 二维晶格的倒格子
2、84.2 体心立方倒格子 84.3 面心立方倒格子 94.3 简单六角晶系的倒格子. 95 MATLAB 对紧束缚模型及其倒格子的模拟仿真 .95.1 matlab 对倒格子的模拟仿真 .115.2 紧束缚模型中二维晶格的模拟仿真 176 结论 .19参考文献 20.MATLAB 在固体物理中的应用摘 要: 固体物理是从不同角度描述固体的结构和性质,是比较抽象的。MATLAB,flash ,Photoshop 等可以用来模拟其物理过程 ,所以本文将 matlab 应用固体物理的倒格子和紧束缚模型中将结果可视化。关键词: 固体物理 MATLAB 仿真 The application of mat
3、lab in solid physicsSolid state physics describes the structure and properties of solid from different angles, it is abstract.MATLAB, flash, photoshop, etc. Can be used to simulate the physical process, so this paper applies MATLAB to solid state physics and tight-binding model will be the result of
4、 grid visualization.Key words: Solid physics matlab imitate 0 前言固体物理是从原子,分子,电子等不同角度来研究粒子的运动,及固体物理的性质和微观结构。它与我们学习过的半导体物理学、量子力学、大学物理等都有紧密联系,而且是各学科间的桥梁。固体物理学很多都是建立在经典模型上的,因此它的内容是比较抽象的,而且也比较难理解的。现在随着可技术科学的飞速发展,许多计算机软件都可以应用在固体物理的模拟及其仿真方面。其中,MATLAB 的功能是非常强大的,因此,针对固体物理复杂的特点,我们可以用 MATLAB 软件使其物理过程可视化,也是它的结论更
5、加直观的呈现。1 固体物理的发展人们对固体物理的认识是逐步的。固体可以分为晶体和非晶体,现在人们主要研究的是晶体。1.1 关于固体物理的知识.1850 年布喇格导出了 7 大晶系 14 种布喇菲格子。1890 年费奥多罗夫,1891 年熊夫利,1895 年巴洛他们建立了晶体对称性的群理论。这都为固体物理学得发展提供了深远的影响。劳厄在 1912 年通过晶体 X 光衍射的实验,确定了单晶体的对称性,即晶体内原子的周期性排列的结构。但这个实验没有确定晶体的晶格常数,后来旋转单晶法可具体测定晶体的晶格常数。 。舒布尼科夫在 20 世纪 50 年代建立了磁有序晶体的对称群理论。原子结合成晶体时,原子的
6、外层电子要作重新分布。外层电子的不同分布产生了不同类型的结合力。不同类型的结合力,就会产生晶体结合的不同类型,主要有:共价结合,离子结合,金属结合,分子结合,氢键结合。结合力的共性:库仑力是原子间结合的动力,而且是长程力。晶格振动与晶体的热学性质。一维复式格子的振动可以得到长声学波和长光学波。晶格振动所形成的波,而且这种波的能量量子称为声子。它对固体的比热容和热导等性质起重要作用。在 1907 年。爱因斯坦用量子理论处理固体中原子的振动,他假设晶体中所有原子都以相同的频率做振动,他的这个假设非常简单,但是他忽略了谐振子之间的差异;1912 年德拜把格波作为弹性波来处理,在低温时,德拜热容模型与
7、实验相符。晶体的缺陷:原子绝对的按晶格的周期性排列的晶体是不存在的,实际的晶体都会存在一点缺陷,按缺陷的形态:有点缺陷,面缺陷,线缺陷。原子的热运动会造成点缺陷。在平衡时,缺陷的数目是一定的。而且缺陷的扩散不仅受晶格周期性影响,它还会发生复合现象。晶体中电子的能带理论。布洛赫和布里渊他们分别从不同角度研究了周期场中电子运动的基本特点,为固体电子的能带理论奠定了基础。在一定能量范围内准连续的能及组成的能带称为电子的本征能量。我们在学习一维晶格中的近自由电子模型的结论,我们可以得到电子在行进过程中受到起伏的势场的散射作用。相邻两个能带之间的能量范围内是不能有能量,称为禁带。1931 年,威尔逊利用
8、能带的特征以及泡利不相容原理提出来绝缘体与金属能带模型的区别,并说存在半导体,为以后半导体的发展提供了理论。电子是遵守费米统计的,价电子对金属热容量贡献很小的原因就是因为费米统计的约束。人们对金属的电导,热导等电子的输运特性的分析可以利用费.米统计和能带理论,而且从理论上解释了纯金属电阻率的实验规律。1.2 固体物理的新发展及应用随着现在科学技术的发展,为固体物理开拓出了新的研究领域。核物理技术,磁共振技术,材料制备的新技术等现代技术发展,都为固体物理提供了新的研究方向。固体物理学是微电子技术,能源技术,材料学,光电子技术等学科的基础。而且固体物理学的成就对生物物理学,化学物理学等方面也有影响
9、,并正在形成新的交叉领域。固体物理它比较难以理解,我们用 MATLAB 来模拟,可以使他更加直观。接下来就介绍一下 matlab。2 关于 MATLABMatlab 是 matrix 和 laboratory 两个单词的组合,是矩阵实验室。它运用非常广泛,可以进行矩阵运算,创建用户界面,还可以绘制函数等。它们主要运用于信号处理与检测,工程计算,信号检测等领域。Matlab 吸收了像 maple 等软件的的优势,因此它是一个强大的数学软件。因此本文将 matlab 应用于固体物理中的紧束缚模型中对其模拟及仿真。在模拟仿真之前我们应该先了解 matlab 的一些基本知识。2.1 matlab 的基
10、本知识MATLAB 它是一种交互式的以矩阵为基础的系统计算平台。它主要运用于科学和工程计算和复杂问题的可视化。它也标志着计算机语言向“智能化”方向发展。2.1.1 MATLAB 的联机帮助命令Help plotxyz 是显示有关三维作图的指令信息。 2.1.2 MATLAB 的 m 文件 1matlab 基础与实践教程我们在 MATLAB 窗口输入数据和命令进行计算时,当处理复杂问题和大量数据时就不方便。此时,就需要编辑 m 文件。Matlab 语句构成的程序存储成以 m 为扩展名的文件,然后再执行该程序文件,这就是程序文件模式。而且程序文件不能再指令窗口下建立因为指令窗口一次执行一行上的几个
11、语句或者一个语句。创建 m 文件,它是一个普通的文本文件,我们可以系统认可的文本文件编.辑器建立 m 文件。M 文件的语法与 c 语言类似,但也有不同。它只是简单的 ASCII 码文件,他在执行的过程中是逐行运行程序的,它是解释性的编程语言。M 文件包含两类:1、可调用的 m 文件,即函数文件;2、独立的 m 文件,即命令文件。MATLAB 中有自定义的函数文件,称它为内置函数文件。调用时,使用函数名并给出相应的入口出口参数即可。函数的 m 文件需要输入变量,返回输出变量。用户可以根据需要编辑自己的的 m 文件。可以像库函数一样方便调用,这样就扩大啦 MATLAB 的功能。M 文件有它的格式也
12、有特定的规则:格式: function 返回变量 =函数名(输入变量)注释说明语句段程序语句段规则:m 文件第一行必须以单词 function 作为开始,即Function=()M 文件它的文件名必须是.m程序中的变量都是局部变量,没有保存在空间中的变量只有在函数运行其间有效。命令文件是简单的 m 文件,它实际上是一串指令的集合。与在命令窗口逐行执行文件中的所有命令是一样的,并且没有输入输出参数。2.1.3 MATLAB 文件的类型数据文件.matMATLAB 中的 mat 文件是以标准的二进制格式保存的数据文件,可以将空间中有用的数据保存起来。Mat 文件它的生成和调用是有函数 load 和
13、 save 完成的。M 文件。Plot 是基本的二维绘图命令,Matlab 的二维绘图函数绝大部分是以 Plot 为基础的。函数 Plot 最基本的调用格式为: Plot(x,y)。引用 3其它二维绘图函数还有等值线的绘制,可以使用 Contouri 函数。其调用格式: contour(x,y,z).同时 MATLAB 还有三维绘制函数功能,函数为 Plot3,其调用格式为:Plot3(x,y,z,选项)要绘制三维表面图时,可以使用 SurfSEIPatch 数,调用格式分别为:Surf(x, y,z,c)Pateh(x,y,z ,c)Matlab 可以绘制很多函数。一个任务,Matlab 也
14、有多种方法、函数可以选择,这为我们的运用提供了方便2.2 matlab 的实例我们可以通过几个例子来看一下 MATLAB 的功能。例如:用 matlab 来绘制正弦函数 sinx 和余弦函数 cosx 的图像。x=1:40;y1=sin(pi*x/4);y2=cos(pi*x/8);Plot(x,y1, x,y2,c,r)执行结果如图 1 所示。图 1 正弦函数 sinx 和余弦函数 cosx 的图像例二:利用 for 循环求 1!+2!+3!+4!+5!的值。sum=0;for i=1:5pdr=1;.for k=1:ipdr=pdr*k;end这样可以在 MATLAB 中求出 sum 的值
15、。2.3 matlab 的优势Matlab 最大的特点就是简单和直接,而且运算功能强大。2.3.1 绘图功能方便MATLAB 有一系列的绘图命令,我们在绘制图形时只需要调用相应的绘图指令,然后在图形中标出图题等。MATLAB 它具有完备的图形处理功能,它可以将复杂的问题通过图形传递给我们,实现计算结果和编程的可视化。MATLAB 这种绘图功能是其他编程语言所不具有的。2.3.2 具有强大的数据处理功能MATLAB 和 maple,mathematica 它们并称为三大数学软件。由此可以得知它的运算功能很强大。它包含了大量计算算法。包括工程中用到的数学,运算函数等其它满足用户的各种所需要的计算。
16、它可以代替 C 语言和 C+等。若是在同样的情况下我们用 MATLAB 的编程的工作量远低于其他软件编程,它可以从最简单最基本的函数到傅里叶变换,矩阵等复杂的函数。线性方程的求解,微分方程的求解,傅里叶变换,工程中的优化问题以及其他初等函数运算,二维,三维数组操作,还有建模模拟仿真等我们都可以通过 MATLAB 强大的数据处理能力解决。2.3.3 简单比较好用Matlab 语言中最基本的就是函数。对于同一函数名,输入不同数目的变量或者输出变量的数目不同就代表着不同的含义,这样 MATLAB 的库函数功能功能就会变的非常丰富,而且也会减少所需要用的空间,这样就会使 MATLAB编写的 M 文件简
17、单,短小并且高效。开放式可扩充结构,用户可以根据自己的意愿随意的更改。因此 MATLAB 的应用越来越广泛。3 紧束缚模型为了在 MATLAB 模拟仿真时,可以更加容易理解,先了解几个固体物理的知识。在王矜奉固体物理教程 4的能带理论中包含紧束缚模型,在此可以简要分析紧束缚模型中二维晶格的等能面。.3.1 紧束缚模型中二维晶格的等能面等能面:K 空间内,电子的能量等于定值的的曲面我们称为等能面。对于自由电子,它的能量为 ,所以此时它的等能面是一些同心球面,2km而费米面是对应能量为 的等能面。0FE在一维近自由电子近似时,我们知道将势场看作是晶格的周期函数,而且便于计算将势场展开成傅立叶级数
18、likrlVrvKe在波矢空间内,布洛赫函数是倒格矢的周期函数,因此将布洛赫函数在波矢空间也展成傅立叶级数,即 1, niRknWrekrN对上式乘以 ,并对第一布里渊区波矢求和,得到mikreN,nikRnerr由布洛赫函数的平移特性可以知道 A, ,nikRn nTRkrrer故可得 ,knWN当晶体中原子的间距较大时,被束缚在原子附近的几率比远离原子的几率大,此时的行为与自由电子近似。此时取 ,即得,atnnrRkrR到零级近似 ,nikaterN结合薛定谔方程,并经一系列计算可以得到 s 态紧束缚电子的能带 nikRatSSsSEkCJe对于边长为 a 的二维正方晶格的情况,取坐标轴沿
19、正方形边长, 则最近邻的坐标应该为 ,由此可以计算出二维晶格的紧束缚模型能量:0.akJCEkyxSsatSS cos24 倒格子倒格子是由倒格矢基矢在空间平移形成的,那么重点就是怎么求解倒格子基矢。下面我们将要分别讨论二维晶格的倒格子,面心立方,体心立方晶格的倒格子以及简单六角晶格的倒格子。 54.1 二维晶格的倒格子对二维晶格的倒格子,我们可以把二维晶格正格子基矢记为:1ai2abj其中 a 代表惯用晶胞的边长, 代表正交单位基矢;由于在计算倒格子时,j根据公式需要有 设 ,因此计算晶胞的体积为:321,3k123Vaab由倒格基矢的计算公式我们可以得到二维晶格得倒格矢为:; 。12bia
20、2jb由倒格子基矢和正格子基矢对比我们可以知道二维晶格的倒格子仍然是二维晶格。4.2 体心立方的倒格子体心立方晶格的正格子基矢可以写为:; ; ;12aijk21aijk312aijk其中 a 是惯用晶胞的边长, , , 代表与 x,y,z 轴平行的单位基矢。i其中我们可以根据晶胞体积的计算公式得: 312Vaa根据倒格矢的计算公式我们可以得到体心立方基矢: ;12bjka; 。2bika32bija由 , , 我们可以知道体心立方晶格的倒格子是面心立方晶格。12.4.3 面心立方晶格的倒格子面心立方正格子的基矢可记为:; ; 12akj21aki312aji可由此可以计算原胞的体积: 。12
21、4V根据倒格基矢的计算公式我们可以得到倒格基矢:; ; 。12+bijka2+bijka3bijka根据以上公式可以得出面心立方晶格的倒格子是体心立方晶格。4.4 简单六角晶系的倒格子六角晶系正格子的基矢可记为:; ; 132aij213aij3ack根据正格子基矢我们可以求出原胞的体积 。212V根据倒格矢的计算公式,可以求出倒格基矢:, , .jiab321jiab32kcb我们得到了六角晶格的倒格子基矢,根据公式我们可以得到六角晶系的倒格子仍然是六角晶系。5 matlab 对紧束缚模型以及倒格子的模拟仿真5.1 matlab 对倒格子的模拟仿真5.1.1 对二维晶格倒格子的模拟仿真由上述
22、二维晶格倒格矢的公式。二维晶格的 MATLAB 程序如下:function HX()b=1;b1=(2*pi/a)*1,0,0;b2=(2*pi/b)*0,1,0;pd(1,1:2)=0,0,0;for dd=1:4 .H=size(pd,1);k=1;for i=1:Hfor j=1:2p1(j)=pd(i,j)+b1(j); endplot(pd(i,1),p1(1),pd(i,2),p1(2),ro);hold on;plot(pd(i,1),p1(1),pd(i,2),p1(2);hold on;pdt(k,1:2)=p1;k=k+1;for j=1:2p2(j)=pd(i,j)+b2
23、(j); endplot(pd(i,1),p2(1),pd(i,2),p2(2),ro);hold on;plot(pd(i,1),p2(1),pd(i,2),p2(2);hold on;pdt(k,1:2)=p2;k=k+1;endpd=pdt;endend执行上述程序,所得图像如图 2 所示。.图 2 二维晶格倒格子由图 2 可以得到二维晶格的倒格子仍然是二维晶格,只是二维晶格的边长不同。通过图 2 的仿真图,我们可以比较直观的看到结果,便于我们理解。5.1.2 体心立方晶格的倒格子体心立方晶格倒格子的 MATLAB 程序代码如下:function HX()a=1;a1=(2*pi/a)*
24、0,1,1;a2=(2*pi/a)*1,0,1;a3=(2*pi/a)*1,1,0;pd(1,1:3)=0,0,0;for dd=1:4 H=size(pd,1);k=1;for i=1:Hfor j=1:3p1(j)=pd(i,j)+a1(j); endplot3(pd(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3),ro);.hold on;plot3(pd(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3);hold on;pdt(k,1:3)=p1;k=k+1;for j=1:3p2(j)=pd(i,j)+a2(j); endpl
25、ot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3),ro);hold on;plot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3);hold on;pdt(k,1:3)=p2;k=k+1;for j=1:3p3(j)=pd(i,j)+a3(j); endplot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3),ro);hold on;plot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3);hold on;pdt(k,1:3)=p3;k=k
26、+1;endpd=pdt;end执行上述程序,所得图像如图 3 所示。.图 3 体心立方晶格的倒格子由图 3 可以得到体心立方晶格的倒格子是面心立方。图 3 比较直观的将其结果展示出来。5.1.3 面心立方晶格的倒格子面心立方晶格的倒格子 MATLAB 代码如下:function HX()b=1;b1=(2*pi/a)*-1,1,1;b2=(2*pi/a)*1,-1,1;b3=(2*pi/a)*1,1,-1;pd(1,1:3)=0,0,0;for dd=1:4 H=size(pd,1);k=1;for i=1:Hfor j=1:3.p1(j)=pd(i,j)+b1(j); endplot3(p
27、d(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3),ro);hold on;plot3(pd(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3);hold on;pdt(k,1:3)=p1;k=k+1;for j=1:3p2(j)=pd(i,j)+b2(j); endplot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3),ro);hold on;plot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3);hold on;pdt(k,1:3)=p2;k=k+1;fo
28、r j=1:3p3(j)=pd(i,j)+b3(j); endplot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3),ro);hold on;plot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3);hold on;pdt(k,1:3)=p3;k=k+1;endpd=pdt;endend执行上述程序,所得图像如图 4 所示。.图 4 面心立方晶格的倒格子由图 4 可以得到面心立方晶格的倒格子是体心立方。图 4 比较直观的将其结果展示出来。5.1.4 六角晶格晶格的倒格子function HX()b=1;b1=(2*p
29、i/a* )*1, ,0;3b2=(2*pi/a* )*-1, ,0;b3=(2*pi/c)*0,0,1;pd(1,1:3)=0,0,0;for dd=1:4 H=size(pd,1);k=1;for i=1:Hfor j=1:3p1(j)=pd(i,j)+b1(j); endplot3(pd(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3),ro);.hold on;plot3(pd(i,1),p1(1),pd(i,2),p1(2),pd(i,3),p1(3);hold on;pdt(k,1:3)=p1;k=k+1;for j=1:3p2(j)=pd(i,j)+b
30、2(j); endplot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3),ro);hold on;plot3(pd(i,1),p2(1),pd(i,2),p2(2),pd(i,3),p2(3);hold on;pdt(k,1:3)=p2;k=k+1;for j=1:3p3(j)=pd(i,j)+b3(j); endplot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3),ro);hold on;plot3(pd(i,1),p3(1),pd(i,2),p3(2),pd(i,3),p3(3);hold on;pdt(k,
31、1:3)=p3;k=k+1;endpd=pdt;endEnd执行上述程序,所得图像如图 5 所示。.图 5 六角晶格晶格的倒格子由图 5matlab 仿真图可以知道六角晶格的倒格子仍然是六角晶格,只是边长不同。5.2 紧束缚模型中二维晶格的模拟仿真由前边介绍的内容,我们得到二维晶格的能量 yxvyxdxyEatsatats ,0 由紧束缚模型能量公式可以得到能带宽度为 8E。取能带底部能量的值为0。 EatsatatSats ,1 yxvyxyxd tttst2 同 一样, 一般大于零。令 , , 依次为中心原子 S 态波函数与1E21最近邻及次紧邻原子 S 态波函数的交叠的能量积分。我们可以
32、通过 matlab 来完成其仿真图。二维晶格紧束缚能量等能面的 matlab 程序如下:# define EN( n, kx, ky) ( 01 5/ n+ 01 5- 01 25* ( cos ( kx) +cos( ky) ) - 01 5/ n* cos .(kx ) * cos( ky) )# define coskx( E, n, ky) ( ( 4* n+ 4- E- 2* n* cos( ky) ) /( 2* n+ 4* cos( ky) ) )# define cosky( E, n, kx ) ( ( 4 * n + 4 - E - 2 * n * cos( kx ) )
33、/ ( 2* n+ 4* cos( kx) ) )# define pi 31 14159265int i range; float fn; void draw ( float e)int x, y;float kx, ky, coskx, cosky;bool bfirst = true;for( x= 0; x = i range; x+ + )kx = x* pi/ i range;cosky= cosky( e, fn, kx) ;if( fabs( cosky) = 11 0) ky= a cos( cosky) ;y= ky* i range/ pi;if( bfirst) bfi
34、rst= false;move to( x, y) ;elseline to( x, y) ;执行上述程序,所得图像如图 6 所示。.图 6 二维晶格紧束缚能量等能面图 6 可以得到二维晶格紧束缚模型等能面。由以上六副仿真图我们可以比较直观的看到实验结果,MATLAB 仿真将其结果比较直观的呈现在我们面前。6 结论固体物理学是我们学习物理方面一门非常重要的学科,它里边的研究方法对其他其它学科的学习也有指导意义。我们用 MATLAB 在固体物理学中的一些实验的模拟与仿真可以看出,它可以将比较抽象的结论或者实验比较直观的呈现在我们面前,有利于我们对其学习与认识,也加深了我对所学知识的了解。由 MA
35、TLAB 对固体物理学中倒格子和紧束缚模型的模拟,我们可以知道:二维晶格的倒格子仍然是二维晶格,只是坐标位置有了变化;体心立方晶格的倒格子是面心立方晶格,面心立方晶格的倒格子是体心立方晶格。六角晶格的原胞内包含两个原子,倒格子仍然是六角晶系。我们也可以通过 matlab 对紧束缚模型的二维晶格模拟与仿真,得到它的图.形,便于我们对紧束缚模型和等能面的学习,也进一步了解了二维晶格的等能面。因此我们在运用 matlab 时,不仅让我们对已经学过的固体物理学知识有了更深一步的了解,也学习了 matlab。并且可以看出,它可以将比较复杂难以理解的知识较为直观的方式展现在我们面前。因此,matlab 的
36、学习是十分必要和有用的。通过这次毕业论文的写作,让我知道了计算机语言的运用是十分重要的,也认识到它不仅仅是一门学科,且贯穿于整个学科之中,对我们学习以及理解其它学科起着重要的作用。强大的函数库和众多的工具箱是 matlab 所具有的,也拥有强大的数据处理功能,它对我们今后的学习,工作都是很重要的,通过本次 Matlab 和固体物理的结合,也让我意识到现在的在信息技术是如此发达的,各个学科已经不是相互独立的,而是和一个甚至多个学科相融合。而计算机软件的学习是最基础的,只有很好的掌握一门计算机语言,才能在我们以后的学习中很好的运用。参考文献1 刘超,MATLAB 基础与实践教程,机械工业出版社,2 张德丰,雷小平,详解 matlab 图形绘制技术,电子工业出版社3 c 基泰尔,固体物理导论,北京:化学工业出版社4 2011 王矜奉,固体物理教程,山东大学出版社5 穆尔,MATLAB 实用教程,电子工业出版社, 2010.6 韩汝芬,固体物理学,中国高等教育出版社7 楼顺天,陈生潭,雷虎民,matlab 程序设计语言,西安电子科技大学出版社。8 黄昆,固体物理学,北京大学出版社