穆乃剛
(中油遼河工程有限公司,遼寧 盤錦 124010)
由實(shí)驗(yàn)數(shù)據(jù)建立數(shù)學(xué)模型,我們通常采用回歸分析,在熱油管道運(yùn)行優(yōu)化軟件的開發(fā)中,需要根據(jù)不同油品的粘溫?cái)?shù)據(jù),回歸出粘溫關(guān)系數(shù)學(xué)模型,以計(jì)算出不同溫度下的油品粘度。
1.功能需求
本軟件的功能為已知輸油管道系統(tǒng)的運(yùn)行參數(shù),尋求在特定輸油任務(wù)的前提下,輸油費(fèi)用最小值時(shí)的工況組態(tài),并可選擇輸出各工況組態(tài)的運(yùn)行參數(shù)和相應(yīng)費(fèi)用。
2.編程語言及開發(fā)環(huán)境
本軟件的功能側(cè)重于數(shù)值計(jì)算,在尋優(yōu)過程中需要進(jìn)行大量的數(shù)據(jù)處理,為了能夠快速得到尋優(yōu)結(jié)果,需要軟件具有較高的執(zhí)行效率,因此本軟件編程語言選擇C++語言。C++語言程序生成代碼質(zhì)量高,一般只比匯編程序生成的目標(biāo)代碼效率低10~20%,且具有指針操作功能,能夠象匯編語言一樣對(duì)位、字節(jié)和地址進(jìn)行操作,使程序的算法更加靈活。
本軟件采用Visual C++6.0作為軟件開發(fā)環(huán)境,這是一種可視化編程工具,界面友好,邏輯清晰,調(diào)試方便,界面編制能力很強(qiáng),開發(fā)的軟件可以在Windows系列操作系統(tǒng)上良好運(yùn)行。
3、軟件界面
本軟件運(yùn)行后,主界面如下圖所示
1.在VC++中調(diào)用Matlab方法簡(jiǎn)介
Matlab是一種功能非常強(qiáng)大的數(shù)學(xué)分析軟件,它廣泛應(yīng)用于線性代數(shù)、自動(dòng)控制理論、數(shù)理統(tǒng)計(jì)、動(dòng)態(tài)系統(tǒng)仿真等領(lǐng)域,具有擴(kuò)展性好、易學(xué)易用、方便快捷等優(yōu)點(diǎn),但Matlab語言是一種解釋性語言,它實(shí)時(shí)效率差、不可以脫離其環(huán)境獨(dú)立運(yùn)行,而在VC++中調(diào)用Matlab,既能保留Matlab的優(yōu)良算法,又能保持VC++的高效率性,能大大縮短本功能模塊的開發(fā)周期,在VC++中調(diào)用Matlab主要有以下兩種方法:
(1)利用Matlab引擎 Matlab引擎采用客戶機(jī)和服務(wù)器的計(jì)算方式,在運(yùn)行中,VC++開發(fā)的程序?yàn)榍岸丝蛻魴C(jī),它向Matlab引擎?zhèn)鬟f命令和數(shù)據(jù)信息,并從Matlab引擎中接收數(shù)據(jù)信息,這種方法調(diào)用Matlab采用較少的代碼即可實(shí)現(xiàn),但不能脫離Matlab運(yùn)行環(huán)境,且運(yùn)行速度緩慢。
(2)調(diào)用Matlab的C/C++數(shù)學(xué)函數(shù)庫 Matlab中提供了大量可以供C/C++語言調(diào)用的C/C++數(shù)學(xué)函數(shù)庫,其中包含了各種矩陣操作函數(shù),在VC++中直接調(diào)用Matlab的C/C++數(shù)學(xué)函數(shù)庫,生成的軟件運(yùn)算速度快,且可以完全脫離Matlab的運(yùn)行環(huán)境。
由于第2種方法具有第1種方法不可比擬的優(yōu)越性,本軟件采用第2種方法實(shí)現(xiàn)對(duì)Matlab的調(diào)用。
2.已知原油粘度-溫度實(shí)驗(yàn)數(shù)據(jù),建立粘度-溫度的數(shù)學(xué)模型
本軟件粘溫關(guān)系數(shù)學(xué)模型采用1元4次多項(xiàng)式,
即y=a4x4+a3x3+a2x2+a1x+a0,
在Matlab中,多項(xiàng)式回歸函數(shù)為a=polyfit(x,y,n),
其中x為自變量數(shù)據(jù)向量,在此為溫度向量,
y為應(yīng)變量數(shù)據(jù)向量,在此為粘度向量,
n為所回歸的多項(xiàng)式的最高次冪,在此為4,
a為所回歸的多項(xiàng)式的系數(shù)向量,
下面是熱油管道運(yùn)行優(yōu)化軟件實(shí)現(xiàn)此功能的主要代碼,
對(duì)以上代碼分析如下,
本行程序是創(chuàng)建mwArray類型的數(shù)據(jù)對(duì)象cc,mwArray是Matlab C++函數(shù)庫中的基本數(shù)據(jù)類型,對(duì)應(yīng)于Matlab中的陣列數(shù)據(jù)類型,可以用它來創(chuàng)建 mwArray類對(duì)象,即陣列對(duì)象,成功調(diào)用Matlab C++庫函數(shù),從而方便的實(shí)現(xiàn)復(fù)雜的數(shù)學(xué)矩陣運(yùn)算。Matlab C++函數(shù)庫通過 mwArray類,支持五種類型的Matlab陣列,分別為數(shù)值陣列、稀疏矩陣、字符矩陣、單元陣列和結(jié)構(gòu)體陣列,本例程序中使用的就是數(shù)值陣列。
本行程序是調(diào)用Matlab中的多項(xiàng)式回歸函數(shù)a=polyfit(x,y,n),得到所回歸的多項(xiàng)式的系數(shù)陣列;
mxArray是Matlab C函數(shù)庫的結(jié)構(gòu)體,被封裝于Matlab C++函數(shù)庫mwArray類中,通過調(diào)用其成員函數(shù)GetData(),得到mxArray的指針,本例程序中為pCMxData,然后通過調(diào)用mxGetPr()函數(shù),并采用for循環(huán)結(jié)構(gòu),取得所回歸的多項(xiàng)式的各項(xiàng)系數(shù)。
至此,油品粘溫關(guān)系的數(shù)學(xué)模型已成功建立完畢。
3.實(shí)例分析
由實(shí)驗(yàn)獲得原油粘度-溫度數(shù)據(jù)如下表所示,
?
運(yùn)用上述方法建立的數(shù)學(xué)模型為:
y=0.00112x4-0.2968x3+29.892x2-1367.6x+24250,
其中x為溫度,y為粘度,
獲取的原油粘度-溫度回歸曲線如下圖所示,
由圖可知,此數(shù)學(xué)模型精確地描述了原油粘度、溫度之間的函數(shù)關(guān)系。
原油粘度-溫度數(shù)學(xué)模型的建立可以歸結(jié)于1元n次多項(xiàng)式的回歸問題,在工藝計(jì)算中,經(jīng)常遇到的泵特性曲線回歸均屬于此類問題,如泵的揚(yáng)程-流量曲線,此類問題均可以通過調(diào)用Matlab數(shù)學(xué)函數(shù)庫方便、高效的解決。
[1]劉維.精通Matlab與C/C++混合程序設(shè)計(jì)(第2版)[M].北京航空航天大學(xué)出版社 2008.1.
[2].楊筱蘅.輸油管道設(shè)計(jì)與管理[M].石油大學(xué)出版社 ,2006.5.