收藏 分享(赏)

Matlab与VC混合编程.doc

上传人:hwpkd79526 文档编号:7468709 上传时间:2019-05-19 格式:DOC 页数:47 大小:2.24MB
下载 相关 举报
Matlab与VC混合编程.doc_第1页
第1页 / 共47页
Matlab与VC混合编程.doc_第2页
第2页 / 共47页
Matlab与VC混合编程.doc_第3页
第3页 / 共47页
Matlab与VC混合编程.doc_第4页
第4页 / 共47页
Matlab与VC混合编程.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、1浅 析 VC 与 matlab 接 口 编 程 (一 ) 作 者 : 孙 科QQ:44760299 邮 箱 : c_Matcom 是 mathTools 公 司 推 出 的 一 个 能 将 M 文 件 转 化 成 相 同 功 能 C+代码 的 工 具 。 相 比 Matlab 自 带 的 编 译 器 Compiler, 用 Matcom 转 化 代 码 要 简 单 和方 便 得 多 。 本 文 将 结 合 作 者 编 程 经 验 , 以 VC6.0 和 Matcom 为 例 , 详 细 介 绍 如何 利 用 Matcom 进 行 VC 与 Matlab 的 联 合 编 程 。 Matcom

2、安 装 安 装 Matcom 前 要 已 求 安 装 VC6.0。 在 安 装 过 程 中 出 现 选 择 编 译器 对 话 框 , 选 择 “是 ”( 图 一 ) 。 出 现 选 择 是 否 安 装 Matlab 时 , 选 “否 ”。 其他 选 项 采 用 默 认 设 置 。 Matcom 可 以 独 立 于 Matlab 运 行 , 但 需 要 外 部 的 C+编译 器 , 指 定 Matlab 的 位 置 是 为 了 让 编 译 文 件 中 需 要 的 一 些 系 统 函 数 找 到 路 径 用 的 。图 一安 装 完 成 后 , 启 动 界 面 MIDEVA(图 二 )。 MIDEV

3、A 集 成 开 发 环 境 包 括 命 令 行窗 口 、 变 量 列 表 窗 口 、 命 令 列 表 窗 口 和 编 译 链 接 信 息 窗 口 等 几 部 分 , 并 有 详 细 的 帮助 文 档 。 2图 二Matcom 命 令 输 入 方 法 与 Matlab 相 同 。 如 果 安 装 在 中 文 版 操 作 系 统 时 , 输 入 命 令前 加 一 空 格 。 ( 如 图 三 ) 。 图 三下 面 详 细 介 绍 如 何 将 m 文 件 编 译 后 放 入 VC 中 。1、 启 动 MIDEVA ,File-New, 新 建 如 下 Test1.m 文 件 :x=1:0.1:10;

4、y=sin(x); plot(x,y); 将 文 件 保 存 ( 如 图 四 ) 。3图 四m 文 件 保 存 的 默 认 位 置 为 : matcom 安 装 目 录 matcom45, 生 成 的 C+文 件 保存 的 默 认 位 置 为 : matcom 安 装 目 录 matcom45Debug, 本 例 matcom 安 装 目录 为 C 盘 即 C:matcom45Debug,在 该 目 录 下 将 会 产 生Test1.h、 Test1.cpp、 Test1.r 、 Test1.obj 文 件 。2、 在 VC 中 用 MFC Wizard(exe)创 建 一 个 基 于 对 话

5、 框 名 为 Example 的 工 程 。在 面 板 上 添 加 一 个 ID 为 IDC_BUTTON1 按 扭 。3、 将 C:matcom45Debug 目 录 下 的 Test1.cpp 文 件 的 内 容 拷 贝 到void CExamleDlg:OnButton1()下 , ( 如 图 五 ) 。 4图 五 4、 将 C:matcom45lib下 的 matlib.h 和 v4501v 文 件 和 C:matcom45debug下 的 Test1.h 文 件 拷 贝 到 工 程 Example 目 录 下 , 然 后 在 VC 中 将 库 文 件 和 头 文 件加 入 到 工 程

6、 中 : 工 程 -添 加 工 程 -Files,选 择 刚 刚 拷 贝 到 Example 目 录 下 的matlib.h 、 v4501v 和 Test1.h 文 件 ( 如 图 六 ) 。5图 六 5、 在 ExamleDlg.cpp 中 加 入 如 下 代 码 :#include “matlib.h“#include “Test1.h“6、 在 void CExamleDlg:OnButton1()中 分 别 添 加 一 个 初 始 化 类 库 调 用 函 数 ”initM(MATCOM_VERSION)”和 一 个 结 束 类 库 调 用 函 数 ”exitM()”( 如 图 七 )

7、 。 图 七 6运 行 程 序 , 点 击 画 图 按 扭 ( 如 图 八 ) 。图 八 程 序 的 release 版 本 需 要 ago4501.dll、 v4501v.dll、 v4501.lib 三 个 文 件 的 支持 。 以 上 只 是 介 绍 了 VC 和 Matcom 接 口 编 程 的 一 个 简 单 例 子 , 功 能 并 不 完 善 , 也远 远 达 不 到 一 个 软 件 所 要 求 的 水 平 , 但 只 要 熟 悉 了 VC 和 Matcom 接 口 编 程 的 基本 原 理 和 方 法 , 相 信 大 家 一 定 能 够 编 出 优 秀 的 软 件 。7浅 析 V

8、C 与 Matlab 联 合 编 程 ( 二 )在 “浅 析 VC 与 Matlab 联 合 编 程 ( 一 ) ”中 简 单 介 绍 了 VC 与 matcom 的接 口 编 程 , 实 现 了 VC 调 用 matcom 的 一 个 基 本 功 能 , 要 真 正 熟 练 使 用 接 口 编 程 ,还 要 对 函 数 调 用 有 一 定 了 解 。 本 文 通 过 一 个 实 例 , 较 详 细 的 介 绍 如 何 在 VC 中 调用 matcom 编 译 后 的 函 数 。 首 先 新 建 一 个 函 数 huatu.m, 该 函 数 的 功 能 是 :接 受 用 户 输 入 的 左 端

9、 点 值 和 右端 点 值 两 个 输 入 参 数 , 然 后 在 该 区 间 画 正 弦 图 形 。 函 数 还 将 生 成 两 个 随 机 数 , 作 为一 个 点 的 坐 标 在 图 中 打 印 出 来 ( 绿 点 ) , 用 来 说 明 如 何 在 VC 中 处 理 调 用 函 数 的返 回 值 。 步 骤 如 下 :1 建 立 一 个 名 为 Example2 基 于 对 话 框 的 MFC(exe)工 程 。2 在 matcom 中 新 建 一 个 名 为 huatu.m 文 件 , 如 图 1;图 13.在 matcom 命 令 窗 口 中 运 行 该 函 数 ,如 图 2;8图

10、 24 将 生 成 的 huatu.h、 huatu.cpp( 默 认 位 置 为 安 装 目 录 :matcom45samplesDebug) 和 matlib.h、 v4501v.lib( 默 认 位 置 为 安 装 目 录 :matcom45lib) 四 个 文 件 拷 贝 到 建 立 的 工 程 Example2 目 录 下 。5 将 第 四 步 拷 贝 的 四 个 文 件 加 入 到 VC 工 程 中 : 工 程 -添 加 工 程 -文 件 , 选 择刚 才 拷 贝 到 Example2 目 录 下 的 四 个 文 件 。 完 成 后 如 图 3;9图 36 在 Example2dl

11、g.cpp 中 添 加 头 文 件 : (如 图 4 所 示 )#include “matlib.h“#include “huatu.h“10图 47 为 工 程 建 立 界 面 : 添 加 一 个 Button 按 扭 控 件 ; 添 加 四 个 Edit box 控 件 , 用于 显 示 数 据 ; 添 加 五 个 Static text 控 件 , 四 个 显 示 文 字 , 一 个 显 示 图 形 , 将 显 示图 形 的 Static text 的 ID 设 置 为 ID_PIC。 其 他 所 有 控 件 属 性 保 持 默 认 (为 了 看 图方 便 , 可 以 适 当 调 整 显

12、 示 图 形 Static text 控 件 的 边 缘 )。 如 图 5 所 示11图 58 按 Ctrl+W 为 控 件 添 加 变 量 。 如 图 6 所 示图 69 为 Button1 按 钮 添 加 响 应 代 码 。 如 图 7 所 示图 710 运 行 程 序 , 输 入 左 端 点 和 右 端 点 , 点 击 ”画 图 ”按 钮 , 结 果 如 图 8 所 示 。12( 本 例 只 是 为 了 说 明 如 何 调 用 函 数 , 没 有 进 行 容 错 处 理 )图 8注 : 如 果 在 编 译 中 出 现 下 列 错 误 :fatal error C1010: unexpec

13、ted end of file while looking for precompiled header directive进 行 下 列 设 置 : 工 程 -设 置 - C/C+ 选 择 precompiled headers 选 择 第一 或 第 二 项 : 自 动 选 择 预 补 偿 页 眉 ,如 图 9 所 示13图 9本 例 介 绍 了 在 VC 中 如 何 调 用 用 matcom 编 译 的 m 函 数 的 方 法 , 并 且 基 本 上实 现 了 VC 和 Matlab 的 无 缝 结 合 , 希 望 对 大 家 编 程 会 有 所 帮 助 , 现 在 时 间 很 紧 , 下

14、次 有 机 会 详 细 介 绍 m 文 件 翻 译 成 C+语 言 后 代 码 的 含 义 。 我 的 QQ:44760299 欢 迎 大 家 一 起 讨 论 !浅 析 VC 与 Matlab 联 合 编 程 在 “浅 析 VC 与 Matlab 联 合 编 程 ”和 “浅 析 VC 与 Matlab 联 合 编 程 ”中 介 绍 了 matcom, 这 个 工 具 可 以 将 用 matlab 写 的 m 文 件 翻 译 成 C+文件 , 或 者 是 可 执 行 文 件 ( exe) 或 库 文 件 (dll)。 但 是 matcom 在 很 多 方 面 也 有 限制 , 比 如 , 对 s

15、truct 等 类 的 支 持 有 缺 陷 , 部 分 绘 图 语 句 无 法 实 现 或 得 不 到 准 确 图 象 ,尤 其 是 三 维 图 象 。实 际 上 VC 与 matlab 的 接 口 实 现 方 法 有 很 多 种 , matcom 只 是 其 中 一 种 , 本文 再 介 绍 一 种 比 较 容 易 实 现 的 方 法 : COM 接 口 方 法 。 COM( Compponent Object Model 组 件 对 象 模 型 ) 是 一 项 比 较 复 杂 的 技 术 , 详 细 讲 的 话 几 本 书 也 讲 不 完 ,所 以 在 这 里 不 作 介 绍 , 本 文

16、通 过 一 个 例 子 详 细 介 绍 如 何 在 matlab 下 做 COM 组件 , 以 及 如 何 在 VC 中 调 用 COM 组 件 。首 先 在 Matlab 编 辑 器 里 编 辑 m 函 数 文 件 : 启 动 matlab-File-New-M-file 函 数 内 容 如 图 1: 该 函 数 无 输 入 输 出 参 数 , 文 件 保 存 为 huatu.m。14图 1 m 函 数 huatu.m在 matlab 下 建 立 COM 组 件 , 步 骤 如 下 : 1、 在 matlab command window 输 入 如 下 命 令 : comtool 出 现

17、com 编 辑 界 面 , 如 图 2: 图 2 com 组 件 编 辑 界 面152、 新 建 工 程 : File-New Project,如 图 3。 图 3 com 组 件 属 性 设 置 图 4 com 组 件 属 性 设 置 13、 设 置 组 件 属 性 , 在 “Component name“项 中 填 写 组 件 名 称 “component“,这 时候 会 自 动 生 成 类 “component“,在 “Class name“项 中 填 写 类 名 称 “huatu“,如 图 4为 了 便 于 区 分 ,选 中 “Classes“中 的 “component“,点 击 “

18、remove”按 钮 , 将 类component 移 除 , 再 点 击 “Add“添 加 新 类 huatu,结 果 如 图 5。 点 击 “OK“, 接下 来 出 现 一 个 对 话 框 , 选 择 “Yes“. 16图 5 com 组 件 属 性 设 置 24. 添 加 文 件 : 选 中 左 边 工 作 区 的 “huatu“,点 击 Project-Add File, 选 择 已 经编 辑 好 的 函 数 文 件 huatu.m,如 图 6。 需 要 注 意 的 是 m 文 件 必 须 是 m 函 数 ,否 则会 报 错 ,如 果 是 m 脚 本 文 件 的 话 ,只 需 要 改

19、为 无 输 入 输 出 参 数 的 m 函 数 即 可 。 17图 6 添 加 m 文 件5、 生 成 com 组 件 :点 击 Build-COM Object, 结 果 如 图 7。 图 7 com 组 件 已 经 由 matlab 做 好 , 默 认 的 保 存 位 置 为 : matlab 安 装 位 置workcomponent。 VC 中 调 用 COM 组 件 ,步 骤 如 下 : 1、 在 VC 中 建 立 名 为 ComHuaTu 的 基 于 对 话 框 的 MFC(exe)。 2、 面 板 上 添 加 一 个 名 为 “画 图 ”的 button 按 钮 , 如 图 8。

20、18图 7 工 程 界 面 3、 将 component_idl.h 和 component_idl_i.c 文 件 拷 贝 到 VC 建 立 的 工 程ComHuaTu 目 录 下 。 两 文 件 默 认 目 录 为 workcomponentsrc 4、 将 上 面 两 文 件 加 入 工 程 : 工 程 -添 加 工 程 -Files, 选 择 刚 刚 拷 到 目 录 下 的component_idl.h 和 component_idl_i.c 文 件 。 5、 将 目 录 /extern/include/下 的 mwcomtypes.h 拷 贝 到 工 程 ComHuaTu 目 录 下

21、 ,并 加 入 到 工 程 中 , 方 法 同 上 。 6、 为 程 序 添 加 头 文 件 component_idl.h 、 component_idl_i.c 和mwcomtypes.h, 结 果 如 图 9 图 9 添 加 头 文 件7、 按 钮 画 图 函 数 添 加 代 码 : 图 10 添 加 按 钮 函 数 代 码函 数 代 码 的 意 义 涉 及 到 COM, 正 在 写 VC 调 用 COM 组 件 所 涉 及 到 的 有 关 COM方 面 的 知 识 。 8、 设 置 预 编 译 头 文 件 : 工 程 -设 置 (快 捷 键 Alt+F7), 选 择 C/C+项prec

22、omplied Headers, 设 置 如 图 11 19图 11 预 编 译 头 文 件 设 置9、 编 译 、 连 接 、 运 行 , 结 果 如 图 12。 图 11 运 行 结 果20可 以 看 出 利 用 VC 调 用 com 组 件 的 方 式 来 调 用 matlab 比 较 简 单 , 而 且 几 乎支 持 matlab 所 有 的 函 数 , 在 m 文 件 较 大 、 用 matcom、 调 用 math library 或 使用 mcc 方 式 无 法 实 现 的 时 候 , 推 荐 使 用 。 需 要 说 明 的 是 , 以 上 程 序 拷 到 另 一 台 机 器上

23、是 无 法 直 接 运 行 的 , 因 为 COM 组 件 没 有 新 机 器 上 注 册 , 如 果 要 在 另 一 台 机 器 上使 用 的 话 , 还 需 要 打 包 安 装 COM 组 件 , 并 且 由 于 本 程 序 代 码 很 简 单 , 所 以 也 就 不提 供 源 程 序 了 , 自 己 可 以 动 手 做 一 下 。 本 人 正 在 写 一 本 关 于 VC 和 matlab 接 口 方 面 的 书 , 估 计 年 底 完 稿 , 详 细 介 绍VC 和 matlab 接 口 的 几 种 方 法 , 并 提 供 详 细 的 例 子 , 例 子 都 是 我 自 己 写 过 的

24、 , 欢 迎大 家 提 供 些 好 的 意 见 和 建 议 。浅 析 VC 与 MATLAB 联 合 编 程 在 浅 析 VC 与 MATLAB 联 合 编 程 、 浅 析 VC 与 MATLAB 联 合 编 程 和浅 析 VC 与 MATLAB 联 合 编 程 中 简 单 介 绍 了 VC 和 MATLAB 接 口 的 两 种 方法 , 初 学 者 可 能 会 问 为 什 么 要 用 VC 和 MATLAB 接 口 , 接 口 的 实 质 又 是 什 么 , 本文 就 通 过 一 个 例 子 来 回 答 这 两 个 问 题 。 首 先 来 介 绍 一 下 MATLAB。 MATLAB 名 字

25、 由 MATrix 和 LABoratory 两 词 的前 三 个 字 母 组 合 而 成 。 那 是 20 世 纪 七 十 年 代 后 期 的 事 : 时 任 美 国 新 墨 西 哥 大 学 计算 机 科 学 系 主 任 的 Cleve Moler 教 授 出 于 减 轻 学 生 编 程 负 担 的 动 机 , 为 学 生 设 计 了一 组 调 用 LINPACK 和 EISPACK 库 程 序 的 “通 俗 易 用 ”的 接 口 , 此 即 用FORTRAN 编 写 的 萌 芽 状 态 的 MATLAB。经 几 年 的 校 际 流 传 , 在 Little 的 推 动 下 , 由 Litt

26、le、 Moler、 Steve Bangert合 作 , 于 1984 年 成 立 了 MathWorks 公 司 , 并 把 MATLAB 正 式 推 向 市 场 。 从 这 时起 , MATLAB 的 内 核 采 用 C 语 言 编 写 , 而 且 除 原 有 的 数 值 计 算 能 力 外 , 还 新 增 了 数据 图 视 功 能 。MATLAB 以 商 品 形 式 出 现 后 , 仅 短 短 几 年 , 就 以 其 良 好 的 开 放 性 和 运 行 的 可 靠性 , 使 原 先 控 制 领 域 里 的 封 闭 式 软 件 包 ( 如 英 国 的 UMIST, 瑞 典 的 LUND

27、和SIMNON, 德 国 的 KEDDC) 纷 纷 淘 汰 , 而 改 以 MATLAB 为 平 台 加 以 重 建 。 在 时 间进 入 20 世 纪 九 十 年 代 的 时 候 , MATLAB 已 经 成 为 国 际 控 制 界 公 认 的 标 准 计 算 软 件 。MATLAB 已 经 成 为 目 前 国 际 上 最 流 行 、 应 用 最 广 泛 的 科 学 工 程 计 算 软 件 , 它 广 泛 的应 用 于 自 动 控 制 、 数 学 运 算 、 信 号 分 析 、 图 象 处 理 、 财 务 分 析 等 各 行 各 业 。 由 于 它具 有 强 大 的 计 算 和 绘 图 功

28、能 、 大 量 稳 定 可 靠 的 算 法 库 和 简 洁 高 效 的 编 程 语 言 , 已 成为 数 学 计 算 工 具 方 面 事 实 上 的 标 准 。在 欧 美 大 学 里 , 诸 如 应 用 代 数 、 数 理 统 计 、 自 动 控 制 、 数 字 信 号 处 理 、 模 拟 与数 字 通 信 、 时 间 序 列 分 析 、 动 态 系 统 仿 真 等 课 程 的 教 科 书 都 把 MATLAB 作 为 内容 。 这 几 乎 成 了 九 十 年 代 教 科 书 与 旧 版 书 籍 的 区 别 性 标 志 。 在 那 里 , MATLAB是 攻 读 学 位 的 大 学 生 、 硕

29、 士 生 、 博 士 生 必 须 掌 握 的 基 本 工 具 。在 国 际 学 术 界 , MATLAB 已 经 被 确 认 为 准 确 、 可 靠 的 科 学 计 算 标 准 软 件 。 在 许多 国 际 一 流 学 术 刊 物 上 ( 尤 其 是 信 息 科 学 刊 物 ) 都 可 以 看 到 MATLAB 的 应 用 。 21在 设 计 研 究 单 位 和 工 业 部 门 , MATLAB 被 认 作 进 行 高 效 研 究 、 开 发 的 首 选 软 件 工具 。 如 美 国 National Instruments 公 司 信 号 测 量 、 分 析 软 件LabVIEW, Cade

30、nce 公 司 信 号 和 通 信 分 析 设 计 软 件 SPW 等 , 或 者 直 接 建 筑 在MATLAB 之 上 , 或 者 以 MATLAB 为 主 要 支 撑 。 又 如 HP 公 司 的 VXI 硬 件 , TM 公司 的 DSP, Gage 公 司 的 各 种 硬 卡 、 仪 器 等 都 接 受 MATLAB 的 支 持 。 为 了 说 明 问 题 , 我 们 举 个 例 子 : 解 下 列 线 形 方 程 组 : (如 图 1):图 1用 C 语 言 (VC 环 境 中 )编 写 的 代 码 为 :(图 2) 图 222编 译 、 连 接 , 运 行 结 果 为 : (图

31、3): 图 3而 该 方 程 在 MATLAB 中 只 需 要 一 个 命 令 “”就 可 以 解 决 :在 MATLAB 中 建 立 一 个 新 的 m 文 件 , 在 MATLAB 菜 单 中 : File-New-M file(如 图 4): 图 4在 M 文 件 中 输 入 代 码 , 并 保 存 为 QJFCZ.m。 (如 图 5) 图 523在 MATLAB Command 命 令 窗 口 中 输 入 以 下 命 令 : QJFCZ然 后 回 车 , 结 果 如 下 :x =-0.14292.78570 可 以 看 出 用 MATLAB 写 出 的 代 码 十 分 简 单 , 对

32、于 上 面 的 方 程 , 如 果 矩 阵 A和 b 的 维 数 发 生 变 化 的 话 , C 代 码 还 要 重 新 编 写 , 而 用 MATLAB 书 写 的 代 码 几乎 不 用 改 动 , 只 需 改 变 数 据 即 可 。 如 果 现 在 我 们 用 VC 编 写 的 一 个 软 件 , 其 中 要 求 解 有 5 个 未 知 数 的 线 形 方 程组 , 如 果 用 CC+语 言 来 写 程 序 的 话 其 编 程 量 是 很 大 的 , 如 果 在 CC+语 言 中能 用 MATLAB 那 么 简 单 的 代 码 来 实 现 该 功 能 就 可 以 大 大 减 少 工 作 量

33、 , VC 和MATLAB 接 口 就 是 做 这 个 工 作 的 。 MATLAB 中 提 供 了 大 量 用 CC+重 新 编 写 的MATLAB 库 函 数 , 包 括 初 等 数 学 函 数 、 线 形 代 数 函 数 、 矩 阵 操 作 函 数 、 数 值 计 算 函数 、 特 殊 数 学 函 数 、 插 值 函 数 等 等 , 还 可 以 利 用 MATLAB 的 编 译 工 具 将 m 文 件方 便 的 转 化 为 CC+语 言 、 可 执 行 程 序 (exe)、 动 态 连 接 库 文 件 (dll)、 COM 组 件等 等 , 并 可 直 接 供 CC+语 言 调 用 ,

34、利 用 VC 和 MATLAB 接 口 技 术 可 以 在 VC 中充 分 发 挥 MATLAB 的 数 值 计 算 功 能 , 并 且 可 以 不 依 赖 MATLAB 软 件 运 行 , 我 们在 编 写 程 序 时 , 可 以 在 VC 下 做 出 很 漂 亮 的 界 面 , 而 把 复 杂 的 数 值 处 理 交 给MATLAB 去 做 (实 际 上 MATLAB 也 能 做 界 面 GUI(Graphic User Interface),而 且 做出 的 界 面 我 认 为 并 不 比 VC 逊 色 , 但 是 需 要 MATLAB 软 件 作 为 后 台 运 行 , 如 果 不依

35、赖 MATLAB 软 件 运 行 的 话 , 可 以 在 VC 中 调 用 GUI), 然 后 通 过 接 口 技 术 将MATLAB 集 成 到 VC 中 , 这 样 可 以 大 大 减 轻 编 程 的 负 担 , 并 减 少 程 序 编 写 时 间 。 事 实 上 正 是 由 于 MATLAB 数 值 计 算 功 能 的 强 大 , MATLAB 与 许 多 程 序 都 有 接口 , 例 如 Fortran、 VB、 Java、 SPSS(一 个 著 名 的 统 计 软 件 )、 Excel、 Word 等 ,其 实 质 也 是 通 过 接 口 在 程 序 中 调 用 MATLAB 的 功

36、 能 。精 通 VC 与 Matlab 联 合 编 程 ( 五 )在 前 面 的 介 绍 中 ,只 是 简 介 绍 了 VC 与 Matlab 程 序 设 计 的 几 个 简 单 例 子 , 很 多关 键 性 的 知 识 都 没 有 介 绍 ( 例 如 函 数 的 输 入 输 出 格 式 , VC 中 调 用 工 具 箱 函 数 ,编 译 器 的 使 用 , 几 种 方 法 的 混 合 使 用 等 等 ) 在 以 后 的 文 章 中 , 将 会 对 这 些 知 识 进 行介 绍 (因 此 标 题 也 改 了 一 下 , 呵 呵 , 如 果 有 错 误 的 地 方 , 还 望 大 家 多 多 指

37、 点 )VC调 用 Matlab 的 方 法 有 多 种 , 为 了 对 混 合 编 程 有 一 个 大 概 认 识 , 将 常 用 的 几 种 方 法 中24介 绍 一 下 :一 、 通 过 Matlab Engine 方 式Matlab Engine 是 指 一 组 Matlab 提 供 的 接 口 函 数 ,支 持 C 语 言 , Matlab Engine 采 用 C/S(客 户 机 /服 务 器 )模 式 ,Matlab 作 为 后 台 服 务 器 ,而 C 程 序 作 为 前台 客 户 机 ,通 过 Windows 的 动 态 控 件 与 服 务 器 通 信 ,向 Matlab E

38、ngine 传 递 命 令 和数 据 信 息 ,从 Matlab Engine 接 受 数 据 信 息 。 用 户 可 以 在 前 台 应 用 程 序 中 调 用 这 些 接口 函 数 ,实 现 对 Matlab Engine 的 控 制 。 采 用 这 种 方 法 几 乎 能 利 用 Matlab 全 部 功能 , 但 是 需 要 在 机 器 上 安 装 Matlab 软 件 , 而 且 执 行 效 率 低 , 因 此 在 实 际 应 用 中 不采 用 这 种 方 法 , 在 软 件 开 发 中 也 不 可 行 , 我 认 为 适 合 个 人 使 用 或 做 演 示 用 , 因 此 不打 算

39、 介 绍 。 二 、 直 接 调 用 Matlab 的 C/C+数 学 函 数 库Matlab 中 提 供 了 可 以 供 C/C+语 言 调 用 的 C/C+数 学 函 数 库 , 其 中 包 含 了大 量 用 CC+语 言 重 新 编 写 的 Matlab 数 学 函 数 , 这 些 函 数 涉 及 到 线 形 代 数 、 数 值分 析 、 傅 立 叶 变 换 、 多 项 式 计 算 、 解 微 分 方 程 等 , 并 且 函 数 库 中 提 供 了 大 量 各 种 矩阵 操 作 函 数 , 在 VC 中 可 以 直 接 使 用 这 些 函 数 , 通 过 这 些 函 数 可 以 在 VC

40、 中 方 便的 实 现 在 Matlab 中 矩 阵 运 算 功 能 。 可 以 看 出 用 这 种 方 法 可 以 很 灵 活 的 调 用Matlab 来 编 写 应 用 程 序 , 但 要 求 读 者 对 CC+语 言 比 较 熟 悉 , 可 以 看 出 使 用 这 种方 法 调 用 Matlab 的 工 具 箱 函 数 有 很 大 困 难 。 适 合 对 CC+语 言 比 较 熟 悉 的 用 户使 用 , 三 、 用 Matlab 自 带 的 Matlab CompilerMatlab Compiler 的 作 用 是 将 m 文 件 转 化 成 C/C+代 码 ( 也 就 是 通 常

41、所 用 的mcc 命 令 ) ,这 种 源 代 码 需 要 用 C/C+编 译 器 编 译 连 接 成 独 立 应 用 程 序 , 在 将m 文 件 转 成 独 立 应 用 程 序 的 过 程 中 生 成 的 C/C+文 件 , 原 则 上 是 可 以 被 其 它 的C/C+代 码 调 用 的 , 编 译 器 可 以 通 过 设 置 mcc 命 令 的 选 项 , 将 m 文 件 编 译 成 动态 链 接 库 文 件 、 C/C+文 件 、 可 执 行 文 件 等 一 系 列 文 件 。 到 matlab R21.1 为 止 ,Matlab Compiler 的 m 程 序 转 换 成 C/C

42、+代 码 功 能 有 很 多 限 制 : 1. 不 能 转 换 脚 本 m 文 件 , 只 能 转 换 m 函 数 ; 2. 不 能 使 用 matlab 对 象 ; 3. 不 能 用 input 或 者 eval 操 作 matlab 空 间 变 量 ; 4. 不 能 动 态 地 命 名 变 量 , 然 后 用 load 或 者 save 命 令 来 操 作 ; 5. 不 能 处 理 具 有 嵌 套 调 用 其 他 m 文 件 的 m 文 件 ; 6. 不 能 使 用 MATLAB 内 联 函 数 ; 四 、 使 用 matlab 的 combuilde 工 具COM 是 component

43、 object module 的 简 称 , 它 是 一 种 通 用 的 对 象 接 口 , 任 何25语 言 只 要 按 照 这 种 接 口 标 准 , 就 可 以 实 现 调 用 它 。 matlab6.5 新 推 出 来 的combuilder 就 是 把 用 matlab 编 写 的 程 序 做 成 com 组 件 , 供 其 他 语 言 调 用 。 该 方法 实 现 简 单 , 通 用 性 强 , 而 且 几 乎 可 以 使 用 Matlab 的 任 何 函 数 (注 意 : 不 支 持 脚本 文 件 , 脚 本 文 件 使 用 时 要 改 为 函 数 文 件 ), 因 此 在 程

44、序 较 大 、 调 用 工 具 箱 函 数 或调 用 函 数 较 多 时 推 荐 使 用 , 这 也 是 Matlab 公 司 (Matlab 公 司 就 是 Mathworks 公司 )推 荐 的 使 用 方 法 。 五 、 使 用 matcom 工 具 。这 是 个 第 三 方 控 件 , 很 小 (8M 多 ),原 本 属 于 mathtool 公 司 , 后 来 被Mathworks 公 司 合 并 了 , 使 用 该 工 具 可 以 将 m 脚 本 文 件 和 m 函 数 转 化 成 相 同 功能 的 CC+文 件 , 相 比 其 它 方 法 使 用 matcom 具 有 如 下 优

45、 点 : 1. 转 换 过 程 简 单 (由 matcom 工 具 自 动 实 现 ), 容 易 实 现 ; 2. 可 以 方 便 的 生 成 动 态 链 接 库 文 件 (dll)和 可 执 行 文 件 (exe); 3. 不 仅 可 以 转 换 独 立 的 脚 本 文 件 , 也 可 以 转 换 嵌 套 脚 本 文 件 ; 4. 设 置 环 境 后 , 可 以 使 用 Matlab 的 工 具 箱 函 数 ; 但 matcom 也 有 以 下 不 足 : 1. 对 struct 等 类 的 支 持 有 缺 陷 , 对 class 数 据 类 型 ; 2. 部 分 绘 图 语 句 无 法 实

46、 现 或 得 不 到 准 确 图 象 , 尤 其 是 三 维 图 象 ; 因 此 在 不 涉 及 到 三 维 做 图 以 及 m 文 件 不 大 的 情 况 下 推 荐 使 用 。以 上 几 种 方 法 可 以 单 独 使 用 , 也 可 以 混 合 使 用 。 这 里 简 单 的 介 绍 了 VC 和matlab 接 口 的 几 种 方 法 , 读 者 可 以 根 据 需 要 选 择 适 合 自 己 的 方 法 。 需 要 说 明 的 是 上以 上 几 种 方 法 并 不 是 相 互 独 立 的 , 而 是 有 相 互 联 系 的 , 比 如 使 用 C/C+函 数 库与 使 用 编 译 器

47、 , 对 于 实 现 相 同 功 能 的 程 序 , 直 接 调 用 函 数 库 与 使 用 编 译 器 最 终 生 成的 代 码 可 能 相 差 不 大 , 只 不 过 一 个 是 直 接 在 VC 中 写 C/C+代 码 , 一 个 是 在Matlab 中 写 好 m 代 码 , 然 后 通 过 编 译 器 将 m 代 码 转 化 成 相 同 功 能 的 C/C+代码 , 而 在 转 化 的 过 程 中 也 需 要 调 用 相 应 的 C/C+函 数 库 文 件 。 在 后 面 的 文 章 中 将从 第 二 种 方 法 开 始 进 行 介 绍精 通 VC 与 Matlab 联 合 编 程

48、( 六 )Matlab CC+函 数 库 是 Matlab 扩 展 功 能 重 要 的 组 成 部 分 ,包 含 了 大 量 的 用CC+语 言 重 新 编 写 的 Matlab 函 数 ,主 要 包 括 初 等 数 学 函 数 、 线 形 代 数 函 数 、 矩 阵操 作 函 数 、 数 值 计 算 函 数 、 特 殊 数 学 函 数 、 多 项 式 函 数 、 插 值 函 数 等 , 用 户 可 以 在自 己 的 CC+程 序 中 调 用 这 些 函 数 ,实 现 复 杂 的 矩 阵 计 算 功 能 , 从 而 减 少 程 序 设 计26工 作 量 , 需 要 说 明 的 是 C 函 数

49、库 和 C+函 数 库 是 两 个 不 同 的 函 数 库 。在 使 用 前 需 要 进 行 安 装 :在 Matlab 命 令 窗 口 中 输 入 :mbuild -setup按 照 提 示 选 择 VC 的 编 译 器 , 完 成 后 在 Matlab 命 令 窗 口 中 输 入 :mex -setup同 样 选 择 VC 的 编 译 器 , 就 完 成 编 译 器 的 安 装 和 配 置 。首 先 介 绍 下 C 函 数 库 , C 数 学 函 数 库 所 需 要 的 库 函 数 在 该 目 录 下 : Matlab 根 目录 :externlib下 面 来 看 matlab 自 带 的 一 个 使 用 C 函 数 库 的 例 子 (所 有 使 用 c 函 数 例 子 在 :matlab 根 目 录 externexamplescmath): * ex1.c* Copyright (c) 1995-1999 by The Mathworks, Inc. All Rights Reserved.*/* $Revision: 1.6 $ */#include

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报