【原】MATALB结合的多层分析应用服务。

华芸智森 2009-12-06 03:11:44
加精
这么晚了,我还在写代码。唉,命苦啊。

写个话题,皆因我很久没有写东西了,心里想,写点吧。于是,就找了这个话题,而且是我最新的话题。写了一点。希望大家有兴趣。

我在这里只是简要介绍我自己的一套方法,希望有更好方法的同学也拿出来分享一下。

这个话题有点大,这是结合本人现在做的一个东西:数据库,数据仓库与MATLAB结合的多层后台分析服务系统.

对MATALB熟悉的人都知道,MATLAB中最好用的就是工具箱,但是,工具箱却不能编译为NET的DLL.我也曾试过很多方法.在人大的经济论坛里加了几个人的QQ,想请教他们关于MATALB工具箱的编译问题.但最终结果都是否.不可行.

这的确是一个头大的问题,困绕了我很久.最终导至的结果是,放弃MATALB的编译.而将MATALB直接作为分析的系统.换句话说,就是直接在MATALB中运行M代码.有点类拟在VB中操作OFFICE.

但这样又导至了另一个问题,如何将MATALB的结果返回到NET中.为解决这个问题,其实,这也是这个系统的一个核心问题,这个问题解决了,其它的都是水到渠成.为这个问题,我绕了好大的一个弯.今天要描述的,就是这个弯怎样绕.这也可能是MATALB应用关心的一个问题.

整个系统分为四个层.

1.WEBSERVICES层.
这个层是接收前台发送的M代码,并将M代码交给第2层.

2.WINDOWS服务.
这个服务其实就是一个容器.里面有两个哈稀表描述的结构,一个是用于保存WEBSERVICES中提交的M代码.一个保存M代码运行的结果.这是一个静态层.本身不做任何操作.

3.WCF层.
这个层是用于分析后台(MATLAB后台)与WINDOWS服务间的通信.它只接受后台的申请.从WINDOWS服务容器中提取M代码.提取后将M代码从2的服务中删除.

4.MATALB交互程序.
这个应用程序直接与3的WCF和MATALB之间建立联系的纽带.从MATALB中申请M代码。然后通过OLE发送到MATALB对象,MATLAB接收到代码后直接RUN,将结果何存到一个内存虚拟盘上。该程序再从虚拟盘中读出相关的分析结果。提交给WCF,WCF会将这个结果直接写入到WINDOWS服务中。

5.WEBSERVICES(这是第1层的WEB服务)在提交M代码后,一直在等待的状态。并侦测2层的WINDOWS服务的哈稀表是否有返回结果。如果有,则从服务中提取结果,并将结果从服务中删除。并将结果返回给前台用户。

这些就是这个分析后台的一个简要介绍。不过,做起来还是很复杂的。题外话:我这个人,不是很勤奋的人,写代码也是三天打鱼两天晒网的那种。刚开始准备这个东东时,把文档和相关的关系描述后,自己看着在摇头,心里想,这么大的代码量,都不知道什么时候能完成。不过,每日点点滴滴,终于进入了测试阶段。感觉还挺好。呵呵。。

相关要点:

A. 1,2,3 在同一台服务器上。4 和MATALB在另一台服务器上。当然,可以横向或纵向扩展。
B. MATALB返回的结果可以是N个矩阵列或N个图片。每段MATALB代码在写虚拟盘时都应该有相应的标识(标识就是文件名,也是哈稀表中的KEY)。有一个与之对应的数据库对M代码进行相关的描述。

我为什么要至力于开发这个后台呢?因为我觉得MATALB的算法非常多,有很多相关的 预测,插值,数据挖掘,最优化算法 代码(本人磁盘就保存了好几个G)。扩展非常容易。而相应的算法如果用.NET来写,我感觉算直就是在浪费生命。
做这个后台可能我本人的工作方式有关。我总喜欢把事情弄得一了百了,免得罗里罗索的,没完没了的( 这句话可能做报表和数据提取的朋友很有感觉. :) )。

这里介绍了相关的开发要点和各层次的关系。有兴趣的朋友可以自己写。当然,如果你有更好的办法,不防大家交流一下。
...全文
1261 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
caomeng2010 2010-07-22
  • 打赏
  • 举报
回复
学习记号
victory2688 2010-07-21
  • 打赏
  • 举报
回复
关注!
zqtoo 2009-12-09
  • 打赏
  • 举报
回复
ding
mingrenlele 2009-12-09
  • 打赏
  • 举报
回复
哦,难点在工具箱函数 ?
puhaiggp 2009-12-09
  • 打赏
  • 举报
回复
以前学习过MATLAB,不过全是分析、挖掘数据,还没有尝试与其他语言结合起来用,
看到楼主写的,值得我去学习。看来我还是小菜的小菜了,^_^
lucky2360 2009-12-09
  • 打赏
  • 举报
回复
正在学matlab关注
gangSters 2009-12-08
  • 打赏
  • 举报
回复
太棒了,谢谢分享,这些心得很有好处,M和net都是巨牛的工具
hust_yanyahua 2009-12-08
  • 打赏
  • 举报
回复
路过
华芸智森 2009-12-07
  • 打赏
  • 举报
回复
[Quote=引用 34 楼 ttwtt 的回复:]
引用 21 楼 mstop 的回复:
请教楼上的,我想一个能完整调用工具箱的编译方案。国内有人搞这个吗?
我这套方法虽然能完速度调用TOOLBOX,但是,部署很麻烦的。而且,不能脱离MATALB。
我只想寻找一种既能完整调用工具箱的方法,也能脱离MATALB本身来运行。

请指教!


能否实现完整调用,是与工具箱相关的,比如说神网的工具箱,至少我没有在C里面实现过调用。图像处理工具箱,没有碰到没法调用的问题,当然用得也是比较简单的功能。相信还没有人专门去完整地尝试过。这位兄弟如果方便的话,透露一下用的是哪只工具箱,我去测试一下。
[/Quote]

例如一个牛顿向后插值法。其中使用了符号函数就行。但用MATALB做定量分析时。符号函数使用得特别多。


function f = Newtonback(x,y,x0)
syms t;

if(length(x) == length(y))
n = length(x);
c(1:n) = 0.0;
else
disp('x和y的维数不相等!');
return;
end

f = y(n);
y1 = 0;

xx =linspace(x(1),x(n),(x(2)-x(1)));
if(xx ~= x)
disp('节点之间不是等距的!');
return;
end

for(i=1:n-1)
for(j=i+1:n)
y1(j) = y(j)-y(j-1);
end
c(i) = y1(n);
l = t;
for(k=1:i-1)
l = l*(t+k);
end;

f = f + c(i)*l/factorial(i);
simplify(f);
y = y1;

if(i==n-1)
if(nargin == 3)
f = subs(f,'t',(x0-x(n))/(x(2)-x(1)));
else
f = collect(f);
f = vpa(f, 6);
end
end
end
华芸智森 2009-12-07
  • 打赏
  • 举报
回复
回楼主,这方面我也做过。也在国内比较知名的MATALB论坛里与别人探讨过这个问题。最后都是因为不能完全使用工具箱面让我不得不放弃以DLL的方式来用。我现在就是转了一个很大的弯子来实现这个目的。
kaifaye 2009-12-07
  • 打赏
  • 举报
回复
浩大的工程!
Nizvoo 2009-12-07
  • 打赏
  • 举报
回复
您至少需要安装matlab runtime, 约莫200M左右,matlab导出function以dll形式和c/c++交互
华芸智森 2009-12-07
  • 打赏
  • 举报
回复
请教楼上的,我想一个能完整调用工具箱的编译方案。国内有人搞这个吗?
我这套方法虽然能完速度调用TOOLBOX,但是,部署很麻烦的。而且,不能脱离MATALB。
我只想寻找一种既能完整调用工具箱的方法,也能脱离MATALB本身来运行。

请指教!
「已注销」 2009-12-07
  • 打赏
  • 举报
回复
Matlab 与 .net 结合的东西我有过一些试探,M调C,C调M,VS6平台,VS2005平台.... 现在不搞 Matlab 了。工具箱的函数有一些是可以在C里面调用的,编译成标准dll,.net一般都是可以直接调用。在国内还是认识一些朋友对这个比较了解的。为生活近迫,好久没有搞过这东西了。如果能拉到赞助的话,到可以继续深入下去 /cy
Matlab 里面算法虽多,但是要脱离它本射的平台使用用的话,还是够得做的。
xinronghr2010 2009-12-07
  • 打赏
  • 举报
回复
12月济南招聘会,济南12月招聘会,济南12月招聘会信息,济南招聘会,山东省12月济南招聘会,济南大型招聘会

2009年12月山东济南大中专毕业生供需见面会
—冬季十七城市大型人才集中招聘月
山东欣荣人才服务有限公司常年在山东济南组织大型招聘会,自07年以来共举办了数十场大型人才招聘会,已成为济南市最具规模、人气最旺的现场招聘会之一,取得了广大用人企业和求职者的一致好评。现正值09年招聘的最佳季节,为满足广大用人企业求才,并促进就业的需求,特推出集中招聘月:
2009年12月济南招聘会
第一场:12月19日(周六8:00—14:00)综合类
地点:山东省科技馆(泉城广场东邻)
2009年12月济南招聘会
第二场:12月26日(周六8:00—14:00)综合类
地点:山东省科技馆(泉城广场东邻)
2009年12月济南招聘会 宣传及规模
每届招聘盛会将在报纸、公交车车载电视、电视台等媒体进行长时间、全方位、多层次的宣传,同时在各大专业人才网站进行广泛推广,并将深入省内各高校进行发动宣传,组织各高校应往届毕业生及社会各类人员参会。拟邀企业200多家,预计到场人数上万人次。本届招聘会将邀请省内各类有人才需求的高新技术、集体、民营股份制企业及其他企事业单位参会,提供就业岗位5000多个。
2009年12月济南招聘会报名须知:
报名材料:企业营业执照及经办人身份证复印件、企业招聘信息(300字以内电子文档)
报名电话:(0531)82906016 传真:(0531) 87907039 Email: xinronghr@126.com
2009年12月济南招聘会咨询顾问:刘洪双 13969139981
2009年12月济南招聘会会务服务
1、 免费提供桌椅,免费制作写真海报一张(规格110cm×80 cm) ,免费为2名工作人员提供午餐和饮用水及招聘文具一套 ,工作人员可上门办理相关手续。
2、 网站服务:可免费在山东人才信息网(www.sdrencai.com)发布一个月。
3、 推荐服务:利用我们庞大的人才库信息,针对您的需求,推荐适合您企业的人才。
2009年12月济南招聘会
泉城广场(科技馆):乘1、3、5、14、19、36、44、49、66、70、80、82、85、55、101、102、106、123、K100、K96、K52路车到泉城广场下车。
2009年12月济南招聘会详情请登陆山东人才信息网(www.sdrencai.com)查询相关信息
agel0ver 2009-12-07
  • 打赏
  • 举报
回复
学习了
mamagygy 2009-12-07
  • 打赏
  • 举报
回复
来学习一下
「已注销」 2009-12-07
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 mstop 的回复:]
请教楼上的,我想一个能完整调用工具箱的编译方案。国内有人搞这个吗?
我这套方法虽然能完速度调用TOOLBOX,但是,部署很麻烦的。而且,不能脱离MATALB。
我只想寻找一种既能完整调用工具箱的方法,也能脱离MATALB本身来运行。

请指教!

[/Quote]
能否实现完整调用,是与工具箱相关的,比如说神网的工具箱,至少我没有在C里面实现过调用。图像处理工具箱,没有碰到没法调用的问题,当然用得也是比较简单的功能。相信还没有人专门去完整地尝试过。这位兄弟如果方便的话,透露一下用的是哪只工具箱,我去测试一下。
guguda2008 2009-12-07
  • 打赏
  • 举报
回复
支持,都是大牛
SlaughtChen 2009-12-07
  • 打赏
  • 举报
回复
学习!
加载更多回复(36)

590

社区成员

发帖
与我相关
我的任务
社区描述
提出问题
其他 技术论坛(原bbs)
社区管理员
  • community_281
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧