Matlab语言在化学中的应用摘要:通过三个具体实例介绍Matlab语言在化学中的应用。说明在数值计算方面Matlab语言有着比目前流行的高级语言fortran、pascal、c无法比拟的强大功能,同时也介绍了Matlab语言的其他功能。化学工作者只要掌握Matlab语言,即使不懂其它的高级程序设计语言,完全可以设计出功能强大,界面优美,稳定可靠的高质量的程序。Matlab语言的首创者CleveMoler在数值分析,特别是在数值线性代数的领域中很有影响,他参与编写了数值分析领域一些著名的著作和两个重要的Fortran程序EISPACK和LINPACK。他曾在密西根大学、斯坦福大学和新墨西哥大学任数学与计算机科学教授。1980年前后,当时的新墨西哥大学计算机系主任Moler在讲授线性代数课程时,发现了用其他高级语言编程极为不便,便构思并开发了Matlab(MatriXLaboratory,即矩阵实验室),这一软件利用了当时数值线性代数领域最高水平的EISPACK和LINPACK两大软件包中可靠的子程序,用Fortran语言编写了集命令翻译、科学计算于一身的一套交互式软件系统。所谓交互式语言,是指人们给出一条命令,立即就可以得出该命令的结果。该语言无需像C和Fortran语言那样,首先要求使用者去编写源程序,然后对之进行编译、连接,最终形成可执行文件。这无疑会给使用者带来了极大的方便。早期的MATLAB是用Fortran语言编写的,只能作矩阵运算;绘图也只能用极其原始的方法,即用星号描点的形式画图;内部函数也只提供了几十个。但即使其当时的功能十分简单,当它作为免费软件出现以来,还是吸引了大批的使用者。近年来,计算机在化学中的应用有了长足的进步。从宏观的数据处理到微观层次的结构计算,从仪器的实时控制到化学信息检索,计算机都发挥者越来越强大的不可替代的作用。现在,不但是理论化学家,就是一般的化学工作者要想在教学科研中做一些实实在在的工作,离开计算机是无法想象的。选择合适的程序设计语言和数值处理软件包,化学工作者来说,是至关重要的。目前,人们普遍采用的语言是FORTRAN、PASCAL、C等高级语言及一些办公自动化软件和数值处理软件,如Excel、Origin等,这无疑是目前化学工作者迫切需要掌握的计算机软件知识。然而,应当指出,要在教学特别是在一些较复杂的科研问题中编写一个完整的程序,决不是一件轻而易举的事,尤其是当程序中需要较多的数值计算时,用高级语言编写程序,涉及到要选择合适的算法,和编写冗长的语言代码,键入和调试。即使有现成的标准子程序可供调用,这仍是一个复杂的理论性经验性技巧性很强的工作。尤其当涉及到有关矩阵运算时,编程会非常麻烦。而目前的办公自动化软件和数值处理软件又不全能满足这方面的要求。寻求一种功能强大,编程简单而适合化学工作者知识结构(比如,专门的数学知识和计算机知识相对较弱)的高级语言,一直是许多化学工作者梦寐以求的事情。近年来,Matlab语言的出现,期望给化学工作者带来福音,可为化学工作者提供强大的易学的程序设计语言,满足化学工作者在教学和科研中所遇到的各种问题。Matlab是Mathworks公司于1982年推出的一套高性能的数值计算和可视化软件,目前已推出5.2版。它原是著名的数值代数专家CleveMoler博士在讲授线性代数课程时构思开发的一种语言,原文是MAtriXLaboratory(矩阵实验室),集数值分析,矩阵计算,信号处理和图形显示于一体,构成了一个方便的界面友好的用户环境。目前,Matlab已被IEEE评为公认的最优秀科技应用软件。在我国自动控制界已推广使用这种语言,并有编著问世[1-2]。Matlab语言有三大特点:一是功能强大,包括数值计算和符号计算,计算结果和编程可视化,数学和文字统一处理,二是界面友好,语言自然。Matlab以复数矩阵为计算单元,指令表达与标准的教科书的数学表达式相近。三是开放性强。MATLAB有很好的可扩充性,可将其当作一种更高级的语言去使用。事实上,Matlab更强大的功能还表现在其有大量的工具箱(ToolBoX),如:控制系统,神经网络,数值模拟,统计分析,及偏微分方程等工具箱,可方便科技工作者在更专门领域的应用。目前,我国的化学工作者对该语言还相当陌生,其在化学中的应用很少人研究。本文用Matlab语言编写了一个化学中的例子,并和其它语言所编程序进行对比。尽管这些例子相对简单,不足以体现Matlab的特色于万一。但我们仍可从中领悟Matlab的强大功能和独特魅力。至于内容丰富,功能异常强大的工具箱在化学中的应用。Matlab应用实例在混和物组分分析中的应用[3]若有一个硝基苯,苯胺,氨基丙酮,乙醇四种化合物的混合物其分析结果为(质量百分数)CHON57.787.9211.2323.09求混合物中四种化合物的含量解:硝基苯,苯胺,氨基丙酮,乙醇的化学式为C6H5NO2,C6H7N,C3H7NO,C2H6O,化合物的分子量依次为mw(j)(j=1,2,3,4),元素C,H,N,O的原子量依次为aw[i](i=1,2,3,4)。元素i在化合物中的原子个数为an[i,j],化合物j在混合物中的含量分别为X[j],元素i在混合物的含量为Xb[i],则有下列方程∑4𝑗=1(an[i,j]*aw[i]/mw[j])*X(j)=Xb[i],i=1,2,3,4.这是以X(j)为未知数的四元线性方程组设:A=an][i,j]*aw[i]/mw[j],i=1,2,3,4.j=1,2,3,4.X=X(j),j=1,2,3,4.则B=Xb[i],i=1,2,3,4。上述方程可变为矩阵形式AX=B下面用MATLAB语言直接解矩阵方程B=[0。5778;0。0792;0.1123;0.2309]X=A\B运行后可见只需要短短几句,便可求出结果.本题用PASICA语言编写的程序如下constn=4aw:array[1.n]ofreal=(12.011,1.008,14.07,16.00);mw:array[1.n]ofreal=(123.1,93.13,73.10,46.07);Xb:array[1..n]ofreal=(0.5778,0.0792,0.1123,0.2309);an:array[1..n,1..n]ofinteger=((6,6,3,2,),(5,7,7,6,),(1,1,1,0),(2,0,1,1));typearrl=array[1..n,1..n+1]ofreal;arr2=array[1..n]ofreal;vara:arrl;X:arr2;I,j:integer;Procedurebeginfori:=1tondobeginforj:=1tondoa[I,j]:=an[I,j]*aw[I]/mw[j];a[I,n+1]:=Xb[i];end;gauss(n,a,X);resdlnend.其中主程序用了十六句,程序需要调用四十个语句的GAUSS子程序(编码略去),运行结果如下X1=0.3949(硝基苯含量)X2=0.1500(苯胺含量)X3=0.2312(氨基乙酸含量)X4=0.2236(乙醇含量)本文所举例子,主要涉及Matlab语言在解线性方程组和数值积分方面的应用,这是化学工作者在科研教学中最常遇见的,从例题中可以看出,Matlab语言在这方面的强大功能是FORTRAN,PASCAL和C等高级语言所无法比拟的,只要具备一般的高等数学知识,便可以轻而易举的用Matlab解决这些问题,并不需要知道计算的“底层”细节,而其他高级语言解决如此简单的问题却要繁琐得多。事实上Matlab语言具有多种功能,使得它在各行各业的应用越来越广泛。Matlab已不仅仅是“矩阵实验室”了,它已经成为全新的计算机高级语言。Matlab几乎可以轻易地再现FORTRAN,PASCAL或C语言的全部功能,然而,Matlab语言的数值计算功能,符号计算功能,数据的可视化功能,数据图形文字统一处理功能和建模仿真可视化功能是任何高级语言无以伦比的。所以,对于化学工作者来说,即使不懂其他高级的程序设计语言,也照样可以设计出功能强大,界面优美,稳定可靠的高质量程序,且开发周期将大大缩短。参考文献[1]薛定宇.控制系统计算机辅助设计——Matlab语言及应用[M].北京:清华大学出版社[2]楼顺天.Matlab程序设计语言[M].西安:西安电子科技大学出版社[3]刘满仓,张瑞生.化学专业计算机基础[M].兰州:兰州大学出版社