python调用matlab 性能_Python调用MATLAB实现fmincon函数
motivation:
1.要实现“符号几何规划”的功能,使用MATLAB自带的fmincon函数来实现
2.工程的代码是通过Python来完成的,需要Python调用MATLAB实现
思路:
1.使用Python直接生成约束条件,目标函数,初始值等函数
2.使用Python来调取MATLAB接口,执行MATLAB的.m文件
3.MATLAB的.m文件中,将输出结果写入txt文档
4.Python读取txt文档结果
1.MATLAB部分
首先,简要介绍下MATLAB中自带的fmincon函数。fmincon函数是用来解决“非线性约束规划”,本文需要用到的是它解决“符合几何规划”的能力。【几何规划】的定义是,目标函数和约束条件均为系数为正的多项式,而【符号几何规划】在此基础上拓展,允许符号为负。
fmincon函数的约束形式如下:
其中,c(x)表示非线性多项式的不等式约束部分,注意,不等式需要严格按照“小于等于0”的格式(可以进行一些简单的不等式变换,写成右边为0的形式),ceq(x)表示非线性多项式的等式约束部分,形式同上。(b和beq是线性约束部分的参数,写成向量形式,A 和 Aeq 是线性约束部分的参数,写成矩阵形式,本文的问题场景不涉及“线性约束”条件)。lb和ub分别为x变量的上下限。在MATLAB中使用fmincon,传入参数如下:x=fmincon( objfunction, x0, A, b, Aeq, beq, lb, ub, st)
在本文的问题背景下,目标函数的.m文件代码如下
newobj.m
约束函数的.m文件的代码如下(这里简单设置了约束函数,当需要多个约束,只需要再添加即可,形式为c = [(),(),...,()]):
equationset.m
fmincon函数还需要传入初始值(因为寻找的是局部最优解),根据具体情况来判断是否需要规定变量的上下边界。初始值传参的.m文件如下:
initialValue.m
完成了三个函数.m文件,下面需要写脚本.m文件。其具体代码如下:
main.m
首先,newobj.m和equationset.m需要和main.m在同一个目录下,“initial”方法是获取初始值x0,以及变量x的上下限。fmincon函数在输出时,不仅可以返回规划结果x,还能返回其他参数。此处本文用到exitflag参数,用来确定规划是否成功执行。exitflag的参数及含义如下:1(简单来说就是,规划成功)
First-order optimality measure was less thanoptions.OptimalityTolerance, and maximum constraint violation was less thanoptions.ConstraintTolerance.
-2(未找到最优解,规划失败)
No feasible point was found.
其他参数含义详见http://cn.mathworks.com/help/optim/ug/fmincon.html 中的 output arguments 部分。
由于,我们需要将输出的结果保存到本地,所以在main.m的脚本文件中,加入写入txt的代码:
写入txt的代码
将四个.m文件放在同一个目录下,在matlab中点击运行即可获得结果。下面,本文要做的工作是通过Python来运行main.m
2.Python部分
在Python端口,只需要使用MATLAB提供的Python API,即可实现Python运行MATLAB的脚本。
首先,在使用之前,需要安装MATLAB的API。安装过程非常简单(本文以在window 7环境下安装为例):用管理员模式打开cmd:
cd “MATLAB安装路径\extern\engines\python”
python setup.py install
安装完成之后,即可在Python代码中:import matlab.engine
之后,将main.m文件以及其他三个.m文件放置在.py文件的通过目录下,接下来只需要两行代码就能完成对于main.m脚本的调用#首先初始化engine
eng= matlab.engine.start_matlab()
#之后直接访问脚本文件名
eng.main(nargout=0)
#最后,释放engine
eng.quit()
现在,到main.m中指定的生成txt文档的路径下,就能找到生成的两个txt文件,只需要使用Python来读取这两个txt中的数据即可。
2017.7.29更新
问题:
由于每次调用,MATLAB都会重新初始化,初始化的时间会消耗一些时间。eng= matlab.engine.start_matlab()
由于实验场景要反复调用,执行MATLAB的脚本。所以尝试在for循环之外初始化,在for循环内执行MATLAB脚本,最后在for循环外退出eng。但是发现,MATLAB的脚本(脚本中有一个写入文件操作)只在第一次for循环的时候执行。只有在for循环中,执行开启eng,执行脚本和结束eng才能正常运行。
MATLAB脚本中的“写入文件”操作是自动执行的,相当于python中的f.flush(),但是仍然只在eng退出之后,才能重新开始一个脚本运行。查找官方文档未果...
参考文献:
http://cn.mathworks.com/help/optim/ug/fmincon.html(fmincon函数官方文档)
http://cn.mathworks.com/help/matlab/matlab-engine-for-python.html(Python调用MATLAB接口官方文档)
python调用matlab 性能_Python调用MATLAB实现fmincon函数相关推荐
- python调用matlab程序_Python调用MATLAB实现fmincon函数
motivation: 1.要实现"符号几何规划"的功能,使用MATLAB自带的fmincon函数来实现 2.工程的代码是通过Python来完成的,需要Python调用MATLAB ...
- python 方法的实例_python调用自定义函数的实例操作
在python中,想要调用自定义函数必须先声明,然后才能调用.使用函数时,只要按照函数定义的形式,向函数传递必需的参数,就可以调用函数完成相应的功能或者获得函数返回的处理结果. (1)声明函数 pyt ...
- python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...
- python 3.9性能_Python 3.9来了!这十个新特性值得关注
选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...
- python def return 文件_python基础-文件处理与函数
1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...
- python调用 matlab库_python调用matlab的搜索结果-阿里云开发者社区
2018python技术问答集锦,希望能给喜欢python的同学一些帮助 小编发现问答专区中有很多人在问关于python的问题,小编把这些问题汇总一下,希望能给喜欢python的大家一些启示和帮助 本 ...
- python安装matlabb库_Python调用MATLAB的方法(mlab接口库)(未总结)-Go语言中文社区...
一.安装 安装mlab库 pip install mlab 显示错误 No module named 'docutils' (不知道这是什么库) pip install docutils (安装 ...
- python调用c优缺点_Python调用C模块以及性能分析
一.c,ctypes和python的数据类型的对应关系 ctypes type ctype Python type c_char char 1-character string c_wchar wch ...
- python什么模块动态调用链接库_Python调用C/C++动态链接库的方法详解
本文以实例讲解了Python调用C/C++ DLL动态链接库的方法,具体示例如下: 示例一: 首先,在创建一个DLL工程(本例创建环境为VS 2005),头文件: 1 2 3 4 5 6 7 8 9 ...
最新文章
- Linux环境源码编译安装SVN
- map初始化_您可曾这样初始化一个map呢?
- 【Java7】练习:选角色,挑苹果,员工类,换心脏,斗地主,发工资,客户信息管理软件,开发团队调度系统
- 1.5.2 在IIS上配置ASP.NET(转)
- 软件测试都有哪些证书,软件测试都有哪些证书呀?有用吗?
- 用js实现改变随意改变div属性style的名称和值的结果
- IOS开发(63)之GCD执行延迟操作
- 递增子序列 Increasing Subsequences
- [渝粤教育] 山东大学 日本历史与文化 参考 资料
- php curl 12306,pany
- oracle 快速入门之第一章 数据库基础
- python控制、监听鼠标键盘
- 计算机电子管与晶体管区别,电子管、晶体管与集成电路 扫盲
- 互联网发展阶段的三阶段是什么?从门户到搜索,到移动互联网
- Cesium中获取坐标点地形高程的方法
- 2010 27寸 imac 升级固态_2017 款 iMac,27 寸升级换 SSD 固态硬盘拆机详解
- 汇报措辞:你懂得怎样向领导汇报吗(审阅、审批、批阅、批示、查阅)?
- 配置有误:由于权限不足而无法读取配置文件
- 高效率的免费发布信息平台,助力企业高质量采购
- PS色彩算法理解记录 4 Screen