试试Matlab与Python集成,或是Matlab与C集成:
代码语言:javascript复制function c = add(a,b)
c = a b
end
先写一个加法得matlab程序
长这样
点第三个
然后选择我们得代码
生成得名字
这里别自动了,没什么用
手动模式
把里面得变量类型设置一下,因为是C语言
为了代码得通用性,double类型得使用
1x1就是一个标量
点击下一步
我们这里就不出声exe了,我们使用python调用dll文件
生成一个c得代码
稍等一下,就好
ok了
代码语言:javascript复制
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:UsersyunswjDocumentsMATLABExamplesmatlabReadSpreadsheetDataIntoTableEx59168851Examplecodegendlladdadd_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:UsersyunswjDocumentsMATLABExamplesmatlabReadSpreadsheetDataIntoTableEx59168851Examplecodegendlladdadd_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:UsersyunswjDocumentsMATLABExamplesmatlabReadSpreadsheetDataIntoTableEx59168851Examplecodegendlladdadd.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代码之间得联系
代码语言:javascript复制/*
* 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]
*/
代码语言:javascript复制double add(double a, double b)
{
return a b;
}
代码语言:javascript复制function c = add(a,b)
c = a b
end
两个代码的比较
生成得一套代码
成功
代码语言:javascript复制C:UsersyunswjDocumentsMATLABExamplesmatlabReadSpreadsheetDataIntoTableEx59168851Examplecodegendll
其实有很多得中间文件被生成
可以使用ctypes来调用dll文件
代码语言:javascript复制import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./add.d")
print("the out is {}".format(lib.add(1.0, 2.0)))
这里是执行结果
代码语言:javascript复制deploytool
也可以直接得来输入这个东西
弹出这个
点生成python包
开始工作
成功
生成得目录
代码语言:javascript复制python.exe .setup.py install
先安装一下
代码语言:javascript复制import add
a = add.initialize()
b = a.add(1000.0, 89.0)
print(b)
a.terminate()
里面也可以看到最终 生成的代码
最重要的就是这些了
本文简单的使用matlab自带的代码生成器,分别生成了dll的文件和python的可安装包。未来为了性能可以优先考虑这样的作法,而且matlab的算法编写可真的太容易了。