MATLAB学习之旅(三)精通VC与Matlab联合编程

2023-11-11

Matlab C/C++函数库是Matlab扩展功能重要的组成部分,包含了大量的用C/C++语言重新编写的Matlab函数,主要包括初等数学函数、线形代数函数、矩阵操作函数、数值计算函数、特殊数学函数、多项式函数、插值函数等,用户可以在自己的C/C++程序中调用这些函数,实现复杂的矩阵计算功能,从而减少程序设计工作量,需要说明的是C函数库和C++函数库是两个不同的函数库。
在使用前需要进行安装:
在Matlab命令窗口中输入:
mbuild -setup
按照提示选择VC的编译器,完成后在Matlab命令窗口中输入:
mex -setup
同样选择VC的编译器,就完成编译器的安装和配置。
首先介绍下C函数库,C数学函数库所需要的库函数在该目录下:Matlab根目录:/extern/lib
下面来看matlab自带的一个使用C函数库的例子(所有使用c函数例子在:matlab根目录/extern/examples/cmath):
 * ex1.c
 *
 * Copyright (c) 1995-1999 by The Mathworks, Inc. All Rights Reserved.
 */
 
/* $Revision: 1.6 $ */
 
#include <stdio.h>
#include <stdlib.h>     /* used for EXIT_SUCCESS */
#include <string.h>

#include "matlab.h"/*matlab.h为C数学函数库的头文件

static double real_data[] = { 1, 2, 3, 4, 5, 6 };
static double cplx_data[] = { 7, 8, 9, 10, 11, 12 };

int main()
{
    /* 声明两个mxArray矩阵变量并赋初值为NULL */
    mxArray *mat0 = NULL;
    mxArray *mat1 = NULL;

    /* 使用自动内存管理*/
    mlfEnterNewContext(0, 0);

    /* 创建矩阵mat0,mat1并赋值 */
    mlfAssign(&mat0, mlfDoubleMatrix(2, 3, real_data, NULL));/*该矩阵为2*3矩阵
    mlfAssign(&mat1, mlfDoubleMatrix(3, 2, real_data, cplx_data));/*该矩阵为2*3矩阵,并为复数矩阵

    /* 打印矩阵 */
    mlfPrintMatrix(mat0);
    mlfPrintMatrix(mat1);

    /* 释放矩阵所占的内存*/
    mxDestroyArray(mat0);
    mxDestroyArray(mat1);

    /* 禁用自动内存管理*/
    mlfRestorePreviousContext(0, 0);

    return(EXIT_SUCCESS);
}
三、如果有图像,请在图像文件中表明图像索引编号,如“myappimg1.gif”,“myappimg2.gif”等,在图像显示的下方注明图像描述:


图一 程序运行结果

下面在VC中实现该程序的功能,步骤如下:
1、在VC中打开ex1.c文件(该文件在该目录下:matlab根目录/extern/examples/cmath)
2、设置头文件和库文件路径:工具->选择,目录
在inlude选项中添加如下路径:
D:/matlab/extern/include/cpp
D:/matlab/extern/include
结果如图2:


图二 头文件路径设置

在Library选项中添加如下路径:如图三 D:/matlab/extern/lib/win32/microsoft/msvc60 D:/matlab/extern/lib D:/matlab/bin

图三 库文件路径设置

3、添加库文件:工程->设置->Link 在General选项中的“对象库/模块”中将目录D:/matlab/extern/lib/win32/microsoft/msvc60目录下的所有库文件名写上:如图四


图四 库文件添加

  所有设置完成后就可以运行了。 Matlab内建函数库包括Matlab C数学函数中最基本的数学函数,任何使用C数学函数库编写的应用程序必须使用Matlab内建函数。Matlab M文件函数库包含了从M文件转换来的函数,这些函数相比内建函数其内容更加丰富,并且包含了大量特殊功能函数在Matlab C函数库中,Matlab阵列被声明为mxArray的结构体,该结构体的定义在目录Matlab/extern/include/matrix.h文件中,很好的理解mxArray结构体有助于使用Matlab C数学库。
Matlab C内建数学库常用的函数有:
通用功能函数;
运算符和特殊矩阵;
基本的矩阵操作函数
初等数学函数
线形代数函数
数据分析和傅立叶转换函数
字符串函数
文件输入输出函数
常用数据类型函数

Matlab M文件函数库
运算和特殊功能功能函数
基本的矩阵操作函数
基本数学函数
特殊数学函数
线形代数函数
数值分析和傅立叶变换函数
多项式和插值函数
函数的函数和常微分方程
字符串函数
文件读写函数
数据类型函数
稀疏矩阵函数   
  以上函数的用法在Matlab帮助文挡中有介绍。与Matlab C函数库类似,Matlab C++函数库也包括Matlab C++内建数学库和Matlab M文件函数库,并在Matlab C函数库的基础上对许多函数进行了类封装,使得C++语言可以利用重载、继承等功能对C++库函数进行调用。Matlab C++函数库与Matlab C函数库的区别在于Matlab C++函数库用类定义数据结构,而Matlab C函数库用结构体来定义数据结构。要说明的是:Matlab7.0版本不再使用C/C++函数库,因此以上方法在7.0版本中使用会出现错误。 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB学习之旅(三)精通VC与Matlab联合编程 的相关文章

  • 通过颜色渐变修补圆

    我正在尝试绘制一个颜色渐变 我希望它沿轴均匀 在下图由角度定义的情况下 pi 7 当我使用patch命令 绘图与所需的梯度方向匹配 但沿其方向并不均匀 沿圆的点之间形成各种三角形 这是代码 N 120 theta linspace pi p
  • 像matlab一样在python中连接数组而不知道输出数组的大小

    我正在尝试在 python 中连接数组 类似于 matlab array1 zeros 3 500 array2 ones 3 700 array array1 array2 我在 python 中做了以下操作 array1 np zero
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • 霍夫变换检测和删除线

    我想使用霍夫变换检测图像中的线条 但是我不想绘制线条 而是想删除原始图像中检测到的每条线条 image imread image jpg image im2bw image BW edge image canny imshow BW fig
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • GO TO 语句 - Fortran 到 Matlab

    我一直在努力将此网格搜索代码从 Fortran 转换为 Matlab 但是我无法正确合并 GO TO 语句 我正在尝试使用 while 循环 但我认为我需要其他东西来结束搜索 任何帮助将不胜感激 vmax 1 0E 15 amax G 1
  • 用于读取csv写入数组的c++程序;然后操作并打印到文本文件中(已经用 matlab 编写)

    我想知道是否有人可以帮助我 我正在尝试构建一个程序 从 csv 文件中读取大小未知的浮点数大数据块 我已经在 MATLAB 中编写了此代码 但想要编译和分发此代码 因此转向 C 我只是在学习并尝试阅读本文以开始 7 5 19892 4 23
  • Matlab:如何读取以逗号作为小数分隔符的数字?

    我有很多 数十万 相当大 gt 0 5MB 的文件 其中数据是数字 但以逗号作为小数分隔符 使用像这样的外部工具对我来说是不切实际的sed s g 当分隔符是点时 我只使用textscan fid f f f 但我看不到更改小数点分隔符的选
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • 在matlab中融合2个以上的图像

    在 MATLAB 中 如何融合两个以上的图像 例如 我想要做什么imfuse但对于超过 2 个图像 使用两张图像 这是我的代码 A imread file1 jpg B imread file2 jpg C imfuse A B blend
  • 当 MATLAB 变得非常非常忙时,如何中断它?

    我正在运行一个长时间的模拟MATLAB http en wikipedia org wiki MATLAB我意识到我需要停下来重新运行 然而 MATLAB 确实对这种计算很感兴趣 并且它停止了响应 如何在不终止 MATLAB 的情况下中断此
  • Python 中的 eig(a,b) 给出错误“需要 1 个位置参数,但给出了 2 个”

    根据https docs scipy org doc numpy 1 15 0 user numpy for matlab users html https docs scipy org doc numpy 1 15 0 user nump
  • OpenCV功能类似于matlab的“查找”

    我正在寻找 openCV 中的一个函数来帮助我制作图像蒙版 例如在 MATLAB 中 B A or B 零 大小 A B A 10 c 有些功能可以让你通过mask向他们提出论据 按照您描述的方式创建面具 我认为您正在追求Cmp 或 Cmp
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • MATLAB:MEX 矩阵除法给出的结果与 m 文件不同

    我使用 MATLAB 的编码器工具创建了矩阵指数函数的 MEX 版本 以在另一组函数中使用 问题是 MEX 版本给出的结果与原始 m 文件不同 经过调试 我认为这是因为MEX文件和m文件没有做相同的矩阵除法 或者 MEX 文件首先就有问题
  • Matlab 的 fftn 在多线程下变得更慢?

    我可以访问 12 核机器和一些严重依赖 fftn 的 matlab 代码 我想加快我的代码速度 由于 fft 可以并行化 我认为更多的内核会有所帮助 但我看到的恰恰相反 这是一个例子 X peaks 1028 ncores feature
  • 如何在 MATLAB 中为 4 个子图创建一个通用图例?

    如何在 MATLAB 中为 4 个子图创建一个通用图例 如下所示 又快又脏 hSub subplot 3 1 1 plot 1 1 1 1 1 1 1 1 hLegend legend hello i am legend subplot 3
  • 如何在 MATLAB 的 for 循环中读取多个图像?

    我已将结果分段放在一个文件夹中 这些需要在 for 循环中读取并在循环中进一步处理 我尝试阅读如下 for i 1 10 file name dir strcat C Users adminp Desktop dinosaurs im im
  • 通过 h5py 将 matlab v7.3 文件读入 python numpy 数组列表

    我知道以前已经有人问过这个问题 但在我看来 仍然没有答案可以解释正在发生的事情 并且不适用于我的情况 我有一个 matlab v7 3 文件 其结构如下 gt rank lt 1x454 cell gt gt each element is
  • 有没有办法在 MATLAB 中查看 pcode 文件 (.p) 的源代码?

    有没有办法在 MATLAB 中打开 pcode 文件 p 如果 开放 是指edit 那么当然不是 pcode 中的 p 代表 受保护 其主要设计目标是在保护其源代码的同时部署功能组件 如果 开放 是指run 那么当然是的 引用手册 http

随机推荐

  • vue使用threeJs导入obj模型,并添加标注

    效果图 1 安装threeJs npm install three 2 安装轨道控件插件 npm install three orbit controls 3 安装加载 obj和 mtl文件的插件 npm i save three obj
  • Java流程控制(分支结构,迭代结构,转移语句)

    1 分支结构 if else switch 2 迭代结构 while do while for 3 转移语句 break countinue return 4 while 循环 5 do while循环 6 while do while的区
  • ubuntu12.04下Qt5.6设置命令行启动方式

    本菜鸟由于不精通ubuntu 但是需要做项目使用qt 而将qt安装好后想再次打开时候却找不到qt的图标 经过半天的摸索 终于搞清楚怎么打开qt了 特此作出分享 1 方式一 找到安装目录 寻找qtcreator的文件 相当于在windows下
  • SAP ABAP 中的异步调用

    举例场景 创建采购申请的接口中 在执行完BAPI之后返回了一个PR 接着就会执行到commit提交的接口 然如果还需要在创建的时候直接审批 那么就需要再调用PR审批的BAPI 但是你会发现有的PR 在ME23N查看的时候是审批状态 而有的并
  • Android studio连接真机以及找不到设备问题解决

    一 电脑设置 1 检查必要工具是否下载 Android studio gt 右上角的立方体标志 SDK Manager gt 点击 SDK Tools 检查是否下载 Goolge USB Driver 2 驱动安装 点击下一步 gt 完成
  • OpenBlas 安装

    OpenBLAS是BLAS Basic Linear Algebra Subprograms 的优化版 OpenBLAS官网 http www openblas net OpenBLAS公开课 https www leiphone com
  • hadoop学习——flume的简单介绍

    flume介绍 概述 Flume最早是Cloudera提供的日志收集系统 后贡献给Apache 所以目前是Apache下的项目 Flume支持在日志系统中定制各类数据发送方 用于收集数据 Flume是一个高可用的 高可靠的 鲁棒性 robu
  • 记一次malloc失败的经历

    背景 在类OsBufferEntry的成员函数中 为其成员变量m SimplePingResult分配空间 结果报错了 百思不得其解 class OsBufferEntry public QObject Q OBJECT public ex
  • 用git搭建个人博客

    1 安装 Node js 2 安装 Git 3 全局安装Hexo 在命令框中输入 npm install g hexo cli 4 hexo init
  • 分布式事务在Java中的实现与优化

    分布式事务在Java中的实现与优化 分布式系统中的事务处理是一个复杂而关键的问题 随着互联网规模的不断扩大和应用场景的增多 分布式事务的需求也越来越迫切 本文将探讨在Java中实现和优化分布式事务的方法 并提供相应的源代码示例 一 分布式事
  • Error attempting to get column ‘name‘ from result set. Cannot determine value type from string

    Error attempting to get column name from result set Cause java sql SQLDataException Cannot determine value type from str
  • select()函数的作用

    select 在SOCKET编程中还是比较重要的 可是对于初学SOCKET的人来说都不太爱用select 写程序 他们只是习惯写诸如 conncet accept recv 或recvfrom 这样的阻塞程序 所谓阻塞方式block 顾名思
  • 解决windows无法启动sybase服务

    我这里是由于IP原因导致sybase服务启动不了 将sybase 服务的IP修改为本机正确的IP地址后 重启服务成功 1 启动服务报如下错误 2 启动sybase的 Dsedit Utility 3 步骤2执行后打开如下界面 可以看到4个服
  • Windows命名管道&getsystem原理学习记录

    前言 出品 博客 ID moon flower 以下内容 来自博客的moon flower作者原创 由于传播 利用此文所提供的信息而造成的任何直接或间接的后果和损失 均由使用者本人负责 长白山攻防实验室以及文章作者不承担任何责任 命名管道基
  • 学习笔记:WSL Ubuntu 20.04 LTS 安装中文语言

    环境 系统 Windows 10 Pro 64 WSL子系统 Ubuntu 20 04 LTS 1 安装中文语言包 sudo apt install language pack zh hans 2 设置中文为默认语言 方法一 sudo dp
  • 简单教你美化iPhone电量指示图标

    一样的画面用久了终究会腻的 所以我今天教大家怎样美化自己的iPhone 先从充电图标开始 实际上很简单 iPhone的电量指示就是由17张图片组成的 也就是说我们只要替换这些图片就能改变电量指示图标了 你可以自己做一些图片来替换也可以下载我
  • mysql存储过程批量生成脚本

    删除之前的存储过程 DROP PROCEDURE idata 创建 delimiter create procedure idata begin declare i int set i 1 START TRANSACTION while i
  • logback使用

    1 需要引入maven配置 ch qos logback logback classic 1 0 0 这个会依赖slf4j api和logback core ch qos logback logback access 1 1 5 所有的ja
  • OpenVSwitch数据面流表cache机制浅谈

    稍许笔墨写了一篇关于OpenVSwitch 以下简称OVS 的文章 https blog csdn net dog250 article details 103492099 但有些事情并没有说清楚 关于OVS的流表是如何映射成数据平面的Fl
  • MATLAB学习之旅(三)精通VC与Matlab联合编程

    Matlab C C 函数库是Matlab扩展功能重要的组成部分 包含了大量的用C C 语言重新编写的Matlab函数 主要包括初等数学函数 线形代数函数 矩阵操作函数 数值计算函数 特殊数学函数 多项式函数 插值函数等 用户可以在自己的C