Matlab与VC混合编程之一

2023-11-19

Matlab与VC混合编程之一

1. 问题的提出,为什么需要用Matlab与VC混合编程

做工程项目时用的是VC,经常会用到科学计算的相关算法,比如矩阵求逆,求行列式,求微分方程组初值问题的数值解等问题。如果自己去编写相关的函数,首先需要去找一本较好的数值分析书,然后再根据书上的算法去编写相应的代码,之后再调试、测试,经常多次反复测试后,才可以放心使用。偷懒的方法也有,可以去网上搜索一些现成的代码,对找到的代码测试后才能放心使用。这两种方法都会消耗很大的精力和时间。有没有更好的方法?这就是本文要回答的问题。

我们都知道Matlab科学计算的强悍,大家都喜欢把跟数值运算或者相关工具箱有关的问题使用Matlab去求解。但是Matlab在做工程时其实时性或者界面达不到要求。现在我们把VC和Matlab的优点集成在一起,实现的方法就是Matlab与VC混合编程。混合编程是指在VC中调用Matlab的函数或者反过来在Matlab中调用VC的函数。这里先介绍前者,即在VC中调用Matlab的函数。我这里用的编译环境是VC 6.0和Matlab 7.0。其他版本的VC和Matlab的实现方式基本一样,有些跟Matlab版本相关的函数或者命令我会指出。

大家可以在图书馆找到相关的书籍或者网上找到相关的博文或者代码,这里是我对这些天来自己工作的总结。很多事情,看别人现成的很简单,自己亲自做做,会感觉不是那么回事,总会遇到这样那样的问题。这里将我遇到的问题和解决问题的方法也写出来,跟大家一起分享。

2. 实现混合编程的方法及特点

经过学习和摸索,目前实现在VC中调用Matlab函数的方法大概有5种,分别是:a.使用Matcom数学库,b.使用Matlab引擎(Engine),c.使用动态链接库DLL,d.使用COM(Component Object Model), e.使用Matlab 6.5提供的C\C++数学函数库。各种方法的特点如下:

     a.使用Matcom数学库。Matcom使用简单,但只支持到Matlab 5.3版,且部分绘图显示不准确。

     b.使用Matlab引擎(Engine)。使用简单,但是不能脱离Matlab环境独立运行。实际上,Matlab引擎在后台工作着,VC生成的.exe程序的运行时给Matlab引擎传递要执行的命令。如果不是工程项目,是推荐的方法之一。

     c.使用动态链接库DLL。使用简单,但存在不能使用Matlab对象等一些限制,是推荐的方法之一。

     d.使用COM。使用不是很简单,但是功能强大,几乎可以使用Matlab的所有功能。是推荐的方法之一。

     e.使用Matlab 6.5提供的C\C++数学函数库。如果只是用数学函数库的话,是推荐的方法之一。该方法无法使用6.5版本之后的函数。

综合比较5种方法的特点,我首先选择了方法d使用COM来实现VC中调用Matlab函数,所以首先介绍我在使用这种方法遇到的问题及解决方法。

3. 使用COM:基础知识

COM是建立在二进制级别上的规范,不依赖于特定的开发语言。使用COM实现不同语言之间的协作开发是非常方便的。COM组件由一个或者多个COM对象构成,COM对象通过接口与使用COM的客户交互,如图1所示。

Matlab与VC混合编程之一

图1 COM组件

在VC中调用COM组件的步骤共4步,如下:
    a.初

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab与VC混合编程之一 的相关文章

  • jar包与war包部署的区别及jar包部署的一个路径访问问题

    1 jar包与war包部署的区别 什么是jar包 jar包是类的归档文件 jar文件格式以流行的ZIP文件格式作为基础 和ZIP文件不一样的是 JAR文件不仅仅用来进行压缩和发布 还用来部署和封装库 组件以及插件程序 并且 还能够被像编译器
  • 《Centos7——logstash启动报错》

    logstash启动报错 root localhost systemctl start logstash Failed to start logstash service Unit not found 解决方法 root localhost
  • python入门指南

    python入门指南 python是一门简单易学且功能强大的编程语言 它拥有高效的高级数据结构 并且能够简单而又高效的方式进行面向对象编程 python是一门解释性语言 因为无需编译和链接 在开发中节省时间 使用python解释器 调用py
  • docker容器无法启动, no space left on device

    背景 通过jekens 部署服务 发现部署失败 后通过手动拉取镜像发现直接报错 报错大致意思就是没有剩余可用空间 复现路径 如下操作 启动容器docker start 3ad663158cf6 报错 Error response from
  • Free C, C++ Compilers(免费的C/C++编译器)

    以下内容来源于 http www programmerworld net resources c compiler htm 1 Free Microsoft eMbedded Visual C Microsoft eMbedded Visu
  • 一分钟搞定微信小程序定位(wx.getLocation)功能

    欢迎大家来到我的一分钟系列 跟大家安利一分钟系列主要让大家快速完成一个功能少踩不必要的坑 先完成功能再悟其中的原理 这期主要为大家提供微信小程序的定位功能 换不多说 直接上干货 首先微信官方提供的wx getLocation 应用之后发现这
  • python采集keep运动数据

    我国2009年确立 全民健身日 2012年 广泛开展全民健身运动 写入十八大报告 到2014年上升为国家战略 全民健身的分量越来越重 推动全民健身和全民健康深度融合 通过全民健身实现全民健康 全民健身运动在我国越来越普及 每天清晨和傍晚时分
  • Umi+Dva初印象<基础应用,结构,流转逻辑>

    目录 前言 知识储备 generator函数 Dva初识 实际交互 函数式组件 class组件 前言 项目初始为umi脚手架进行初始化 lt 初始化过程 http t csdn cn cuTaY gt 工程中加载了umi自带的antd ui
  • 记一次开源PR

    提示 不要懒得看英文文档 要认真看别人的贡献文档 否则会浪费更多的时间 开源PR一般流程 1 远程仓库fork 2 你得发现bug或有优化修改 提交到fork的仓库 3 提issue 沟通 4 提PR 5 机器审核 修改问题 6 等待人工审
  • 【微信支付】分享一个失败的项目

    这个项目是去年做的 开始客户还在推广 几个月后发现服务器已经关掉了 这是一个发图片猜谜语的应用 用户猜对了分红包 所得奖金可以提现 开发的时候对需求都不太看好 觉得用户粘性太低了 今天就把所有的程序拿了出来 供有兴趣的伙伴玩耍 用户从公众号
  • C++Primer第三章习题

    3 2 编写一段程序从标准输入中一次读入一整行 然后修改该程序使其一次读入一个词 include
  • UITableViewCell 设置单元格选中后只显示一个打勾的状态

    UITableViewCell 设置单元格选中后只显示一个打勾的状态 2013 06 28 22 28 33 转载 标签 ios tableviewcell it 分类 iOS 今天做个表格 突然发现在选中某行时打勾 再次选中其它行时 上次
  • (最简单详细)关于nginx配置解决页面刷新以后404 Not Found和403 Forbidden

    仔细看我下面所说 每一步都是坑 1 页面刷新404 Not Found 1 问题原因 web单页面开发模式 只有一个index html入口 其他路径是前端路由去跳转的 nginx没有对应这个路径 所以就会报404了 2 解决方法 增加tr
  • Linux中常见目录操作和文件操作命令

    pwd命令 用于查看显示当前所在目录 ls命令 用于显示指定目录中的文件或子目录的信息 cd命令 用于切换当前用户所在的工作目录 其中路径可以是绝对路径 也可以是相对路径 mkdir命令 用于创建目录 rm命令 用于删除文件或目录 touc
  • QQ被盗后,如何找回好友

    QQ被盗了 可以再申请一个号码 但是QQ里面的好友却无法再申请了 特别是一些重要的联系人也丢失了 下面的方法可以帮你找回好友 1 确认电脑中保存着被盗QQ号码的登录记录 也就是QQ安装目录下的包含这个号码为目录名的子目录 如果你采用的是网吧
  • Ubuntu下工作空间的创立以及思岚系列激光雷达的使用(详细)和驱动安装及地图创建

    环境 ubuntu20 04 双系统 其他环境也是可以的 首先我们需要先创建rplidar ros的工作空间 这里为推荐从源码处下载 我将介绍两种创建工作空间的方法 1 直接创建 比较简单 个人推荐 mkdir p catkin ws sr
  • qt, connect参数,Qt::DirectConnection,Qt::QueuedConnection

    connect用于连接qt的信号和槽 在qt编程过程中不可或缺 它其实有第五个参数 只是一般使用默认值 在满足某些特殊需求的时候可能需要手动设置 Qt AutoConnection 默认值 使用这个值则连接类型会在信号发送时决定 如果接收者
  • 期货开户手续费的组成和收费模式

    期货公司的费用 公开透明 不会私自提高费率 A级别的期货公司 不会私自提高期货投资者的交易费率 不会私自提高期货投资者的保证金比例 说一下投资者最关系的费率问题 期货投资交易的手续费是由两部分组成 1 交易所手续费 这个是固定标准也是市场上
  • linux安装nacos集群

    一 前置环境 java nacos mysql 3台vm 192 168 5 171 192 168 5 172 192 168 5 181 一台配置好其他都一样的 1 下载安装包 https github com alibaba naco

随机推荐