所使用的的环境如下:
- 系统:windows10
- matlab版本:2018b
- python:3.6
一、matlab将脚本生成动态库.dll文件
1.1 编写简单的脚本函数
编写New_sin.m脚本,实现正弦函数的计算功能
function newsin = New_sin(x)
%使用sinx的泰勒展开式求解
double sum;
double a;
double b; %//sum代表和,a为分子,b为分母
double p;
char s ;
s=1;
sum=0;
a=x; %//分母赋初值
b=1; %//分子赋初值
p=1;
while abs(a/b) >= 1e-6
%while a/b >= 1e-6
sum = sum+s*(a/b); %//累加一项
a = a*x*x; %//求下一项分子
b = b*2*p*(2*p+1); %//求下一项分母
s = s*(-1);
p = p+1;
end
newsin = sum;
1.2 生成dll文件
- 选中标题栏的APP,然后选中matlab coder
- 在弹出的窗口把刚才写的脚本添加进来,其它保持默认,然后点击右下角的NEXT
- 定义输入的类型,首先再次载入刚才的脚本,然后定义输入类型,我这里只有一个输入的参数X,定义x为double类型的,点击右下角NEXT进行下一步
- Check for runtime issue,我这里测试的时候报错了,先不管他
- 生成文件,buil type选择动态库,然后生成,最后下一步就生成好了
- 在脚本文件夹下
codegen/dll/New_sin/New_sin.dll
就是生成的动态库文件
二、python调用.dll
代码如下:
import ctypes
ll = ctypes.cdll.LoadLibrary
lib = ll("./New_sin.dll")
# 设置sum()函数传入参数的类型,
# lib.New_sin.argtype = ctypes.c_double
# 这是sum()函数返回参数的类型
lib.New_sin.restype = ctypes.c_double
print(lib.New_sin(ctypes.c_double(1.0472)))
这里要注意不能直接把要计算的数字传入函数,ctypes提供了数据类型转换的桥梁,更多资料自行百度