000_coolprop_in_matlab在Matlab中使用CoolProp

news2024/9/25 15:22:05

在Matlab中使用CoolProp

简介

在这里插入图片描述

CoolProp是一个开源的热力学性质库,可以计算多种流体的热力学性质。CoolProp支持多种编程语言,包括Python、C++、Matlab等。本文将介绍如何在Matlab中使用CoolProp。

CoolProp官网

本文所使用的Matlab版本为R2021a。

在Matlab中调用CoolProp有两个思路:

  1. 利用DLL文件,直接调用CoolProp的C++接口;
  2. 利用Python的CoolProp接口,通过Matlab调用Python。

第一种方法需要调用loadlibrary函数,然后使用calllib函数调用CoolProp的C++接口。这种方法比较复杂,而且需要了解CoolProp的C++接口。

第二种方法则比较简单,只需要调用Python的CoolProp接口即可。

Matlab的Python接口

从2014b版本开始,Matlab支持调用Python。在Matlab中调用Python需要先安装Python,然后在Matlab中设置Python的路径。

在Matlab中调用Python之前,应该设置Python的路径,在2019不之前,可以使用pyversion函数设置Python的路径,如下所示:

pyversion('C:\Python27\python.exe');

在2019b版本之后,可以使用pyenv函数设置Python的路径,如下所示:

pyenv('executable','C:\Python27\python.exe');

Matlab会自动记住上次设置的pyenv。不用每次都设置Python的路径。

但是,每次启动Python(调用Python的函数)之后,就不能更改Python的路径了,必须重启Matlab才能更改Python的路径。

此外,还有一个参数executionMode可以设置。executionMode有两个值,inprocessOutOfProcessinprocess表示在Matlab进程中运行Python,OutOfProcess表示在独立的Python进程中运行Python。默认值为inprocess

对于性能关键的应用,建议使用InProcess模式。当需要三方库来运行Python代码时(Python库依赖的库与Matlab不兼容),或者需要调试的时候,可以使用OutOfProcess模式。

设置好路径之后,不带参数调用函数pyenv可以查看当前Python的路径和执行模式,如下所示:

在这里插入图片描述

在Matlab中调用Python

当按照如上的方式设置好Python的路径之后,就可以在Matlab中调用Python了。在Matlab中调用Python的方式有两种:

  1. 使用py函数;
  2. 使用py.importlib.import_module函数。

py函数可以直接调用Python的函数,py.importlib.import_module函数可以导入Python的模块。

使用py函数调用Python的函数时,可以直接调用Python的函数,如下所示:

py.math.sin(3.14)
 ans =

    0.0016

还比如,可以调用Python的numpy库,如下所示:

py.numpy.array([1,2,3])

使用py.importlib.import_module函数导入Python的模块,然后调用Python的函数,如下所示:

np = py.importlib.import_module('numpy');
np.array([1,2,3])

当然这两种方法都是可以的。使用py函数调用Python的函数时,需要输入完整的Python函数名,而使用py.importlib.import_module函数导入Python的模块,然后调用Python的函数时,只需要输入Python函数名即可。

这里需要注意的是,python的常用类型在matlab中是不支持的,比如listdicttuple等。在matlab中,listdicttuple等都是py.listpy.dictpy.tuple等类型。哪怕是整数、浮点数等,也是py.intpy.float等类型。

可以用class函数查看python的类型,如下所示:

class(py.list([1,2,3]))

detail函数查看python对象的详细信息,包括字段、方法、事件、父类(Matlab中显示为超类)这些。

总的来说,在Matlab中调用Python的函数还是有点憋屈的,不过也能用。

那么,接下来就可以在Matlab中调用Python的CoolProp接口了。

在Matlab中调用Python的CoolProp接口

在Matlab中调用Python的CoolProp接口,首先需要安装Python的CoolProp库。在Matlab中调用Python的CoolProp接口,需要导入CoolProp模块,然后调用CoolProp.PropsSI函数即可。

总之是跟在Python中调用CoolProp接口一样的。

下面是一个例子,计算水的饱和水蒸气的焓值:

cp = py.importlib.import_module('CoolProp.CoolProp');
h = cp.PropsSI('H','P',101325,'Q',1,'Water');

如果只是使用PropsSI函数,我们可以直接导入PropsSI函数,如下所示:

PropsSI = py.importlib.import_module('CoolProp.CoolProp').PropsSI;
h = PropsSI('H','P',101325,'Q',1,'Water');

在这里插入图片描述

另外还可以写一个Matlab函数,来调用PropsSI函数,如下所示:

function ret = propsSI(varargin)
try
    ret = py.CoolProp.CoolProp.PropsSI(varargin{:});
catch
    error('CoolProp is not installed or not in the system path');
end
end

把这个函数放在Matlab的搜索路径下,就可以在Matlab中调用这个函数了。

h = propsSI('H','P',101325,'Q',1,'Water');

总结

  1. 在Matlab中调用Python需要先设置Python的路径(pyenv);
  2. 在Matlab中调用Python的函数有两种方式,一种是使用py函数,一种是使用py.importlib.import_module函数;
  3. 在Matlab中调用Python的CoolProp接口,需要导入CoolProp模块,然后调用CoolProp.PropsSI函数即可。
  4. 可以写一个Matlab函数,来调用PropsSI函数。
    使用py.importlib.import_module函数;
  5. 在Matlab中调用Python的CoolProp接口,需要导入CoolProp模块,然后调用CoolProp.PropsSI函数即可。
  6. 可以写一个Matlab函数,来调用PropsSI函数。
  7. 在Matlab中调用Python的函数时,需要注意Python的类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1539241.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zabbix与Prometheus区别简述

Zabbix与Prometheus区别简述 历史沿革 一、监控工具简介 1、Zabbix https://www.zabbix.com/cn/download Zabbix是传统的监控系统,出现比云原生早,使用的是SQL关系型数据库;开源监控软件,遵守 GPLv2开源协议,起源于…

为什么说 C/C++ 不适合做 Web 开发?

Web开发是当今信息技术领域的重要组成部分,涉及创建、维护和优化供浏览器访问的网站和应用程序。在众多编程语言中,C/C因其高效、灵活和接近硬件的特性而备受推崇,但在Web开发领域,它们并不被视为首选工具。本文将从以下几个方面探…

Linux Sftp和Scp

scp 和 sftp 区别 1 scp 能将远程文件复制到另一个远程机,sftp 不能。sftp为 SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式 2.scp 没有删除/创建远程目录功能,sftp 有。scp 在需要进行验证时会要求你输入密码或口令。 3. FT…

【算法】回溯与深搜

方法论 1.构建决策树 2.设计代码:全局变量、dfs函数 3.剪枝,回溯 全排列 给定一个不含重复数字的整数数组 nums ,返回其 所有可能的全排列 。可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出&#xff…

力扣---随机链表的复制

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 n…

进程和线程的关系与区别

目录: 导言: 正文: 一.进程 1.概念 2.进程控制块(Process Control Block,PCB) 3.状态 4.优缺点 二.线程 1.概念 2.线程的设计理由与优点 3.缺点 三.进程与线程的区别与联系 导言: 在现代计算机…

ctf__

title: ctf 2.题目类别 3.题目的细分 4.例题 misc 0x05. 明文攻击 明文攻击是一种较为高效的攻击手段,大致原理是当你不知道一个zip的密码,但是你有zip中的一个已知文件(文件大小要大于12Byte)时,因为同一个zip压缩…

java数据结构与算法刷题-----LeetCode215. 数组中的第K个最大元素

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 文章目录 解题思路:时间复杂度O( n n n),空间复杂度…

大屏可视化综合展示解决方案

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.…

STM32 CAN的位时序和波特率

STM32 CAN的位时序和波特率 位时序 STM32的CAN外设位时序中只包含3段,分别是同步段SYNC_SEG、位段BS1及位段BS2,采样点位于BS1及BS2段的交界处。其中SYNC_SEG段固定长度为1Tq,而BS1及BS2段可以在位时序寄存器CAN_BTR设置它们的时间长度&…

CISP 4.2备考之《安全支撑技术》知识点总结

文章目录 第一节 密码技术第二节 标识和身份鉴别技术第三节 访问控制技术 第一节 密码技术 密码学发展阶段:古典、近代、现代和公钥密码学及特点。 密码系统组成:明文、加密、密钥、解密、密文。 柯克霍夫原则:密钥保密,算法公开…

Stable Diffusion 本地训练端口与云端训练端口冲突解决办法

方法之一,修改本地训练所用的端口 1 首先,进入脚本训练器的根目录 例如:C:\MarkDeng\lora-scripts-v1.7.3 找到gui.py 2 修改端口号 因为云端训练器也是占用28000和6006端口 那么本地改成27999和6007也是可以的 保存退出,运行启动…

NX二次开发常用函数:UF_MODL_ask_feat_......(一)

最近学习NX二次开发发现有一些函数经常使用,俗话说得好,好记性不如烂笔头,现在做一下笔记,帮助理解。 UF_MODL_ask_feat_......所在头文件uf_modl.h 1、UF_MODL_ask_feat_body(通过特征查询体) 概述&…

liunx centos7 下通过yum删除安装已经安装的php

执行下面命令查看php相关的包 rpm -qa | grep php 只需要卸载几个名为common的包即可,其他同版本依赖会被全部删除,删除php71w-common,71w版本的依赖包全部会被删除。 查看php包的命令 rpm -qa | grep php 或 yum list installed | gre…

鸿蒙APP应用开发教程—超详细的项目结构说明

1. 新建项目 打开DevEco Studio, 选择 Create Project: 1.1 选择模版 Create Project - Choose Template 1.2 配置项目 Create Project - Configure Project 如果使用的是 DevEco 3.X 版本, 可以根据 Compile SDK版本选择不同的模式, 比如: 3.0.0(API 8)及更早 - 仅支持 …

Docker-Image

Docker Docker 镜像是什么为什么需要镜像镜像命令总览docker imagesdocker tagdocker pulldocker pushdocker rmidocker savedocker loaddocker image inspectdocker historydocker importdocker image prunedocker build Docker 镜像是什么 Docker image 本质上是一个 read-on…

图像分类从零开始(1)

尽我所能,总结留给后面的师弟们! 1.目标 搭建一个完整的系统,包括图像数据集预处理,训练模型,分类器,优化器,以及结果数据处理。 2.理论 3.实例(猫狗分类) Gitee代码…

猫,路由器,WIFI

家庭网络常识 1:猫、路由器、wifi_哔哩哔哩_bilibili 入户光纤插到猫上面,网线连接猫和路由器,网线连接路由器和电脑。路由器可以发射WIFI。 手机通过WIFI连接到路由器。 左边是猫,右边是光猫。 (modem) …

二分算法的变种----查找递增可重复数组边界

public class test {//数组长度a,b,c为8,d为7;static int[] a {3,5,8,8,8,9,9,10};static int[] b {8,8,8,8,8,8,8,8};static int[] c {0,0,0,0,0,0,0,0};static int[] d {0,0,0,0,0,0,0};public static void main(String[] args) {int target 0;System.out.pr…

鸿蒙Harmony应用开发—ArkTS(stateStyles:多态样式)

Styles和Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。 概述 stateStyles是属性方法,可以…