matlab将脚本导出动态库文件.dll,并被python调用

所使用的的环境如下:

  • 系统: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文件

  1. 选中标题栏的APP,然后选中matlab coder

在这里插入图片描述

  1. 在弹出的窗口把刚才写的脚本添加进来,其它保持默认,然后点击右下角的NEXT

在这里插入图片描述

  1. 定义输入的类型,首先再次载入刚才的脚本,然后定义输入类型,我这里只有一个输入的参数X,定义x为double类型的,点击右下角NEXT进行下一步

在这里插入图片描述

  1. Check for runtime issue,我这里测试的时候报错了,先不管他

在这里插入图片描述

  1. 生成文件,buil type选择动态库,然后生成,最后下一步就生成好了

在这里插入图片描述

  1. 在脚本文件夹下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提供了数据类型转换的桥梁,更多资料自行百度

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值