基于Python的网页版物理实验快速建设技术

2016-11-17 02:17宫薇薇祝继常
大学物理实验 2016年5期
关键词:大学物理网页代码

宫薇薇,祝继常,韩 煦

(中国铁道科学研究院 运输及经济研究所,北京 100081)



基于Python的网页版物理实验快速建设技术

宫薇薇,祝继常,韩 煦

(中国铁道科学研究院 运输及经济研究所,北京 100081)

如何使用科学计算软件自动与数据库进行交互,实现网页版实验结果的快速输出,共享实验结果并应用于教学工作是大学物理实验领域核心和热点的关注问题。一直探索使用Matlab解决上述问题,但是其Complier二十几万的商业使用费用,使得科学计算函数与数据库通讯和基于Java的网页开发方案有始无终。然而,Python多领域大规模的函数包、基于网页开发的免费、公开、快捷的框架设计快速、有效并轻量级地解决了上述问题。本文在介绍Python科学计算语言,比较Matlab、Python进行网页版实验的技术框架的基础上,完成实验数据的数据读取、科学计算函数库的使用、网页版实验结果的生成,并以光学物理实验劈尖的等厚干涉条纹实验为例完成网页版物理实验的建设。通过本文可以帮助具备Matlab基础的科学实验者,快速实现物理实验的网页版输出。

实验数据;Python;网页生成

Python由Guido van Rossum于20世纪90年代编写,是一种面向对象的解释型语言,功能强大、简单易学、完全免费。2014年,已经成为美国大学计算机科学系入门课程最受欢迎的编程语言[1],被著名的YouTube、Dropbox、美国银行等诸多网站所使用。适合每个人甚至是青少年学习和使用。首先,Python具有丰富的扩展库,能够轻量级地完成各种高级任务,例如C语言要写1 000行代码,Java只需要写100行,而Python可能只要20行[2]。其次,在科学计算领域,拥有数据快速处理Numpy、Pandas,数值计算库Scipy,符号运算库Sympy扩展库,图表输出库Matplotlib,Web集成库Ftplib、Httplib、Urllib,Web图表库Bokeh、Mpld[3]。最后,其安装十分简单,推荐Anaconda3,直接从其官网下载相应的版本进行安装即可,不需要配置任何环境变量。与Matlab相比Python科学计算库基本能够覆盖其函数,而且可以使用SMOP[4]进行Matlab与Python之间的代码转化。安装开发环境Anaconda,并使用PyCharm开发工具进行编译器Anaconda Python.exe的调用(图1),即可进行网页版物理实验的快速搭建。

图1 编程环境安装

本文在比较Matlab、Python进行网页版实验的技术框架的基础上,以光学物理实验劈尖的等厚干涉条纹实验为例,完成实验数据的数据读取、科学计算函数库的使用、网页版实验结果的生成。

1 技术构架比较

矩阵计算和多领域的算法库是Matlab科学计算软件的核心,它所提供的大量函数库为科研工作者进行专业领域实验提供了巨大的方便,但是如果与数据库交互,实现网页版的结果推送,需要实验设计者掌握较多的计算机技能。两者的开发框架差别如图2所示,Matlab无法直接与数据库或者网页直接通讯,需要借助第三方语言,以Java为例,通过Matlab Complier与Java通讯然后通过JSP书写Html代码生成相应的网页,与Database数据库的通讯也需要通过Java。

图2 Matlab开发技术框架

Matlab方案存在两个问题:其一、第三方语言Java对于非计算机专业人士很难入门,其二、Matlab JDK和Comlier的费用较高。然而,这两个问题都可以通过基于Python的开发框架有效地解决(图3),通过Python的自身扩展包即可完成所有的功能,通过Numpy/Pandas/Scipy替代Matlab矩阵科学计算,MySQLDB库进行与数据库的通讯,Matplotlib进行输出结果的展示。最重要的一点是不需要书写任何的Html代码,通过调用Mpld3直接将Matplotlib数据结果转化为网页形式进行输出。

图3 Python开发技术框架

2 实验数据的读取

实验数据的读入是物理实验建立的第一步,在数据量较小的情况是,可以采用直接为变量赋值的方式。如果输入的数据量超大,可以使用cx_Oracle、MySQLDB读取Oracle或者Mysql数据库方式。但是由于数据库处理对计算机技能要求较高,推荐采用Excel进行数据存储,通过xlrd函数进行读取,可以吸取上述两种方式的优点,易于存储、方便修改。

以《Matlab可视化大学物流实验》中的7.2劈尖的等厚干涉条纹实验[5]为例进行网页形式python实验的编写。首先引入需要使用的库,变量赋值的代码如下:

importnumpy as np

import math

importmatplotlib.pyplot as plt,mpld3

lamb=np.array([750*1e-9,540*1e-9,440*1e-9])

n = 1.5

k = 10

dx = 0.002

xm = k * dx

x = np.linspace(0,xm,10)

theta = lamb[0]/2/n/dx

e = np.zeros(10,np.float)

np.multiply(x,math.tan(theta),e)

pi = 3.1416

如果使用excel存储和读入,只需引入xlrd库,然后用open函数进行打开,具体使用数据参看文献[6]。

importxlrd

data= xlrd.open_workbook('文件名')

3 科学计算函数库的使用

数据引入后,需要进行数据的处理,Matlab所使用的函数,可以在Numpy、Pandas、Scipy、Sympy中进行查找,也可以通过smop[7]库进行代码的直接转化。劈尖的等厚干涉条纹实验实验的转换对应的代码如下:

defgete(lamb):

c = 2*n*e/lamb

e1 = np.zeros(10,np.float)

fori in range(0,10,1):

e1[i] = math.cos(pi * (c[i] + 0.5))

e1[i] = e1[i]*e1[i]

return e1

M3 = np.zeros((3,10),np.float)

i1 = gete(lamb[0])

M = np.zeros((3,10),np.float)

M[0,:] = i1

fig = plt.figure()

ax = fig.add_subplot(221)

ax.imshow(M)

i2 = gete(lamb[1])

M1= np.zeros((3,10),np.float)

M1[1,:] = i2

ax = fig.add_subplot(222)

ax.imshow(M1)

i3 = gete(lamb[2])

M2= np.zeros((3,10),np.float)

M2[2,:] = i3

ax = fig.add_subplot(223)

ax.imshow(M2)

M2= np.zeros((3,10),np.float)

M3[0,:] = i1

M3[1,:] = i2

M3[2,:] = i3

ax = fig.add_subplot(224)

ax.imshow(M3)

4 网页版实验结果的生成

关于结果的现实,Matlab和Python的图表输出函数比较相似,均使用subplot函数。然而,Python的mpld3[8]库,为Matplotlib的网页输出提供了极大的方便,以基本的线性图为例,代码及运行结果如图4所示。

import matplotlib.pyplot as plt,mpld3

plt.plot([3,1,4,1,5],'ks-',mec='w',mew=5,ms=20)

mpld3.show()

图4 mpld3示例网页输出

如果将结果使用mpld3.show()输出,其图标就会自动生成网页。不许要实验者了解任何关于网页编程的知识。因此,在第三步的数据处理结束后加入该语句即可,运行结果如图5所示[9-12]。

图5 mpld3实验结果网页输出

5 结 论

Python是否能够替代Matlab作为网络的热点话题争论不休,就大量函数库和长期的应用积累来看,Python不能够完全替代Matlab。但如果从扩展开发和简便轻量来看Python有着免费、开源、轻量的先天优势。Python多样的科学计算库,基于网页的图表化输出,为物理实验的网页编程,共享实验结果提供了有效的工具。本文所编制的代码虽然与Matlab输出的图表样式有所不同,但能够获得源代码相同的数据结果输出。因此,Python是科学式样工作者进行大学物理实验Web扩展开发的更有效的利器。

[1] http://cacm.acm.org/blogs/blog-cacm/176450-python -is-now-the-most-popular-introductory-teaching- language-at-top-us-universities/fulltext?utm_source=ourjs.com

[2] http://www.liaoxuefeng.com/wiki/001374738125095c955

c1e6d8bb493182103fac9270762a000.

[3] https://docs.continuum.io/anaconda/index

[4] https://pypi.python.org/pypi/smop

[5] 周群益.Matlab可视化大学物理实验.清华大学出版社,2010:259-260.

[6] http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html

[7] https://pypi.python.org/pypi/smop/0.22

[8] http://mpld3.github.io/

[9] 韩敬,钟方川,李林.Matlab在大学物理实验数据处理中的应用[J].大学物理实验,2008,21(1):88-90.

[10] 姚琴芬.Matlab语言在物理实验数据处理中的应用[J].大学物理实验,2011,24(6):52-54.

[11] 岳鹏,程敏熙.用MatLab曲线拟合工具箱处理物理实验数据[J].大学物理实验,2014(5):93-96.

[12] 宫薇薇.基于Matlab数据库工具箱的实验数据自动抽取及应用[J].大学物理实验,2015(2):96-99.

Rapid Construction Technology of Web Page Physical Experiment Based on Python

GONG Wei-wei,ZHU Ji-chang,HAN Xu

(Transport and Economic Research Institute,China Academy of Railway Sciences,Beijing 100081)

How to use scientific calculation software to interact with the data base automatically,apply the web version of the experimental results in a fast way,share the results and application is a core and hot problem gaining concerns in the university physics experiment field.It is tried hard to solve the problem via Matlab,but the complier,which costs tens of thousands commercially,makes the scientific computing function and database communication based on Java Web development scheme die.However,Python with multi domain large-scale packages,based on web development of free,open,fast design frame,effective and lightweight solves this problem.This paper introduced the python scientific calculation language,compare the framework between MATLAB and python,how to do the variable assignment,use the scientific computing function library and generate the web version results using the optical physics experimental split tip of the equal thickness interference fringe experiment as an example.So this paper can help the Matlab based science researchers to apply the rapid construction technology of web page physical experiment in Python.

experimental data;Python;web page program

2016-05-20

中国铁道科学研究院基金(2014YJ099)、(2015YJ080)

1007-2934(2016)05-0114-04

O 4-39

A DOI:10.14139/j.cnki.cn22-1228.2016.005.029

猜你喜欢
大学物理网页代码
基于HTML5与CSS3的网页设计技术研究
创世代码
创世代码
创世代码
创世代码
大学物理实验中热电偶冷端补偿电路的应用
基于CSS的网页导航栏的设计
基于HTML5静态网页设计
基于URL和网页类型的网页信息采集研究
小质量恒星形成理论中的大学物理知识浅析