



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
收稿日期 2006 04 11 作者简介 王红卫 1947 男 湖南衡阳人 南华大学数理学院讲师 主要研究方向 力学教学和科研工作 第 20 卷第 2 期南华大学学报 自然科学版 Vol 20 No 2 2006 年 6 月Journal of Nanhua University Science and Technology Jun 2006 文章编号 1673 0062 2006 02 0076 03 Visual c 中 MATLAB 数学函数库的封装 王红卫1 肖建清1 2 1 南华大学 数理学院 湖南 衡阳 421001 2 中南大学 资源与安全工程学院 湖南 长沙 410083 摘 要 在土木 建筑等工程领域的数值计算中 VC 和 MATLAB 的混合编程可以 充分发挥各自的优势 提高计算效率 节省大量的人力物力 本文简要介绍了 MAT LAB 与 VC 混合编程的几种方法 提出了在 VC 环境中封装 MATLAB 数学函数库 的基本思路 并通过一个实例 演示了 VC 中构建数值计算环境以及封装 MAT LAB 数学函数库的具体步骤 关键词 VC MATLAB 数学函数库 混合编程 中图分类号 TP311 文献标识码 B Encapsulation of MATLAB Math Library in Visual c WANG Hong wei1 XIAO Jian qing1 2 1 School of Mathematics and Physics Nanhua University Hengyang Hunan 421001 China 2 College of Resource and Safety Engineering Central South University Changsha Hunan 410083 China Abstract In the field of civil engineering and architecture engineering etc active program ming with VC and MATLAB can make the most of respective advantages improve computational efficiency and save a lot of human and material resources In this paper sev eral methods for active programming with VC and MATLAB are discussed briefly and an essential way of encapsulating the MATLAB math library in the environment of VC is advanced Meanwhile via an example the detailed steps of constructing the environment of numerical calculation and encapsulating the MATLAB math library are provided Key words VC MATLAB math library active programming 0 前言 随着工程实践中计算机的普及 MATLAB 强 大的数值运算能力得到了广泛的关注 其开放式 的构架模式 让人们可以将自己开发的优秀的应 用程序集加入到 MATLAB 工具的行列 这样 许 多领域前沿的研究者和科学家都可以将自己的成 果集成到 MATLAB 之中 被全人类继承和利用 因此 MATLAB 从发布之日至今的 20 多年中 一 直保持着旺盛的生命力 但是 MATLAB 的 m 代码 是解释性执行的 程序执行效率低 对大规模的数 值计算和分析力不从心 而且 MATLAB 程序不能 脱离其运行环境 因此不适于开发商用软件 如果 能将 MATLAB 强大的数值运算核心 MATLAB 数 学函数库 打包后用于开发新的应用环境 那么 工程技术人员就可以节省大量的底层开发时间 可以将所有的精力都集中到工程实际问题的解决 中 而 C 语言代码执行效率比 MATLAB 高得多 而且在开发中结合 c 语言的可重用特性 可 随意地将代码植入到任何一个自主开发的应用程 序中 故而 在计算机上编程实现工程实际问题的 数值计算和仿真时 如果结合 MATLAB 和 VC 的优点 取长补短 则可以缩短开发周期 取得 更好的效果 1 VC 与 MATLAB 混合编程 虽然 MATLAB 是一个完全独立的编程和数 据运算的集成环境 使用它可以方便地做很多工 作 但是 很多时候仅仅靠 MATLAB 环境还是不 能很好地完成任务 比如说 MATLAB 程序中出现 循环时 MATLAB 运行起来非常吃力 速度很慢 以前许多用其它语言编写的算法程序如果要移植 到 MATLAB 环境中运行 就需要重新编写为 M 文 件 浪费许多人力和物力 别的编程环境如果要使 用 MATLAB 的某些优秀的功能时 又找不到合适 的办法 因此 MATLAB 与外部的数据和程序交互 是很有意义的 在这样的背景之下 MATLAB 应用 程序接口应时而生 MATLAB 应用程序接口是一 个功能完善的外部程序接口函数库 通过这些函 数可以完成与 C FORTRAN 等语言之间的联合编 程 MATLAB 应用程序接口包括以下几个方面的 内容 通过 MEX 文件在 MATLAB 环境中调用 别的语言编写的程序和算法 其特点是 对于早期 用 C 语言等其它高级语言编写的算法和程序 不 需要重新将其编写成 MATLAB 中的 M 文件 只要 加入一个被 MATLAB 所识别的入口函数 mex Function 最后编译形成一个标准的动态链接 库 Windows 系统中为 DLL 所以 MATLAB 调用 MEX 文件的实质就是动态链接库的标准调用 通过 MAT 文件实现 MATLAB 与别的编程环境的 数据交互 MAT 文件是 MATLAB 数据存储的默认 文件格式 可以使用 MAT 文件来导入数据到 MATLAB 中和从 MATLAB 导出数据 它为 MAT LAB 与其他软件平台交流数据提供了一种机制 通过 MATLAB 计算引擎实现别的编程环境调 用 MATLAB 计算模块 MATLAB 计算引擎允许用 户在自己的应用程序中对 MATLAB 函数进行调 用 将 MATLAB 作为一个计算引擎使用 让其在 后台运行 这样可以简化前台用户程序的设计任 务 通过 MATLAB 编译器建立脱离 MATLAB 环境独立运行的应用程序 MATLAB 编译器是 MATLAB 提供的一个非常有用的工具 通过它可 以把 M 文件编译成 C 或 C 代码 从而在 C 或 C 语言中进行调用 产生脱离 MATLAB 但仍 能运用 MATLAB 数值计算功能的独立应用程序 2 VC 中数值计算环境的构建 工程实际中 很多时候我们都会涉及到大规 模的矩阵计算问题 对于熟悉 C 语言编程的工程 技术人员来说 MATLAB 数据的列向存储机制与 C 语言的横向存储机制经常引发一些低级别的错 误 而这些错误又是难以检查的 而且 如果我们 想使用 MATLAB 强大的计算模块时 还必须安装 一个如此庞大 MATLAB 应用程序的话 考虑到计 算机的运算速度等等各方面的因素 许多人最终 都放弃了这种想法 但是 如果能将整个的 MAT LAB 计算模块重新建立在自己的数据结构之上 的话 那么 不仅可以按照自己的思维来组织工程 实际中的信息 也可以利用 C 语言的重用机 制 将此计算模块移植到任何一个自主开发的应 用程序当中 提高工作效率 为了说明 以下建立一个简单的矩阵类 ma trix h matrix cpp typedef struct 定义矩阵元素 int iRow iColum 元素所在行 列位置 double dValue 元素值 MatrixElem class Matrix friend mxArray DataConversion Matrix m 自定义数据转换成 MATLAB 数据 friend Matrix DataConversion mxArray m MATLAB 数据转换成自定义数据 friend Matrix Calculate Matrix A Ma trix B 求解线性方程组 private int iNumRow iNumColum 矩阵的大 小 行 列数目 MatrixElem elems 结构指针 指向存 77第 20 卷第 2 期 王红卫等 Visual c 中 MATLAB 数学函数库的封装 贮矩阵元素的地址 矩阵类作为其它类的一个基类 可以实现两 维数组的存贮 运算符的重载更方便了矩阵类的 使用 下面以其中的一个函数 Calculate 为例来 演示具体的封装方法 3 MATLAB 数学函数库的封装 在 MATLAB 系统中用 mex setup 命令和 mbuild setup 命令来配置 Microsoft Visual C C version 6 0 编译器时 将自动安装 MATLAB Visual Studio Add in 安装 Add in 后将在 VC 的新 建工程窗口中加入一项 MATLAB Project Wizard 可以引导开发人员选择建立四种与 MATLAB 交 互的 VC 工程 安装 Add in 后还将在 VC 中增加 一组工具栏 其中包括四个按钮 功能分别为 在 工程中加入 文件 打开 MATLAB 矩阵值查看窗 口 打包发布向导 MATLAB Add in 帮助 利用其 中的打包发布向导可以将工程文件以及工程中用 到的 MATLAB 函数库和运行库打成一个压缩包 以便于发布 VC 中的 MATLAB 工程向导和打包 发布功能给 VC 和 MATLAB 的混合编程带来了不 少便利 是非常实用的工具 通过它 可以方便地 应用 C 语言 mex 程序 也可以将 M 代码文件嵌入 到 VC 工程中 还可以生成脱离 MATLAB 环境而 独立运行的程序和动态链接库文件 3 1 MATLAB 中编译源 m 文件 先在 MATLAB 中编写如下 m 文件 solver m function x solver k y x k y 用以求解线性方程 在 MATLAB 环境中执行 mcc t L c solver m 命令 生成 solver c 和 sol ver h 两个文件 3 2 VC 中设置编译环境 建立一个 VC 工程 如 Example 首先设置 VC 头文件搜索路径和库文件搜索路径 从 Tools Options 中选择 Directories 属性页 include files 添 加头文件搜索路径 extern include 和 extern include cpp 和库文件搜索路径 extern lib win32 和 extern lib win32 microsoft MS VC60 然后 从 Project Settings 中选择 C C 属性页 在 Preprocessor definitions 编辑框中添加 以下 3 个字符串 MSVC IBMPC MSWIND 再选择 Link 属性页 添加以下库文件 libmmfile lib lib matlb lib libmx lib libmat lib libmatpm lib sgl lib libmwsglm lib 3 3 VC 中函数的封装 将 solver c 和 solver h 拷贝到 Example 目录 下并向工程添加这两个文件 在 matrix h 文件的 头部加入 include solver h 和 include mat h 然后修改实现函数 Matrix Matrix Calculate const Matrix A const Matrix B 求解 AX B 线性方程组 int m1 n1 m2 n2 m1 A GetRow 获得矩阵的行数 n1 A GetColum 获得矩阵的列数 m2 B GetRow n2 B GetColum mxArray x1 NULL 构造 MATLAB 矩 阵 mxArray x2 NULL mxArray result NULL x1 DataConversion A 将自定义矩阵 转换成 MATLAB 矩阵 x2 DataConversion B result mlfSolver x1 x2 调用函数计算 线性方程组 Matrix X X DataConversion result 将计算结果 转换成自定义矩阵类型 mxDestroyArray x1 mxDestroyArray x2 mxDestroyArray result return X 返回结果数据 4 结束语 如何最大限度地利用现有软件开发平台 尤 其是跨平台进行专业软件的开发 这是一个值得 思考和研究的问题 充分高效的利用不同软件平 台各自的优势 势必能有效的缩短开发周期 提高 系统性能 这无疑对专业软件的开发具有重要意义 下转第 82 页 87南华大学学报 自然科学版 2006 年 6 月 图 2 支架作用荷载与钢管桩反力关系 Fig 2 Loads on the scaffolding and reaction force of steel pipe piles 图 3 横向工字钢上钢管轴向应力分布图 Fig 3 Axial stress of steel pipes 5 结论 由钢管桩支撑的支架体系 具有传递和分配 荷载的作用 靠近钢管桩支撑位置的钢管轴力大 远离钢管桩支撑位置的钢管轴力小 在计算支架 体系承载力时钢管轴力均匀分布的假定不成立 斜杆应尽量沿上游与下游对称布置 同时要将支 架体系作为整体结构进行考虑 纵横梁的共同作 用使支架体系承载力大大提高 参考文献 1 刘学庆 大跨连续槽形梁混合支架体系的设计与施 工 J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 知识产权网上培训课件
- 知识产权深度培训总结课件
- 2025年慈善组织财务总监能力测试题
- 2025年病案编码员考试题库(六)资格证考试模拟试题练习(含答案)
- 知识产权培训讲师简介课件
- 2025年工业互联网平台漏洞扫描技术安全漏洞分析与利用案例研究
- 2025年全国安全知识竞赛试题库附答案
- 知识产权培训的意义
- 知识产权培训报告
- 澳门公司防疫知识培训课件
- 教学副校长给教师培训课件
- 一级建造师之一建矿业工程实务高分复习资料
- 交通信号设施施工技术交底
- 关于股权性质与货币市场的思考
- 市场监管个人纪律作风整顿心得体会
- 育婴员理论模拟考试试题及答案
- 小学数学教师业务水平考试试题
- 安全文明施工措施费支付申请表实用文档
- 杨式85式太极拳现用图解
- YY/T 1095-2015肌电生物反馈仪
- GB/T 2480-2022普通磨料碳化硅
评论
0/150
提交评论