matlab虽然可以生成C/C++的程序,但其能力很有限,很多操作无法生成C/C++程序,比如函数求解、优化、拟合等。为了解决这个问题,可以采用matlab和C/C++联合编程的方式进行。使用matlab将关键操作打包成dll环境,再由C/C++调用。
function y = test1(a,b)
%TEST1 此处显示有关此函数的摘要
% 此处显示详细说明
x=fminunc(@(x)x^2+4*x+5,1);
y = cos(a) + b^2 + 3 + x;
end
#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;
}
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
)
通常,只需要按照VSstudio2017即可。
点击“调试”、“窗口”,选择“异常设置”,取消“Win32 Exceptions”的点选模式