一文读懂如何用python调用matlab函数(windows环境)

 

第一步配置环境;

要安装引擎 API,请在操作系统提示符下执行以下命令,其中 matlabroot 是 MATLAB 文件夹的路径。您可能需要管理员权限才能执行这些命令。或者,使用在非默认位置安装用于 Python 的 MATLAB 引擎 API 中所述的非默认选项之一。

在 Windows 系统中 管理员cmd输入:

cd "matlabroot\extern\engines\python"
python setup.py install

上述matlabroot是matlab安装路径,上述操作就是进入到matlab安装路径下的\extern\engines\python文件夹,进行python setup.py install编译,在此之前,您需要对python环境已配置全局变量。

第二步,熟悉python与matlab交互的API:

(注意python版本与matlab版本兼容性问题,比如python3.7大多数matlab版本都是不支持的,尽量用python3.5或者3.6)

1. python提供的交互matlab函数:

一、在python中启动matlab:

matlab.engine.start_matlab()

意义:启动一个新的MATLAB进程,并返回Python的一个变量,它是一个MatlabEngine对象,用于与MATLAB过程进行通信。

例子:

1)在python调用matlab脚本(.m文件)

matlab脚本(.m文件)与python文件得放在同一个文件夹下面;

新建一个count.m的matlab文件,简单一点,在里面就写个:

1+2

再新建一个test.py的python文件,源码为: 

import time
import matlab.engine
eng = matlab.engine.start_matlab()
eng.count(nargout=0)
time.sleep(10)

在当前工作目录打开cmd或powershell,输入python test.py运行python脚本。

最实用的是用python调用matlab函数(function):

例子:

新建一个matlab脚本,count.m

function a = count(c,d)
a = c+d;

新建一个python脚本,test.py

import matlab.engine
eng = matlab.engine.start_matlab()#可以为所欲为的调用matlab内置函数
a = eng.count(1.0,2.0) #引用自写的脚本
print(a)
b = eng.sqrt(4.) #引用matlab内置函数
print(b)

结果;

 

同样,matlab启动函数也可以加入参数:

matlab.engine.start_matlab("-desktop"); #直接打开matlab桌面软件
matlab.engine.start_matlab(async=True); #异步操作matlab函数库,
matlab.engine.start_matlab(background=True); #同步或异步启动MATLAB,指定为逻辑关键字参数。 background是async的别名,将在以后的版本中删除。

跑一遍matlab.engine.start_matlab(async=True)了解一下;

例子3:

import matlab.engine
future = matlab.engine.start_matlab(async=True)
a = future.result()
a.sqrt(4.)

输出结果如下:

将matlab的workspace的变量复制到python变量中:

import matlab.engine
eng = matlab.engine.start_matlab()
eng.eval('a = pi;',nargout=0)
mpi = eng.workspace['a']
print(mpi)

结果:

3.14159265359

二、查找与连接matlab回话

matlab.engine.find_matlab()

意义: 在本地计算机上查找所有共享的MATLAB®会话,并在元组中返回它们的名称。名称中的任何名称都可以是matlab.engine.connect_matlab的输入参数。如果本地计算机上没有运行共享会话,则matlab.engine.find_matlab将返回一个空元组。

matlab.engine.connect_matlab(name=None)

意义: 连接到共享的MATLAB®会话,名称,并返回一个MatlabEngine对象作为eng。输入参数名称指定已在本地计算机上运行的MATLAB会话的名称。

也可以通过matlab会话的名字来连接:

import matlab.engine
names = matlab.engine.find_matlab()
names

在另一个powershell或cmd输入:

import matlab.engine
eng = matlab.engine.connect_matlab('获取到的名字编号')
eng.sqrt(4.0)

参考文献:

[1] http://ww2.mathworks.cn/help/matlab/matlab_external/install-the-matlab-engine-for-python.html?ue

[2] http://ww2.mathworks.cn/help/matlab/matlab_external/install-matlab-engine-api-for-python-in-nondefault-locations.html

[3] http://ww2.mathworks.cn/help/matlab/matlab-engine-for-python.html

[4] http://ww2.mathworks.cn/help/matlab/apiref/matlab.engine.matlabengine-class.html

  • 27
    点赞
  • 155
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
Python中的eval()函数是一个内置函数,它可以将一个字符串作为代码来执行。它的基本用法是将一个字符串当作Python表达式来执行,并返回表达式的结果。下面是对Python eval()函数的一些总结: 1. eval()函数的基本语法如下: ``` eval(expression[, globals[, locals]]) ``` 其中,expression为需要执行的Python表达式,globals和locals为可选参数,分别表示全局和局部命名空间字典。 2. eval()函数可以执行任何Python表达式,包括函数调用、赋值语句等。例如: ``` x = 1 y = 2 print(eval("x + y")) ``` 输出结果为:3 3. eval()函数还可以执行包含控制语句的表达式,例如if语句、for循环语句等。但是要注意,eval()函数执行的代码必须是安全可靠的,否则可能会有安全风险。例如: ``` x = 1 y = 2 z = eval("if x > y: x else: y") print(z) ``` 输出结果为:2 4. eval()函数还可以执行包含异常处理语句的表达式。例如: ``` try: eval("1/0") except ZeroDivisionError as e: print("Error:", e) ``` 输出结果为:Error: division by zero 5. eval()函数还可以接受一个字典作为globals参数,用于指定全局命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {"x": 2, "y": 3})) ``` 输出结果为:5 6. eval()函数还可以接受一个字典作为locals参数,用于指定局部命名空间。例如: ``` x = 1 y = 2 print(eval("x + y", {}, {"x": 2, "y": 3})) ``` 输出结果为:5 7. eval()函数的返回值为表达式的结果。例如: ``` x = 1 y = 2 z = eval("x + y") print(z) ``` 输出结果为:3 总之,eval()函数Python中非常有用的一个内置函数,它可以让我们在运行时执行动态的Python代码。但是要注意,使用eval()函数时需要谨慎,避免因为执行不安全的代码而导致安全问题。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拦路雨g

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值