找回密码
 注册
Simdroid-非首页
查看: 391|回复: 5

【转帖】基于MatLab的Web应用开发

[复制链接]
发表于 2003-11-14 21:12:16 | 显示全部楼层 |阅读模式 来自 上海浦东新区
基于MatLab的Web应用开发
MatLab的含义是矩阵实验室(Matrix Laboratory)。它是MathWorks公司于1982年推出的一套高性能的数值计算和可视化数学软件。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境。  
   
随着计算机技术与通信技术的发展,Internet/Intranet技术已成为新型信息系统开发的标准平台。本文以实例的方式讨论基于MatLab的科学计算与图形展示功能的Web应用系统的开发过程,说明MatLab Web应用开发的基本实施方法,展示了MatLab在Internet/Intranet环境下的应用。  
   
应用系统原理  
通过基于MatLab的Web应用,能使世界各地的人通过Internet将数据发送给MatLab Web服务器,借助MatLab的强大的计算与图形展示功能,获得计算的结果或相应的图形结果。  
   
MatLab的Web应用主要由两部分组成,一部分是MatLab Web服务器,它实际上是一个可执行的应用程序matlabserver.exe,是MatLab应用程序运行的环境;另一部分是Web服务代理,一个可执行程序matweb.exe,它将所有对MatLab的请求重定向到matlabserver.exe进行处理。其原理结构如图1所示:  
   
图1 MatLab Web应用原理结构图  
   
由图1可知,MatLab Web应用必须基于某一标准的Web服务环境,浏览器客户通过TCP/IP协议请求Web服务器中的文档,而MatLab Web服务代理筛选所有的请求,如果是MatLab Web请求,则将其交由MatLab Web服务程序处理,否则由标准的Web服务器进行处理。在设置MatLab Web应用环境时,其中MatLab Web服务代理必须与系统的Web服务器安装在同一台机器上,而与MatLab Web服务程序则可以在同一台机器中,也可在不同的机器中。在具体实现时,还必须对MatLab Web服务代理与MatLab Web服务程序进行适当的配置,这分别通过文件matweb.conf与matlabserver.conf来实现。下面用实例的方式来说明具体的设置过程。  
   
应用实例开发  
下面是以通过输入函数自变量的变化范围、步长及函数后,借助MatLab Web应用实现函数作图的实例来说明开发MatLab Web应用的基本步骤。  
1.请求MatLab Web服务的HTML文档  
请求MatLab Web服务的HTML文档主要完成两方面的功能,一方面是接收浏览器用户的输入,这与一般的Web应用的处理方法相同,可以通过HTML的表单来实现;另一方面是设置一个特殊的标志,将该请求重定向到MatLab Web服务代理进行处理,它的实现方法也与一般的CGI程序调用方法相同。下面是一个简单的实例代码(文件名:func.htm)。  
<html><title>函数作图演示</title><body>  
<center><h1>函数作图演示</h1></center>  
<h3>请注意:加法用记号“plus”,而减法用记号“minus”</h3><table>  
<form action=“/cgi-bin/matweb.exe” method=“POST” target=“outputwindow”>  
<input type=“hidden” name=“mlmfile” value=“functest”>  
<tr><td>Start x: </td>  
< td>< input type=“text” size =“5” value=0 name=“startx”>  
< /td >< /tr >< tr >< td >Step x:< /td >  
< td> < input type=“text” size =“5” value=0.001 name=“stepx”>< /td ></tr >< tr >< td > End x:< /td >  
< td > <input type=“text” size =“5” value=10 name=“endx”>< /td >< /tr >< tr >< td > Function:< /td >  
< td > <input type=“text” size =“100” value=“sin(x)” name=“funcname”></td></tr>  
<tr><td> <input type=“submit” name=“Submit”   
value=“Submit”></td>  
< td > <input type=“reset” name=“reset” value=“reset”></td></tr></form></table></body></html>  
该文件中最关键的部分是代码中用斜体标明的两行代码,即Form标记的Action属性的设置及隐输入框mlmfile(参数名固定),其值为将在MatLab Web服务程序中运行的m文件的文件名。  
另外,为了方便使用,可以将浏览器窗口分为上下两个部分,上部分用于输入,下部分用于显示运行结果或图形。该框架页面(文件名为funcexample.htm)的HTML代码如下:  
<html><title>函数功能演示</title>  
<frameset rows=“300,*" border=0 frameborder=“0">  
<frame scrolling=auto src=“func.htm” name=“topframe” marginwidth=10 marginheight=1 frameborder=0>  
<frame scrolling=auto src=“dummy.html” marginwidth=0 marginheight=0 name=“outputwindow” frameborder=0>  
</frameset></html>  
2.MatLab Web应用的设置  
MatLab Web应用的设置工作主要是对MatLab Web服务代理的设置,即每增加一个MatLab Web应用,都需要在代理服务的配置文件matweb.conf中增加一项配置。如上面的输入html表单中的m文件的文件名为functest,相应地,需要在matweb.conf中增加下面的内容:  
[functest]  
mlserver=192.1.2.1  
mldir=e:/inetpub/wwwroot/icons  
mldir1=192.1.2.1  
其中mlserver=192.1.2.1指明MatLab Web服务程序所在机器的IP地址,而下面两行主要是MatLab工作目录的设置及应用中可能用到的全局变量的设置。  
3.MatLab应用程序的开发  
MatLab应用程序主要具有以下3个方面的功能:  
●接收输入HTML表单中的输入值;  
●调用MatLab中内置的各种函数进行科学计算或作图;  
●将计算结果或生成的图形通过适当的方法输出到HTML页面,并将这些结果返回给最终用户。  
部分代码如下(应用函数名为:functest.m):  
Function PageString = functest(InputSet, OutFile)  
cd(InputSet.mldir);  
% 清除1个小时以前的旧图形  
wscleanup(‘func*.jpeg’, 1);  
Fig = figure(‘visible’,‘off’);  
% 接收输入值,并进行转换  
startx = str2double(InputSet.startx);  
stepx = str2double(InputSet.stepx);  
endx = str2double(InputSet.endx);  
x=(startx:stepx:endx);  
S=InputSet.funcname;  
len=length(S);  
for i=1:4:(len-4)  
po=findstr(S,‘plus’);  
if po>0   
S(po)=‘ ’;  
S(po+1)=‘+’;  
S(po+2)=‘ ’;  
S(po+3)=‘ ’;  
end  
end  
for i=1:5:(len-5)  
po=findstr(S,‘minus’);  
if po>0   
S(po)=‘ ’;  
S(po+1)=‘ ’;  
S(po+2)=‘-’;  
S(po+3)=‘ ’;  
S(po+4)=‘ ’;  
end  
end  
% 计算或作图  
plot(x,eval(S));  
ylabel(‘Function Test’);  
title([‘******函数:’ S ‘的图像*******’]);  
pos = get(gcf, ‘position’);  
pos(3) = 380;  
pos(4) = 310;  
set(gcf,‘Position’, pos,‘PaperPosition’,[.25 .25 4 3]);  
PlotFile = sprintf(‘func%s.jpeg’, InputSet.mlid);  
drawnow;  
wsprintjpeg(Fig, PlotFile);  
close(Fig);  
% 对输出模板进行处理,生成输出HTML文件  
templatefile = which(‘functempate.htm’);  
if ( exist(‘OutFile’,‘var’)== 1 )  
s.GraphFileName = [ PlotFile];  
PageString = htmlrep(s, templatefile, OutFile);  
else  
s.GraphFileName = [sprintf(‘http://%s/icons/’,InputSet.mldir1)PlotFile];  
PageString = htmlrep(s, templatefile);  
end  
4.显示运行结果的HTML模板的开发  
在上面的MatLab应用程序中,最后的结果输出部分调用了用于输出的HTML模板functemplate.htm,下面是该文件的部分代码,其中最重要的部分是标记“$......$”中包含的变量部分,在MatLab应用程序中通过函数htmlrep,使用输出结构中相应的变量值对这些标记进行替换。  
<html><body bgcolor=“#FFFFFF”>  
<p>&nbsp</p><p align=“center”>  
<img border=0 src=“$GraphFileName$”></p></body></html>

评分

1

查看全部评分

 楼主| 发表于 2005-5-1 14:03:34 | 显示全部楼层 来自 上海

Re:【转帖】基于MatLab的Web应用开发

Simdroid开发平台
很早很早的老贴,竟然没有人喝彩。
我以前用纯matlab代码写了一个超文本报告,好几千行代码,有十几个页面,还用到了三个frame。
写报告的工程就是用“脚本”加“变量”写文本文件(*.html)。
发表于 2005-5-12 07:36:50 | 显示全部楼层 来自 浙江杭州

Re:【转帖】基于MatLab的Web应用开发

喝彩一下。
peipeizhouzhou 该用户已被删除
发表于 2005-5-12 09:20:43 | 显示全部楼层 来自 北京
提示: 作者被禁止或删除 内容自动屏蔽
xiaoyaozi 该用户已被删除
发表于 2005-5-12 10:44:38 | 显示全部楼层 来自 江苏南京
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2005-11-5 10:46:17 | 显示全部楼层 来自 上海

Re:【转帖】基于MatLab的Web应用开发

非常不错!现在急着用,试了试cwit老大的程序,没有成功,很郁闷,还在调试!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-27 23:35 , Processed in 0.045521 second(s), 18 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表