C/C++调用matlab

这篇具有很好参考价值的文章主要介绍了C/C++调用matlab。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C/C++调用matlab

matlab虽然可以生成C/C++的程序,但其能力很有限,很多操作无法生成C/C++程序,比如函数求解、优化、拟合等。为了解决这个问题,可以采用matlab和C/C++联合编程的方式进行。使用matlab将关键操作打包成dll环境,再由C/C++调用。

所需环境

  1. windows11
  2. matlab2018a
  3. VsStudio2017、VsStudio2022

matlab生成dll

  1. 编写待测试的matlab函数“test1”
function y = test1(a,b)
    %TEST1 此处显示有关此函数的摘要
    %   此处显示详细说明
    x=fminunc(@(x)x^2+4*x+5,1);
    
    y = cos(a) + b^2 + 3 + x;
end
  1. 使用matlab命令“mex -setup”设置MEX,点击选择“mex -setup C++”;
  2. 使用matlab命令“mbuild -setup”设置MBUILD,点击选择“mex -setup C++ -client MBUILD ”;
  3. 使用matlab命令“mcc -B csharedlib:test1 test1.m”,等待生成所需的问题;
    生成的主要文件有:“test1.h”、“test1.lib”、“test1.dll”

C/C++调用dll

  1. 编写main.cpp
#include "test1.h"

#include <iostream>

#pragma comment (lib,"test1.lib")

using namespace std;

int main() {
	cout << "Hello CMake." << endl;

	// 初始化,必不可少
	if (!test1Initialize()) {
		std::cout << "failed to initialize test1" << std::endl;
		return -1;
	}

	mxArray* a = mxCreateDoubleMatrix(1, 1, mxREAL);
	double aSNR[] = { -1 };
	memcpy(mxGetPr(a), (void*)aSNR, sizeof(aSNR));
	mxArray* b = mxCreateDoubleMatrix(1, 1, mxREAL);
	double SNR[] = { 1 };
	memcpy(mxGetPr(b), (void*)SNR, sizeof(SNR));
	mxArray* c = mxCreateDoubleMatrix(1, 1, mxREAL);
	mxArray** y = &c;
	mlfTest1(1, y, a, b);
	double* dataPtr = mxGetPr(*y);
	cout << "res: " << dataPtr[0] << endl;

	test1Terminate();

	cout << "end" << endl;

	return 0;
}
  1. 编写CMakeLists.txt
cmake_minimum_required (VERSION 3.8)

project ("C_Matlab")

include_directories(
	C:\\tools\\matlab\\extern\\include    #改成本地matlab的安装位置
)

link_directories(
	.\\
	C:\\tools\\matlab\\extern\\lib\\win64\\microsoft    #改成本地matlab的安装位置
)

# 将源代码添加到此项目的可执行文件。
add_executable (test0 "main.cpp"
)
target_link_libraries(test0
    test1
    mclmcrrt
)
  1. 将文件“test1.h”和"test1.lib"放到CMakeList.txt文件所在的文件夹下;
  2. 使用VSstudio2022打开CMakeList.txt文件所在的文件夹,并进行编译;
  3. 将文件“test1.dll”放到可执行文件“test0”所在的目录下;
  4. 运行可执行程序“test0”。

异常处理

mex -setup异常

C/C++调用matlab,matlab,C/C++,联合编程
图1

通常,只需要按照VSstudio2017即可。

应用程序处于中断模式

C/C++调用matlab,matlab,C/C++,联合编程
图2

点击“调试”、“窗口”,选择“异常设置”,取消“Win32 Exceptions”的点选模式文章来源地址https://www.toymoban.com/news/detail-809908.html

C/C++调用matlab,matlab,C/C++,联合编程
图3

到了这里,关于C/C++调用matlab的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MATLAB与ROS联合仿真——实例程序搭建思路

    (1)通过设定小车运动的速度及转角来控制ROS中小车运动。 (2)通过键盘输入指令控制ROS中小车运动,键盘输入w小车前行,s小车后退,a小车左转,d小车右转,输入其他按键小车停止运动。 (3)订阅Gazebo中反馈的ROS小车的位置信息,并实时绘制出小车的运动轨迹图.    

    2024年02月15日
    浏览(41)
  • MATLAB与ROS联合仿真(慕羽☆)全套开源资料索引

       自2021年9月份开始进行MATLAB与ROS联合仿真相关的研究,至2021年12月份研究基本上结束,至今,已经近两年时间,期间曾收到过很多小伙伴的私信,想让我出点教程,期间我也曾多次想要抽点时间出教程,但很遗憾,总会被各种各样的事情顶掉,一拖再拖,就到了现在。

    2024年02月15日
    浏览(59)
  • 滤波器之matlab与vivado的联合仿真

    一、目录     1、matlab产生滤波器     2、matlab进行仿真     3、搭建vivado测试电路     4、vivado仿真 二、matlab产生滤波器     本文采用FIR低通滤波器,在命令行输入fdatool进入滤波器配置页面,如下配置                   导出滤波器函数              设置名字为filter

    2024年02月09日
    浏览(53)
  • MATLAB - 激光雷达 - 相机联合标定(Lidar-Camera Calibration)

          激光雷达 - 相机标定建立了三维激光雷达点和二维相机数据之间的对应关系,从而将激光雷达和相机输出融合在一起。 激光雷达传感器和相机被广泛用于自动驾驶、机器人和导航等应用中的三维场景重建。激光雷达传感器捕捉环境的三维结构信息,而相机则捕捉色彩、

    2024年02月20日
    浏览(52)
  • 电池SOC和动力电池OCV功率联合估计研究(Matlab代码实现)

      💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码、数据、文

    2024年02月11日
    浏览(56)
  • MATLAB与ROS联合仿真——ROS环境搭建及相关准备工作(下)

       本篇文章主要介绍在安装完ROS后,在进行MATLAB与ROS联合仿真之前,需要进行的一些环境搭建以及准备工作,主要分为 创建ROS工作空间及功能包、必备功能包安装、安装Gazebo11、导入实验功能包至工作空间、安装Visual_Studio_Code(选做)、常用便捷工具安装(选做) 六部分。

    2024年02月16日
    浏览(47)
  • UE4与MATLAB联合仿真环境配置中遇到的问题及解决办法

    我在配置UE4与MATLAB联合仿真的过程遇到一些问题。这些问题在MATLAB的社区也有人问,一方面是对MATLAB的帮助文档理解错误,另一方面是自己操作的问题,毕竟帮助文档更多的是文字描述,对于我这样的新手难免配置错误。 软件版本:UE4.27.2、MATLAB2023a、Visual Studio2022 1. The fol

    2024年02月05日
    浏览(54)
  • 【MATLAB】全网唯一的7种信号分解+ARIMA联合的时序预测算法全家桶

    有意向获取代码,请转文末观看代码获取方式~ 大家吃一顿火锅的价格便可以拥有7种信号分解+ARIMA组合的时序预测算法,绝对不亏,知识付费是现今时代的趋势,而且都是我精心制作的教程,有问题可随时反馈~也可单独获取某一算法的代码(见每一算法介绍后文)~ 接下来详

    2024年02月06日
    浏览(49)
  • 【微电网】含风、光、储联合发电的微电网优化调度研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 场景1——春 2.2 场景2——夏  2.3 场景

    2024年02月06日
    浏览(84)
  • C#/halcon联合编程 三维点云数据可视化(ActiViz实现)

    由于甲方需要,最近开始做的一个项目的框架旋转的是C#/halcon联合编程进行的,主要设计一些三维ocr、三维缺陷检测等等。之前类似的项目框架选的是C++/Qt/PCL/vtk,突然这么一变,还是有些不适应,在第一步点云可视化就被难倒了。 在超人视觉的罗超老师的视频中找到了一种

    2024年02月03日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包