Java和脚本,C++和Matlab :: Lost Ferry
来源: BlogBus 原始链接: http://ferryslife.blogbus.com/logs/2006/11/3744726.html 存档链接: https://web.archive.org/web/20061109224651id_/http://ferryslife.blogbus.com/logs/2006/11/3744726.html
Lost Ferry 野渡无人舟自横 .: 发表评论 :. .: 最后更新 :. :: << Google终于进军wiki | 首页 | 骊山 >> Java和脚本,C++和Matlab 给 Java SE 注入脚本语言的活力 发现跟C++里调用Matlab很类似。主要操作都是打开engine,调用eval,传变量,取变量。 昨天花了大半天学会怎么从C++里调用Matlab。其实一两年前试图搞过,结果没搞出来。后来就到处找C++矩阵类库,发现几乎全是垃圾,换了一个又一个,最终发现还不如用OpenCV自带的矩阵库,虽然也很恶心,而且是很多年前的了。初始化不方便,任何操作都不方便,当初也就看上了它有SVD函数,而且OpenCV很多函数也需要使用矩阵。不过前两天搞research又与一个老问题重逢,就是矩阵分解,M = KR。K是一个上三角矩阵,R是一个Orthogonal的矩阵。这个分解需要用到QR-Decomposition(nnd,突然意识到我的方法好像有问题?)。总之,OpenCV没有那个分解函数。自己写一个总觉得是件很恐怖的事情,没有信心。想起来一两个月前Li wenfeng发信说过可以在c++里调用matlab了,于是去问了一番,把源代码要过来。发现很简单,wk~。不过自己试了半天还是出链接错。不过现在知道链接错该怎么解决了,两年来C++还是有稍许进步。于是顺利的调试通过。其实还是花了相当大工夫,后来发现是搞混了mwArray和mxArray,被搞惨了。 在C++里调用Matlab还是相当激动人心的,很多事情C++做起来很麻烦,很丑陋,很容易出错,很难以维护,很难以调试,甚至根本做不到。比如实习时用的很多的图表绘制,用Matlab简直太方便了。觉得以后应该尽量用Matlab写核心代码,而C++可以负责开销大的操作,比如point correspondence,比如图像操作,或者一些简单的矩阵运算,另外可以负责GUI,也就是Matlab的弱项。其实现在用C++写代码也很快,因为自己已经有了很多类库的积累。不过自己的C++代码从不考虑内存泄漏问题,泄漏就泄漏吧,反正又不是写给别人,不想花那个精力。 有一个担忧是,Matlab用多了可能会上瘾。写起来确实很爽,但有一天因为性能的问题必须写成C++怎么办?port起来恐怕不是件很容易的事情。相当初构建一些简单的geometry的类都整得吐血。 另外,最大的问题仍然是执行效率问题。每次启动engine都暴慢,这个让人很难受。 无论如何,混合编程肯定是必要的。其实前天晚上就用了一个点子,在C++程序里输出.m文件,然后在matlab里调用,发现相当爽。不过要进一步就非得在C++里直接调用Matlab不可了。 在暑假实习之前,基本上从来不用Matlab,因为最开始必须用C++实现一些东西,以控制机器人。后来也就习惯用C++了,而且也觉得Matlab不是面向对象的语言,这一点很丑陋,不能容忍。这次暑假实习,基本上算是第一次好好学习了一下Matlab,上次学习大概是六七年前的大三了。虽然Matlab用得不多,但发现对research很有帮助,相当有帮助。核心的idea很容易实现,在evaluate不同的算法时也非常方便,可以方便的Plot,输出中间结果,那些图表不仅直观,还可以直接拿来放到各种文档里。不仅如此,后来还发现Matlab其实也可以“面向对象”的,不过不是它所提供的面向对象的方式,也不是类似于传统面向对象语言的那种方式。比如可以利用函数对象来实现多态。那时才明白为什么research都用matlab,实现到产品时才port到c++。相同的算法,用matlab可能只要几十行,一个下午就可以搞定,而用c++可能要几百几千行,要好几天。调试和改进matlab也更有优势。 每个语言都有适用的领域,每个领域都有适用的语言。没有哪一个语言可以在所有领域都是最好的。简单的,合适的,才是最好的。而简单的,合适的,是与领域相关的。当然,也和个人对语言的把握相关。 语言之间的融合,似乎是大势所趋 ferryzhou 发表于 2006-11-01 15:27:41 | 引用(trackback0) | 编辑 □ 评论