鮑聰 孫祥娥 王文松 郭益鳳 李文婷
關(guān)鍵詞: COM; Matlab; Com Builder; 虛擬演示; 直觀顯示; 窗體屬性; 維數(shù)轉(zhuǎn)變
中圖分類號: TN915.5?34; TP391.9 ? ? ? ? ? ? 文獻(xiàn)標(biāo)識碼: A ? ? ? ? ? ? ? ? ? ?文章編號: 1004?373X(2019)02?0089?05
Virtual demonstration platform of Com Builder under COM object
BAO Cong, SUN Xiange, WANG Wensong, GUO Yifeng, LI Wenting
(Oil and Gas Signal and Information Processing Research Center, School of Electronic Information, Yangtze University, Jingzhou 434023, China)
Abstract: The traditional demonstrational Matlab graphic windows using CORBA and JNI technologies has many disadvantages, while the virtual demonstration of Com Builder under the COM object can make the Matlab graphic window display independently and visually, and retain the original window attributes, such as acquirement of horizontal and vertical coordinates of a point, graph scaling, and dimension change, and setting of line and window attribute. Its key technology is to apply the Com Builder under the COM object to convert the M file in the Matlab into the Java class, and utilize the WebFigure tags in JSP to realize the virtual demonstration function. Combining with the instance demonstration, the superiority of the virtual demonstration over the traditional demonstration and the feasibility of the technology were verified. The results show that the virtual demonstration can make students deepen the graphic effect analysis of relevant knowledge points and the understanding of relevant concepts and theories in the class.
Keywords: COM; Matlab; Com Builder; virtual demonstration; visual display; window attribute; dimension variation
Com Builder也可叫作Matlab Builder for Java[1?2],其能使程序設(shè)計(jì)的流程更加靈活,替代了傳統(tǒng)的通過古老CGI [3]方式工作的Matlab Web Server組件[4]。之前所研究的演示主要實(shí)現(xiàn)了圖形的網(wǎng)頁端的顯示,大多采用CORBA,JNI技術(shù)實(shí)現(xiàn)圖形嵌套于網(wǎng)頁端顯示,而應(yīng)用COM對象下Com Builder技術(shù)設(shè)計(jì)的虛擬演示平臺,實(shí)現(xiàn)了圖形窗體非嵌套于網(wǎng)頁而從網(wǎng)頁端彈出、能直接獲取某點(diǎn)的對應(yīng)值、修改背景色彩、圖形的放大和縮小以及旋轉(zhuǎn),二維圖形轉(zhuǎn)變?yōu)槿S立體圖,以及保留了原有的窗體屬性及一系列的可編輯等功能。以驗(yàn)證周期信號的簡潔型傅里葉級數(shù)為例,證明Com Builder技術(shù)的可實(shí)現(xiàn)性以及與前人相比所增加的一系列功能,用于開發(fā)與Matlab提供支持的相關(guān)課程的虛擬演示平臺[5]。
針對Java程序訪問Matlab,Com Builder方法比傳統(tǒng)CORBA,JNI具有許多優(yōu)點(diǎn),具體論證如下:
1) 傳統(tǒng)技術(shù)。CORBA指的是公共對象代理結(jié)構(gòu),CORBA通過橋梁C++ ,即可完成Java對Matlab的方法調(diào)用[6]。JNI是指本地編程接口,Java通過調(diào)用Matlab Engine(Matlab引擎函數(shù))來實(shí)現(xiàn)對Matlab的訪問[7?8]。
2) Com Builder技術(shù)訪問。利用Matlab中的Com Builder完成從Matlab算法到COM[9]的轉(zhuǎn)換,生成COM對象,從而使基于COM+的Java應(yīng)用程序能夠使用COM對象。其訪問流程是在Matlab的編輯器中編寫好要使用的M文件,將Matlab環(huán)境下的M文件轉(zhuǎn)換生成Java環(huán)境中的jar[10]文件,Java應(yīng)用COM對象使Java調(diào)用Matlab,從而這些被轉(zhuǎn)換的jar文件可以被集成到Java 程序開發(fā)中,實(shí)現(xiàn)了混合編程[11]。然而這些被集成的程序可以部署到裝有免費(fèi)Matlab Compiler Runtime (MCR)的Web服務(wù)器中,故無需安裝Matlab。
由于本方法是基于Java Web,在Web應(yīng)用中使用WebFigure能夠在網(wǎng)頁中調(diào)用Matlab環(huán)境下的圖形,所以客戶端只需使用標(biāo)準(zhǔn)的Internet 瀏覽器就可以展現(xiàn)和操作實(shí)驗(yàn)的全過程,具體訪問過程見圖1。
因此與傳統(tǒng)的方法相比,利用Com Builder技術(shù)訪問,更易實(shí)現(xiàn)Java調(diào)用Matlab,在提高運(yùn)算速度的同時可操作性也明顯增強(qiáng)。
2.1 ?平臺的運(yùn)行環(huán)境及流程
在整個流程中,采用Win64位的Windows 10操作系統(tǒng)、Java(jdk1.7.0_67)、Eclipse、Matlab 2016b,檢查Java運(yùn)行環(huán)境和Matlab環(huán)境,使Matlab能正確讀取環(huán)境變量Java_HOME的值,保證環(huán)境變量設(shè)置成功,使Java運(yùn)行環(huán)境和Matlab環(huán)境相兼容,從而完成Matlab Builderfor Java的環(huán)境配置,為虛擬平臺有條不紊的進(jìn)行打下基礎(chǔ),具體運(yùn)行流程見圖2。
2.2 ?編寫相關(guān)M文件
開發(fā)者需要編寫與演示相關(guān)的Matlab的M文件,編寫可以展示相關(guān)的原理、概念,以及理論的Matlab程序,M文件主要用于處理輸入頁面中用戶請求的各種變量、函數(shù)及數(shù)據(jù)等。其中M文件中涉及的數(shù)據(jù)主要有兩部分:一部分是從輸入頁面提取出來的數(shù)據(jù);另一部分是經(jīng)過運(yùn)算后反饋給用戶的數(shù)據(jù)[1] ,以新建M文件Waving.m為例。
2.3 ?將M文件打包生成jar文件
在Matlab的命令窗口輸入“deploytool”命令,啟動Deployment Project對話框,輸入編譯工程名MathplotWaving.prj,并在Type列表框中選擇編譯類型為Java Package,在頁面中,添加類和編寫好的M文件,命名文件名為Waving,如圖3所示,通過Package完成編譯后,即可在編譯項(xiàng)目所在的目錄打包兩個文件夾: for_testing文件夾的作用是存放編譯好的Waving.jar文件;for_redistribution _files_only文件夾內(nèi)放置的是Java 包中類的代碼文件。
2.4 ?Java編程實(shí)現(xiàn)Matlab程序在網(wǎng)頁端的運(yùn)行
客戶端采用JSP作為視圖來顯示用戶請求的響應(yīng)結(jié)果,Matlab 生成的圖形通過Servlet訪問獲得,而JSP和Servlet兩者之間的通信連接是采用Servlet中的session實(shí)現(xiàn)。實(shí)現(xiàn)該模塊功能的具體步驟如下。
2.4.1 ?在Java中導(dǎo)入Matlab生成的jar文件
在Java開發(fā)工具Eclipse 中新建一個Dynamic Web Project工程,輸入工程名Java web,再新建一個JSP文件。在Java web里通過Build path中的Configure Build Path的路徑為工程添加jar文件。在Java Build path的libraries下通過Add External JARS添加Matlab生成的Waving.jar文件和Matlab安裝文件下的Javabuilder.jar文件,如圖4所示。其中Javabuilder.jar是Matlab builder組件所必須的,導(dǎo)入了Javabuilder.jar則可保證在當(dāng)前Java 項(xiàng)目內(nèi)可以訪問到Java 包中的類。同時將這兩個jar文件復(fù)制到Java web\WEB?INF\lib目錄中,以及將顯示Matlab圖形所必須的文件webfigures.tld標(biāo)簽庫拷貝Java web到WEB?INF文件夾下。
2.4.2 ?為JSP文件中的頭部添加相應(yīng)引用項(xiàng)
1) 在JSP文件的頭部聲明引用webfigures.tld文件,定義標(biāo)簽頁
<%@ taglib prefix="wf"uri="/WEB?INF/webfigures.tld"%>
2) 引用com.mathworks.toolbox.javabuilder.*,其中包含WebFigure庫、Erros定義以及編譯生成的Java的類和Combuilder接口的定義。具體為:
<%@page import="com.mathworks.toolbox.javabuilder.webfigures.WebFigure"%> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //引用WebFigure庫
<%@page import="com.mathworks.toolbox.javabuilder.*"%>
//引用Combuilder接口定義
<%@page import="com.mathworks.toolbox.javabuilder.internal.*"%> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//內(nèi)部Erros定義
<%@page import="Waving.Mathwaving"%>
//引用編譯生成的Java類
2.4.3 ?JSP實(shí)例的關(guān)鍵代碼
WebFigure webFigure=(WebFigure) ? ? ? ? ? ? ? ? ?//引用標(biāo)簽
{(MWJavaObjectRef)func. Plotwaving (1)[0]).get();
//轉(zhuǎn)化對象進(jìn)行參數(shù)傳遞
request.getSession().setAttribute("MyFigure",webFigure);
//請求訪問Seession
}
Plotwaving是Matlab中M文件定義的函數(shù),而在Servlet中,由于實(shí)參不能直接和在M文件中生成Java 類的函數(shù)的形參進(jìn)行傳遞,則需要通過MWNumericArray對象作為實(shí)參傳遞。將返回的對象類型強(qiáng)制轉(zhuǎn)化成MWJavaObjectRef類型的對象,通過訪問Session、共享Session屬性來實(shí)現(xiàn)Servlet和Jsp之間通信。
2.4.4 ?配置文件以實(shí)現(xiàn)網(wǎng)頁端的顯示
配置web.xml文件需要對Javabuilder.jar中所使用到的WebFigures Servlet進(jìn)行配置。在web?app標(biāo)簽中加入如下代碼:
//配置WebFigures Servlet
com.mathworks.toolbox.javabuilder.webfigures.WebFiguresServlet ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //引用jar文件
3.1 ?驗(yàn)證周期信號的傅里葉級數(shù)展開式
求圖5周期信號f(t)的簡潔三角型傅里葉級數(shù)[12]。周期為[T0]的周期信號f(t),滿足狄里利赫利(Dirichlet)條件,可將其展開為簡潔三角型傅里葉級數(shù),即:
[ft=A0+n=1∞Ancosnω0t+φn] (1)
式中:[ω0]為基波頻率;[An=a2n+b2n,an與bn]為傅里葉系數(shù)。在[T0]內(nèi)周期內(nèi):
[a0=1T0-T02T02ftdt]
[an=2T0-T02T02ftcosnω0tdt, n=1,2,…] (2)
[bn=2T0-T02T02ftsinnω0tdt, n=1,2,…] (3)
圖5中周期[T0]=[π],基波頻率[ω0=2πT0]=2 rad/s,則:
[A0=a0=1π0πe-t2dt]=0.504,[an=]0.504[8n1+16n2],
[bn=0.5048n1+16n2An]=[0.504?21+16n2,]
[φn]=[-arctan4n],則簡潔傅里葉級數(shù)為:
[ft= ? ? ? ? ?0.5041+n=1∞21+16n2cos2nt-arctan-4n]
An(幅度)和[φn](度)的具體數(shù)值見表1。
下面進(jìn)行Matlab程序驗(yàn)證其傅里葉級數(shù)(取前10項(xiàng)系數(shù))。
3.2 ?實(shí)驗(yàn)源程序
%計(jì)算傅里葉系數(shù)并畫頻譜圖
syms t n
a0=1/pi*int(sum(′exp(?t/2)′),0,pi);
a_0=subs(a0);
an=2/pi*int(seem(′exp(?t/2)*cos(2*n*t)′),0,pi);
bn=2/pi*int(sum(′exp(?t/2)*sin(2*n*t)′),0,pi);
n=1:10;
a_n=subs(an);b_n=subs(bn);
A_n=sqrt(a_n.^2+b_n.^2);
p_n=atan2(?b_n,a_n)*180/pi;
n=[0,n];A_n=[a_0,A_n];p_n=[0,p_n];
subplot(2,1,1);stem(n,A_n,′fill′);ylabel(′An′);
xlabel(′n′)
subplot(2,1,2);stem(n,p_n,′fill′);ylabel(′\phi_n(度)′);
xlabel(′n′)
disp(′n An(幅度) ?相位(度)′);
disp([num2str([n′,A_n′,p_n′])])
3.3 ?周期信號的實(shí)驗(yàn)結(jié)果分析與對比
部署項(xiàng)目到tomcat,啟動tomcat,在瀏覽器網(wǎng)址欄中輸入http://localhost:8080/couse.jsp。運(yùn)行后,即可將An(幅度)、[φn](度)結(jié)果在虛擬實(shí)驗(yàn)中心顯現(xiàn)。點(diǎn)擊實(shí)驗(yàn)結(jié)果按鈕,跳轉(zhuǎn)到新的頁面,即為想要的虛擬演示結(jié)果。
實(shí)驗(yàn)結(jié)果如圖6所示,具體實(shí)驗(yàn)分析如下:
圖6a)為CORBA,JNI技術(shù)下傳統(tǒng)演示的Matlab圖形窗體是嵌套于網(wǎng)頁中,僅有圖形并無其他功能。
圖6b)是COM對象下Com Builder的Matlab實(shí)驗(yàn)圖形。該窗體是從網(wǎng)頁中彈出,獨(dú)立于網(wǎng)頁顯示,并有Matlab圖形窗體的一系列工具欄,能直接獲取某點(diǎn)橫縱坐標(biāo)(如n=1,An=0.244 6)。調(diào)整圖中圖形、背景顏色,使學(xué)生在課堂上就能加深對抽象理論知識的理解。
圖6c)在COM對象下實(shí)現(xiàn)了圖形的旋轉(zhuǎn)和縮放,能更進(jìn)一步加深對圖形的效果分析。
圖6d)實(shí)現(xiàn)了圖形從二維轉(zhuǎn)變成三維立體效果圖,增強(qiáng)了其感染力和效果。
通過實(shí)驗(yàn)驗(yàn)證了周期信號的傅里葉級數(shù)與理論數(shù)學(xué)推導(dǎo)所得的結(jié)果一致。圖6b)~圖6d)通過縮放圖形,設(shè)置線條及顏色,多維度轉(zhuǎn)換圖形。與傳統(tǒng)演示圖6a)相比展現(xiàn)了Com Builder下圖形效果的優(yōu)越性,可直接從圖上獲取橫縱坐標(biāo),與數(shù)學(xué)推導(dǎo)表1的系數(shù)相對比,實(shí)驗(yàn)結(jié)果更直觀、方便,使相關(guān)課堂演示更加生動鮮明。
利用COM對象下Com Builder技術(shù)實(shí)現(xiàn)了Matlab圖形窗體脫離網(wǎng)頁端而非嵌套的獨(dú)立呈現(xiàn),從而最大程度地保留了Matlab圖形界面控件的豐富性。不僅能夠?qū)崿F(xiàn)圖形的縮放、旋轉(zhuǎn),而且能夠獲取橫縱坐標(biāo)、調(diào)整圖形、背景顏色、維數(shù)轉(zhuǎn)換及設(shè)置線條屬性的可編輯等諸多功能,且具有操作簡單、使用方便等特點(diǎn)。實(shí)現(xiàn)了可視化環(huán)境,降低了演示對用戶端系統(tǒng)環(huán)境的要求,使教師、學(xué)生只要通過網(wǎng)頁就能訪問,可以避免安裝Matlab軟件及復(fù)雜的調(diào)試和輸入程序,既方便教師課堂上的教學(xué),同時對不具備Matlab相關(guān)知識的學(xué)生也可輕松操作。
注:本文通訊作者為孫祥娥。
參考文獻(xiàn)
[1] 莊思發(fā).利用Matlab Web Server實(shí)現(xiàn)在線作圖[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19(6):223?225.
ZHUANG Sifa. Online plot using the Matlab Web Server [J]. Computer systems & applications, 2010, 19(6): 223?225.
[2] 蔡云鷺.基于Java Web和Matlab Builder JA的遠(yuǎn)程數(shù)學(xué)實(shí)驗(yàn)教學(xué)系統(tǒng)設(shè)計(jì)[J].實(shí)驗(yàn)技術(shù)與管理,2012,29(1):83?85.
CAI Yunlu. Design of distance education system for mathematics based on Java Web and Matlab Builder JA [J]. Experimental technology and management, 2012, 29(1): 83?85.
[3] 蘇耀峰.混合編程方法在網(wǎng)絡(luò)運(yùn)維效能評估中的應(yīng)用[J].軟件導(dǎo)刊,2016,15(5):145?147.
SU Yaofeng. Application of hybrid programming method in network operation and maintenance efficiency evaluation [J]. Software guide, 2016, 15(5): 145?147.
[4] 黃銀娟.基于Matlab Web Server的遠(yuǎn)程數(shù)值分析虛擬系統(tǒng)設(shè)計(jì)[J].廣西民族大學(xué)學(xué)報(bào)(自然科學(xué)版),2009,15(2):99?102.
HUANG Yinjuan. Remote numerical analysis virtual system based on Matlab Web Server [J]. Journal of Guangxi University for Nationalities (Natural science edition), 2009, 15(2): 99?102.
[5] 廖云伢,王建新,盛羽.基于Java與Matlab集成的虛擬實(shí)驗(yàn)平臺的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2007,27(2):394?396.
LIAO Yunya, WANG Jianxin, SHENG Yu. Design and implementation of virtual lab platform based on integration of Java and Matlab [J]. Computer applications, 2007, 27(2): 394?396.
[6] 王建新,莫秋菊.基于Internet的通信系統(tǒng)虛擬實(shí)驗(yàn)環(huán)境設(shè)計(jì)與實(shí)現(xiàn)[J].中南大學(xué)學(xué)報(bào)(自然科學(xué)版),2006,37(2):330?335.
WANG Jianxin, MO Qiuju. Design and implementation of communication system virtual environment based on Internet [J]. Journal of Central South University (Science and technology), 2006, 37(2): 330?335.
[7] 周小娟.Java?Matlab混合編程的研究[J].電子設(shè)計(jì)工程,2013,21(2):16?18.
ZHOU Xiaojuan. Research of Java?Matlab mixed programming methodology [J]. Electronic design engineering, 2013, 21(2): 16?18.
[8] 王薇,楊麗萍.Java和Matlab混合編程及其應(yīng)用[J].長春大學(xué)學(xué)報(bào),2012,22(10):1186?1189.
WANG Wei, YANG Liping. Mixed programming of Java and Matlab and its application [J]. Journal of Changchun University, 2012, 22(10): 1186?1189.
[9] 尹莉麗,初學(xué)導(dǎo).基于COM技術(shù)實(shí)現(xiàn)C++Builder與Matlab混合編程及其在模糊自整定PID控制中的應(yīng)用[J].計(jì)算機(jī)與現(xiàn)代化,2006(1):34?37.
YIN Lili, CHU Xuedao. Joint programming of C++ Builder and Matlab with COM and its application in self?turning fuzzy PID control [J]. Computer and modernization, 2006(1): 34?37.
[10] 張宏立.基于Matlab的Web實(shí)驗(yàn)平臺開發(fā)[J].計(jì)算機(jī)應(yīng)用與軟件,2005,22(2):142?144.
ZHANG Hongli. Exploitation of web experimental platform based on Matlab [J]. Computer applications and software, 2005, 22(2): 142?144.
[11] 曾威,楊建東,凌宇.基于Java和Matlab混合編程的水泵水輪機(jī)全特性構(gòu)造系統(tǒng)[J].大電機(jī)技術(shù),2014(4):55?58.
ZENG Wei, YANG Jiandong, LING Yu. The generation of pump?turbine characteristics based on hybrid programming between Java with Matlab [J]. Large electric machine and hydraulic turbine, 2014(4): 55?58.
[12] 金波.信號與系統(tǒng)[M].武漢:華中科技大學(xué)出版社,2015.
JIN Bo. Signals and systems [M]. Wuhan: Huazhong University of Science and Technology Press, 2015.