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

【原创】粗人粗言混编及其他[6.5主]

[复制链接]
发表于 2009-6-14 21:28:53 | 显示全部楼层 |阅读模式 来自 广西贺州
本帖最后由 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函数

  1. % Find bestscale that produces the same number of y-ticks for both
  2. % the left and the right.
  3. [low,high,ticks] = bestscale(ylim1(1),ylim1(2),ylim2(1),ylim2(2),islog1 | islog2);
复制代码
-----------------------------------------------------------------------------
混编经验

  1.     很难想象,使用VC6搞WIN32或MFC的,不准备个MSDN.查函数用法,及由此及彼学习其他函数。其实
  2. 使用WINDOWS API也是种混编,按微软程序员设置的接口格式在VCVB等程序中使用WINDOWS资源。使用MFC
  3. 也是一种混编。即混编无处无在,道理无处不通。会WIN32 API编程的转而学习MATLAB混编,学习步骤
  4. 和思路是想通的。
  5.     而学混编最忽略两件事情:
  6.         1,不看开发文档,不了解API,不熟知参数格式。你连AfxMessageBox的参数定义都不清楚
  7. 怎么使用?
  8.         2,不追本索源,什么可以混编什么不可以混编都不了解。为什么微软的程序员不设置
  9. AfxMessageBox可以去麦当劳买可乐呢?
  10.     解决方案相当简单,去官网下API手册,下官方说明,什么可以混编什么不可以
  11.     本版很多很多,很多混编问贴,上述准备工作未作或未全做。
  12.     普遍特征便是:
  13.         1,函数参数使用不对不会不知道
  14.         2,无用功做不能混编的工作。
  15.     我猜,也许有重视短期科研效应的因素。其实,稍微称心深入多做准备工作,效果会好得惊人,
  16. 侧面扩大你的程序思路和科研思路。
复制代码
混编学习
    混编无外乎两点,数据转化传递和函数使用。以下具体以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

查看全部评分

发表于 2009-6-23 14:58:20 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
很强啊,羡慕,本人也在学习编程中
回复 不支持

使用道具 举报

发表于 2009-12-10 09:39:05 | 显示全部楼层 来自 河北石家庄
发现怎么课题有点相近啊,呵呵
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-4 23:35 , Processed in 0.036847 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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