
试试Matlab与Python集成,或是Matlab与C集成:
function c = add(a,b)
c = a+b
end先写一个加法得matlab程序

长这样

点第三个

然后选择我们得代码

生成得名字

这里别自动了,没什么用
手动模式

把里面得变量类型设置一下,因为是C语言

为了代码得通用性,double类型得使用

1x1就是一个标量

点击下一步

我们这里就不出声exe了,我们使用python调用dll文件

生成一个c得代码

稍等一下,就好

ok了
cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_initialize.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_initialize.c"
add_initialize.c
cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add_terminate.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add_terminate.c"
add_terminate.c
cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_AMD64_=1 -DWIN64 -D_WIN64 -DWIN32 -D_WIN32 -W4 -D_WINNT -D_WIN32_WINNT=0x0502 -DNTDDI_VERSION=0x05020000 -D_WIN32_IE=0x0600 -DWINVER=0x0502 -D_MT -MT -D_CRT_SECURE_NO_WARNINGS /Od /Oy- -DMODEL=add -DHAVESTDIO -DUSE_RTMODEL @add_rtw_comp.rsp -Fo"add.obj" "C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll\add\add.c"
add.c
### Creating dynamic library ".\add.dll" ...
link /RELEASE /INCREMENTAL:NO /NOLOGO -subsystem:console,5.02 kernel32.lib ws2_32.lib mswsock.lib advapi32.lib -dll -def:add.def -out:.\add.dll @add_rtw.rsp
正在创建库 .\add.lib 和对象 .\add.exp
### Created: .\add.dll
### Successfully generated all binary outputs.
这段日志是调用得生成器传入得参数

以及对应得输入和输出

matlab与c代码之间得联系
/*
* File: add.c
*
* MATLAB Coder version : 4.1
* C/C++ source code generated on : 30-May-2021 18:23:39
*/
/* Include Files */
#include "add.h"
/* Function Definitions */
/*
* Arguments : double a
* double b
* Return Type : double
*/
double add(double a, double b)
{
return a + b;
}
/*
* File trailer for add.c
*
* [EOF]
*/
double add(double a, double b)
{
return a + b;
}function c = add(a,b)
c = a+b
end两个代码的比较

生成得一套代码

成功
C:\Users\yunswj\Documents\MATLAB\Examples\matlab\ReadSpreadsheetDataIntoTableEx59168851Example\codegen\dll
其实有很多得中间文件被生成

可以使用ctypes来调用dll文件
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./add.d")
print("the out is {}".format(lib.add(1.0, 2.0)))

这里是执行结果
deploytool也可以直接得来输入这个东西

弹出这个

点生成python包

开始工作

成功

生成得目录
python.exe .\setup.py install
先安装一下
import add
a = add.initialize()
b = a.add(1000.0, 89.0)
print(b)
a.terminate()
里面也可以看到最终 生成的代码

最重要的就是这些了
本文简单的使用matlab自带的代码生成器,分别生成了dll的文件和python的可安装包。未来为了性能可以优先考虑这样的作法,而且matlab的算法编写可真的太容易了。