C/C++调用matlab

news2024/11/16 13:42:41

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异常


图1

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

应用程序处于中断模式


图2

点击“调试”、“窗口”,选择“异常设置”,取消“Win32 Exceptions”的点选模式


图3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1372339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

仿蓝奏云网盘 /file/list SQL注入漏洞复现

0x01 产品简介 仿蓝奏网盘是一种类似于百度网盘的文件存储和共享解决方案。它为用户提供了一个便捷的平台,可以上传、存储和分享各种类型的文件,方便用户在不同设备之间进行文件传输和访问。 0x02 漏洞概述 仿蓝奏云网盘 /file/list接口处存在SQL注入漏洞,登录后台的攻击…

代码随想录day20 开始二叉搜索树

654.最大二叉树 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

零基础学习数学建模——(二)数学建模的步骤

本篇博客将详细介绍数学建模的步骤。 文章目录 引例&#xff1a;年夜饭的准备第一步&#xff1a;模型准备第二步&#xff1a;模型假设第三步&#xff1a;模型建立第四步&#xff1a;模型求解第五步&#xff1a;结果分析第六步&#xff1a;模型检验第七步&#xff1a;模型应用及…

Kubernets(K8S)启动和运行01 快速入门

简介 Kubernetes is an open source orchestrator for deploying containerized applications. It was originally developed by Google, inspired by a decade of experience deploying scalable, reliable systems in containers via application-oriented APIs. Kubernete…

C语言基础语法跟练 day2

题源&#xff1a;牛客网 16、BoBo写了一个十六进制整数ABCDEF&#xff0c;他问KiKi对应的十进制整数是多少。 #include <stdio.h>int main() { //创建变量char arr[] "ABCDEF";int i;int sum0,c; //依次转换十六进制为十进制for(i0; arr[i]!\0; i){char b …

SENet实现遥感影像场景分类

今天我们分享SENet实现遥感影像场景分类。 数据集 本次实验我们使用的是NWPU-RESISC45 Dataset。NWPU Dataset 是一个遥感影像数据集&#xff0c;其中 NWPU-RESISC45 Dataset 是由西北工业大学创建的遥感图像场景分类可用基准&#xff0c;该数据集包含像素大小为 256*256 共计 …

CentOS本地部署SQL Server数据库无公网ip环境实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现&#xff0c;利用GeoServer可以方便地发布地图数据&#xff0c;允许用户对要素数据进行更新、删除、插入…

23种设计模式精讲,配套23道编程题目 ,支持 C++、Java、Python、Go

关于设计模式的学习&#xff0c;大家应该还是看书或者看博客&#xff0c;但却没有一个边学边练的学习环境。 学完了一种设计模式 是不是应该去练一练&#xff1f; 所以卡码网 针对 23种设计&#xff0c;推出了 23道编程题目&#xff0c;来帮助大家练习设计模式&#xff0c;地…

oracle基本用户管理和权限分配

1.用户与模式的关系&#xff0c;一一对应的关系 2.创建与管理用户 2.1创建用户语法 CREATE user wdf IDENTIFIED by tiger--创建用户wdf,密码tiger DEFAULT tablespace users--用户的默认表空间 quota 10M on users;--在表空间的占用最大空间 注意&#xff1a;用户创建以后…

C练习——N个水手分椰子

题目&#xff1a; 五个水手在岛上发现一堆椰子&#xff0c;先由第1个水手把椰子分为等量的5堆&#xff0c;还剩下1个给了猴子&#xff0c;自己藏起1堆。然后&#xff0c;第2个水手把剩下的4堆混合后重新分为等量的5堆&#xff0c;还剩下1个给了猴子&#xff0c;自己藏起1堆。以…

2023-12-30 买卖股票的最佳时机 II和跳跃游戏以及跳跃游戏 II

122. 买卖股票的最佳时机 II 思路&#xff1a;关键点是每一次利用峰值来计算【画图好理解一点&#xff0c;就是计算陡坡的值】&#xff01;每一次累加和的最大! 或者可以这样理解&#xff0c;把利润划分为每天的&#xff0c;如假如第 0 天买入&#xff0c;第 3 天卖出&#xf…

Mybatis之逆向工程

目录 一、逆向工程概述 二、逆向工程的实现 1、创建一个java工程 2、 第一步&#xff1a;mapper生成配置文件&#xff1a; 3、第二步&#xff1a;使用java类生成mapper文件&#xff1a; 4、第三步&#xff1a;拷贝生成的mapper文件到工程中指定的目录中 5、第四步Mapper接…

控制el-table的列显示隐藏

控制el-table的列显示隐藏&#xff0c;一般的话可以通过循环来实现&#xff0c;但是假如业务及页面比较复杂的话&#xff0c;list数组循环并不好用。 在我们的页面中el-table-column是固定的&#xff0c;因为现在是对现有的进行维护和迭代更新。 对需要控制列显示隐藏的页面进…

C语言可变参数输入

本博文源于笔者正在学习的可变参数输入&#xff0c;可变参数是c语言函数中的一部分&#xff0c;下面本文就以一个很小的demo演示可变参数的编写 问题来源 想要用可变参数进行多个整数相加 方法源码 #include<stdio.h> #include<stdlib.h> #include<stdarg.h…

Git 实战指南:常用指令精要手册(持续更新)

&#x1f451;专栏内容&#xff1a;Git⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;前路未远&#xff0c;步履不停 目录 一、Git 安装过程1、Windows 下安装2、Cent os 下安装3、Ubuntu 下安装 二、配置本地仓库1、 初始化 Git 仓库2、配置 name 和 e…

Java微服务系列之 ShardingSphere - ShardingSphere-JDBC

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列专栏目录 [Java项…

通过两台linux主机配置ssh实现互相免密登入

一 1.使用Xshell远程连接工工具生成公钥文件 2.生产密钥参数 3.生成公钥对 4.用户密钥信息 5.公钥注册 二 1.关闭服务端防火墙 ---systemctl stop firewalld 2.检查是否有/root/.ssh目录&#xff0c;没有则创建有则打开/root/.ssh/authorized_keys文件将密钥粘贴创建/ro…

麻省理工、Meta开源:无需人工标注,创新文生图模型

文生图领域一直面临着一个核心难题,就是有条件图像生成的效果&#xff0c;远超无条件的图像生成。有条件图像生成是指模型在生成图像的过程中,会额外使用类别、文本等辅助信息进行指导,这样可以更好的理解用户的文本意图&#xff0c;生成的图像质量也更高。 而无条件图像生成完…

【MYSQL】MYSQL 的学习教程(十一)之 MySQL 不同隔离级别,都使用了哪些锁

聊聊不同隔离级别下&#xff0c;都会使用哪些锁&#xff1f; 1. MySQL 锁机制 对于 MySQL 来说&#xff0c;如果只支持串行访问的话&#xff0c;那么其效率会非常低。因此&#xff0c;为了提高数据库的运行效率&#xff0c;MySQL 需要支持并发访问。而在并发访问的情况下&…

【LLM的概念理解能力】Concept Understanding In Large Language Models: An Empirical Study

大语言模型中的概念理解&#xff1a;一个实证研究 摘要 大语言模型&#xff08;LLMs&#xff09;已经在广泛的任务中证明了其卓越的理解能力和表达能力&#xff0c;并在现实世界的应用中显示出卓越的能力。因此&#xff0c;研究它们在学术界和工业界的值得信赖的性能的潜力和…