- 积分
- 42
- 注册时间
- 2005-10-22
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 messenger 于 2009-6-14 22:05 编辑
序:
毕业工作后,很少接触MATLAB,转FORTRAN和VC平台了。最近整理移动硬盘发现了不少以前的程序,专业的非专业的,VC的FORTRAN的MATLAB等等。发现手机上仿真也挺舒服的,于是在本子上装了6.5和2008B,最近一两个月手机猫MALTAB版面,仿佛回到了以前硕士时一天18小时挂实验室,不停刷新看仿真的日子。尤其是看到TAOHE和BAINHOME还偶尔出没,有点兴奋。
杂:
本科毕业时知道点C,VB,写过几行MATLAB程序,并非一个合格的学地球物理的学生。看到VC的添加菜单函数就头晕,看到FORTRAN的GOTO就头疼。本科毕业论文写了个MATLAB 命令窗口交互的正演程序,程序设计惨不忍睹。
读研选择了数值模拟。算法研究,有限元学习的同时,开始补习程序设计。先FORTRAN后MATLAB。我的一位导师,近70岁,MATLAB,FORTRAN相当熟练,
屋里一堆专业领域,数学,物理书之外,全是FORTRAN,MATLAB,VC的书。其中MATLAB书籍涵盖了丰富的GUI,基础编程及6.X时代90%的混编出版物。
看书,敲代码,写程序,读程序,学FORTRAN,对FORTRAN日益喜爱,拿到一个FOR程序第一步做的就是将关键字全部改为大写。
后来接了个算法科研项目,先算法,后软件。VC不懂,于是想起了MATLAB混编。
【省略若干字的MATLAB混编学习】作出了初步软件壳子。由于项目方要求,需改为VC或VB的界面。于是花了半个月时间学习VC。
软件遇到的最大问题便是界面的绘图功能。需要绘制模拟的曲线和有限元网格图。
搁了凉席睡实验室的空调小单间,花了几个晚上设计了一个VC GDI绘图类。界面,函数参照MATLAB。研究了MATLAB的一些函数,比如plotyy函数的寻找最优Ticks刻度的bestscale函数,使绘图类更加自动化,C++类化,傻瓜化。最近稍微整理了一下,过段时间版面奉上。见图如下
这个科研项目最后成果表现为两个专业计算软件,让我VC和MATLAB混编从零到有。写了不少MEX和混编的程序和软件,也尝试写过一个MATLAB 6.5的VC绘图类,实现绘图傻瓜化,数据传递傻瓜化,过段时间整理一下一并版面奉上。
下即参考的自动寻找刻度的MATLAB函数
- % Find bestscale that produces the same number of y-ticks for both
- % the left and the right.
- [low,high,ticks] = bestscale(ylim1(1),ylim1(2),ylim2(1),ylim2(2),islog1 | islog2);
复制代码 -----------------------------------------------------------------------------
混编经验
- 很难想象,使用VC6搞WIN32或MFC的,不准备个MSDN.查函数用法,及由此及彼学习其他函数。其实
- 使用WINDOWS API也是种混编,按微软程序员设置的接口格式在VCVB等程序中使用WINDOWS资源。使用MFC
- 也是一种混编。即混编无处无在,道理无处不通。会WIN32 API编程的转而学习MATLAB混编,学习步骤
- 和思路是想通的。
- 而学混编最忽略两件事情:
- 1,不看开发文档,不了解API,不熟知参数格式。你连AfxMessageBox的参数定义都不清楚
- 怎么使用?
- 2,不追本索源,什么可以混编什么不可以混编都不了解。为什么微软的程序员不设置
- AfxMessageBox可以去麦当劳买可乐呢?
- 解决方案相当简单,去官网下API手册,下官方说明,什么可以混编什么不可以
- 本版很多很多,很多混编问贴,上述准备工作未作或未全做。
- 普遍特征便是:
- 1,函数参数使用不对不会不知道
- 2,无用功做不能混编的工作。
- 我猜,也许有重视短期科研效应的因素。其实,稍微称心深入多做准备工作,效果会好得惊人,
- 侧面扩大你的程序思路和科研思路。
复制代码 混编学习
混编无外乎两点,数据转化传递和函数使用。以下具体以VC和MATLAB6.x为例
新手步骤
1
http://www.mathworks.com/access/helpdesk_r13/help/toolbox/compiler/compiler.html
官网说明,阅读更新,阅读
Limitations and Restrictions
Unsupported Functions in Stand-Alone Mode
2
下载
MEX方面
External Interfaces/API文档和Functions
下载C/C++数学库
混编方面
MATLAB C++ Math Library Reference
MATLAB C++ Math Library User's Guide
MATLAB C Math Library User's Guide
MATLAB C Math Library Reference
混编图形
MATLAB C/C++ Graphics Library
3
关注
extern/include目录下的c,cpp 6.5X头文件
4
以上资料即Visual Studio的MSDN。
5
学习编译环境的设置。阅读example下文件,阅读官方文档及版面编译环境设置TAOHE,SCIE等文章。
考虑考虑VC编译器的Include和Lib链接。混编不都这个道理么?
MFC,STL不都这么用的么?
6
mcc,mex使用摸索。编译一个简单的hello world 程序。
使用c或者c++数学库
比如简单
a=1;
研究生产的c和cpp文件
7
摸索C/C++数据结构向MATLAB C/C++ Math Library的数据转换。
int,double,CString,char等等,实现MATLAB向C数据转换转换,利用底层的C Math Library
8
实现了数据转换,看函数参数,看文档,开始写程序吧。有什么难的。
9
研究研究include目录下的头文件吧
瞧瞧cpp中mwArray的定义,在VC环境使用封装的类,避免底层的C mxArray的指针操作,多好。
研究研究dblmtrx.h,看其类结构,结合文档,对mwArray深入熟悉
阅读其中的一些代码,可以了解一些工作原理。
10
mwArray封装自mxArray
阅读mltif.h这样的代码,对mwArray转mxArray熟悉
可以学到MatlabMatrix以及mwVarargin,mwVarargout的用法
利用mwVarargin递归调用,一个MATLAB混编函数可以有很多输入参数
参见:
11
阅读版面置顶
12
遇到工具箱混编怎么办?
首先确定工具箱混编的难点在哪里?是
Limitations and Restrictions
还是由于
Unsupported Functions in Stand-Alone Mode
后者,修改MATLAB源代码也许是可以完成的
比如小波滤波wden函数
mcc编译不成,修改后
http://forum.simwe.com/viewthread.php?tid=759880&highlight=%2Bshunfly
可以使用
12
Enjoy Coding! |
评分
-
2
查看全部评分
-
|