Matlab在数学建模中的应用
2011-07-30穆乃刚
穆乃刚
(中油辽河工程有限公司,辽宁 盘锦 124010)
一、前言
由实验数据建立数学模型,我们通常采用回归分析,在热油管道运行优化软件的开发中,需要根据不同油品的粘温数据,回归出粘温关系数学模型,以计算出不同温度下的油品粘度。
二、热油管道运行优化软件简介
1.功能需求
本软件的功能为已知输油管道系统的运行参数,寻求在特定输油任务的前提下,输油费用最小值时的工况组态,并可选择输出各工况组态的运行参数和相应费用。
2.编程语言及开发环境
本软件的功能侧重于数值计算,在寻优过程中需要进行大量的数据处理,为了能够快速得到寻优结果,需要软件具有较高的执行效率,因此本软件编程语言选择C++语言。C++语言程序生成代码质量高,一般只比汇编程序生成的目标代码效率低10~20%,且具有指针操作功能,能够象汇编语言一样对位、字节和地址进行操作,使程序的算法更加灵活。
本软件采用Visual C++6.0作为软件开发环境,这是一种可视化编程工具,界面友好,逻辑清晰,调试方便,界面编制能力很强,开发的软件可以在Windows系列操作系统上良好运行。
3、软件界面
本软件运行后,主界面如下图所示
三、在VC++中通过调用Matlab实现回归分析
1.在VC++中调用Matlab方法简介
Matlab是一种功能非常强大的数学分析软件,它广泛应用于线性代数、自动控制理论、数理统计、动态系统仿真等领域,具有扩展性好、易学易用、方便快捷等优点,但Matlab语言是一种解释性语言,它实时效率差、不可以脱离其环境独立运行,而在VC++中调用Matlab,既能保留Matlab的优良算法,又能保持VC++的高效率性,能大大缩短本功能模块的开发周期,在VC++中调用Matlab主要有以下两种方法:
(1)利用Matlab引擎 Matlab引擎采用客户机和服务器的计算方式,在运行中,VC++开发的程序为前端客户机,它向Matlab引擎传递命令和数据信息,并从Matlab引擎中接收数据信息,这种方法调用Matlab采用较少的代码即可实现,但不能脱离Matlab运行环境,且运行速度缓慢。
(2)调用Matlab的C/C++数学函数库 Matlab中提供了大量可以供C/C++语言调用的C/C++数学函数库,其中包含了各种矩阵操作函数,在VC++中直接调用Matlab的C/C++数学函数库,生成的软件运算速度快,且可以完全脱离Matlab的运行环境。
由于第2种方法具有第1种方法不可比拟的优越性,本软件采用第2种方法实现对Matlab的调用。
2.已知原油粘度-温度实验数据,建立粘度-温度的数学模型
本软件粘温关系数学模型采用1元4次多项式,
即y=a4x4+a3x3+a2x2+a1x+a0,
在Matlab中,多项式回归函数为a=polyfit(x,y,n),
其中x为自变量数据向量,在此为温度向量,
y为应变量数据向量,在此为粘度向量,
n为所回归的多项式的最高次幂,在此为4,
a为所回归的多项式的系数向量,
下面是热油管道运行优化软件实现此功能的主要代码,
对以上代码分析如下,
本行程序是创建mwArray类型的数据对象cc,mwArray是Matlab C++函数库中的基本数据类型,对应于Matlab中的阵列数据类型,可以用它来创建 mwArray类对象,即阵列对象,成功调用Matlab C++库函数,从而方便的实现复杂的数学矩阵运算。Matlab C++函数库通过 mwArray类,支持五种类型的Matlab阵列,分别为数值阵列、稀疏矩阵、字符矩阵、单元阵列和结构体阵列,本例程序中使用的就是数值阵列。
本行程序是调用Matlab中的多项式回归函数a=polyfit(x,y,n),得到所回归的多项式的系数阵列;
mxArray是Matlab C函数库的结构体,被封装于Matlab C++函数库mwArray类中,通过调用其成员函数GetData(),得到mxArray的指针,本例程序中为pCMxData,然后通过调用mxGetPr()函数,并采用for循环结构,取得所回归的多项式的各项系数。
至此,油品粘温关系的数学模型已成功建立完毕。
3.实例分析
由实验获得原油粘度-温度数据如下表所示,
?
运用上述方法建立的数学模型为:
y=0.00112x4-0.2968x3+29.892x2-1367.6x+24250,
其中x为温度,y为粘度,
获取的原油粘度-温度回归曲线如下图所示,
由图可知,此数学模型精确地描述了原油粘度、温度之间的函数关系。
四、结束语
原油粘度-温度数学模型的建立可以归结于1元n次多项式的回归问题,在工艺计算中,经常遇到的泵特性曲线回归均属于此类问题,如泵的扬程-流量曲线,此类问题均可以通过调用Matlab数学函数库方便、高效的解决。
[1]刘维.精通Matlab与C/C++混合程序设计(第2版)[M].北京航空航天大学出版社 2008.1.
[2].杨筱蘅.输油管道设计与管理[M].石油大学出版社 ,2006.5.