基于C++的電力潮流計(jì)算牛-拉法與P-Q法的分析比較
1. 引言
本文引用地址:http://m.butianyuan.cn/article/176813.htm潮流計(jì)算是研究電力系統(tǒng)穩(wěn)態(tài)問(wèn)題的基礎(chǔ),在應(yīng)用計(jì)算機(jī)計(jì)算電力系統(tǒng)潮流分布以來(lái),先后出現(xiàn)過(guò)以節(jié)點(diǎn)導(dǎo)納矩陣為基礎(chǔ)的逐次迭代法,即導(dǎo)納法,和以阻抗矩陣為基礎(chǔ)的逐次代入法,即阻抗法。針對(duì)阻抗法占用計(jì)算機(jī)內(nèi)存大的問(wèn)題,又出現(xiàn)了分塊阻抗法及牛頓-拉夫遜法(Newton-Raphson),而NR法也解決了導(dǎo)納法收斂性差的問(wèn)題。PQ分解法是使用極坐標(biāo)表示時(shí)的NR法,既可用于離線潮流計(jì)算,更能夠應(yīng)用于在線潮流計(jì)算。
本文針對(duì)NR法和PQ法,在Windows環(huán)境下,使用C++語(yǔ)言開(kāi)發(fā)出了相應(yīng)的計(jì)算工具,對(duì)同一個(gè)算例分別使用不同工具,將得到的兩種結(jié)果進(jìn)行比較,發(fā)現(xiàn)對(duì)不同復(fù)雜度(本文以節(jié)點(diǎn)數(shù)目多少來(lái)定義網(wǎng)絡(luò)復(fù)雜度高低)的算例,應(yīng)當(dāng)選擇合適的算法程序以使收斂性和計(jì)算速度能同時(shí)滿足要求。
2. 潮流計(jì)算的基本原理
潮流計(jì)算時(shí)對(duì)每個(gè)節(jié)點(diǎn)給出兩個(gè)運(yùn)行參數(shù)作為已知條件,另外兩個(gè)作為待求量。由原始數(shù)據(jù)的給出方式,節(jié)點(diǎn)一般分3類(lèi):
(1)PQ節(jié)點(diǎn):已知節(jié)點(diǎn)有功功率及無(wú)功功率(P,Q),待求量為電壓幅值和電壓相量角度(V, )。
(2)PV節(jié)點(diǎn):已知節(jié)點(diǎn)有功功率及電壓幅值(P,V),待求量為無(wú)功功率及電壓相量角度(Q, )。
(3)平衡節(jié)點(diǎn):此類(lèi)節(jié)點(diǎn)一般在系統(tǒng)中只設(shè)一個(gè)。給定該節(jié)點(diǎn)電壓的幅值V及電壓向量角度 = ,待求量為該點(diǎn)有功功率P及無(wú)功功率Q。本論文中所用算例均只有一個(gè)平衡節(jié)點(diǎn)。
2.1 NR法的基本原理
牛頓-拉夫遜法通過(guò)逐次線性化把非線性方程式的求解過(guò)程變成對(duì)相應(yīng)的線性方程式的求解過(guò)程。其修正方程式為:
(1)
2.2 PQ法的基本原理
PQ分解法是在對(duì)采用極坐標(biāo)表示的NR法進(jìn)行有效簡(jiǎn)化的基礎(chǔ)上發(fā)展而來(lái),NR法的核心是求解修正方程式。高壓電力系統(tǒng)中有功功率潮流主要與各節(jié)點(diǎn)電壓向量角度有關(guān),無(wú)功功率潮流則主要受各節(jié)點(diǎn)電壓幅值的影響。忽略可以不計(jì)入在內(nèi)的因素,其修正方程式采用極坐標(biāo)表達(dá)為:
(2)、(3)與功率誤差方程式
(4)和
(5)
共同構(gòu)成PQ分解法迭代過(guò)程中的計(jì)算公式。
3. NR算法和PQ算法的C++編程方案設(shè)計(jì)
考慮到計(jì)算工具的通用性和可擴(kuò)展性,設(shè)計(jì)時(shí)應(yīng)將各部分功能進(jìn)行模塊化處理,以利于縮短開(kāi)發(fā)周期,并實(shí)現(xiàn)不同算法中功能相同模塊的重復(fù)使用,提高程序代碼使用率。因而選擇VC++6.0中STL所提供的常用容器類(lèi)模板Vector,Complex和String編寫(xiě)程序代碼:Vector模板類(lèi)用于對(duì)向量類(lèi)型數(shù)組進(jìn)行操作,且Vector對(duì)象運(yùn)行時(shí)可以動(dòng)態(tài)改變自身大小以便容納任何數(shù)目的元素;Complex模板類(lèi)用于復(fù)數(shù)存儲(chǔ)和操作;String模板類(lèi)用于字符串操作。正是基于C++通用庫(kù)STL模板類(lèi)功能便于實(shí)現(xiàn)模塊化,而無(wú)論采用哪種算法都須對(duì)電壓,電流及功率復(fù)數(shù)向量進(jìn)行處理。此外,還要適應(yīng)不同規(guī)模的算例,因此利用STL通用庫(kù)模板類(lèi)進(jìn)行編程成為本論文的首選。其次,網(wǎng)絡(luò)參數(shù)的輸入統(tǒng)一采用電氣和電子工程師協(xié)會(huì)推薦使用的標(biāo)準(zhǔn)數(shù)據(jù)格式:IEEE通用數(shù)據(jù)文件格式(Common Data Format),CDF作為電網(wǎng)的拓?fù)浣Y(jié)構(gòu)輸入文件,另外每個(gè)算法程序還要給出各自運(yùn)行耗時(shí),方便計(jì)算結(jié)果對(duì)比。
3.1 文件輸入輸出模塊
文件輸入模塊完成對(duì)電力系統(tǒng)網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)以及各個(gè)節(jié)點(diǎn)和各條支路的參數(shù)信息的讀取和存儲(chǔ),供計(jì)算使用。首先建立一組輸入文件,以5節(jié)點(diǎn)網(wǎng)絡(luò)為例,按照CDF格式建立輸入文件,包含各節(jié)點(diǎn)參數(shù)和各支路參數(shù),以“005IEEE.dat”作為文件名存檔。編程時(shí)定義節(jié)點(diǎn)信息結(jié)構(gòu)體(BusData)和支路信息結(jié)構(gòu)體(BranchData)。母線節(jié)點(diǎn)信息(BUS DATA FOLLOWS)包含:節(jié)點(diǎn)編號(hào)number、節(jié)點(diǎn)名稱(chēng)name、負(fù)荷區(qū)編號(hào)LoadFlowAreaNumber、損耗區(qū)編號(hào)LossZoneNumber、節(jié)點(diǎn)類(lèi)型Type、迭代后的電壓值FinalVoltage、迭代后的電壓向量角度(此處為弧度制)FinalAngle、負(fù)荷有功LoadMW、負(fù)荷無(wú)功LoadMVAR、發(fā)電機(jī)有功GenerationMW、發(fā)電機(jī)無(wú)功GenerationMVAR、基準(zhǔn)電壓BaseKV。支路信息(BRANCH DATA FOLLOWS)包含:支路起始節(jié)點(diǎn)TapBusNumber、支路終端節(jié)點(diǎn)ZBusnumber、負(fù)荷區(qū)LoadFlowArea、損耗區(qū)LossZone、支路類(lèi)型Type、支路電阻值BranchR、支路電抗值BranchX、支路對(duì)地導(dǎo)納值LineChargingB、變壓器變比TransformerFinalTurnsRatio。通過(guò)ifstream DataFile(filename.c_str())語(yǔ)句打開(kāi)數(shù)據(jù)輸入文件,對(duì)輸入文件數(shù)據(jù)流操作,將相應(yīng)信息導(dǎo)入與之對(duì)應(yīng)的結(jié)構(gòu)體變量,完成輸入文件模塊化。
文件輸出模塊用來(lái)輸出并保存潮流計(jì)算結(jié)果,利用outputfile語(yǔ)句對(duì)NR算法和PQ算法每次迭代時(shí)各個(gè)變量的初值和計(jì)算后的終值輸出,并將最終結(jié)果存入“xxxieee_NR_Result.dat”和“xxxieee_PQ_Result.dat”文檔。
3.2 NR算法模塊化函數(shù)編程及流程圖
(1)導(dǎo)納矩陣生成模塊:根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)計(jì)算出導(dǎo)納矩陣;
(2)節(jié)點(diǎn)功率誤差模塊:根據(jù)功率誤差公式計(jì)算出各節(jié)點(diǎn)功率誤差;
(3)雅可比矩陣生成模塊:由NR法修正方程式系數(shù)矩陣公式計(jì)算出雅可比矩陣;
(4)修正方程式求解模塊:解修正方程式得到修正量;
(5)節(jié)點(diǎn)電壓修正模塊:用修正量去修正各節(jié)點(diǎn)電壓值。
流程圖見(jiàn)圖1。
圖1 NR算法模塊化函數(shù)編程及流程圖 圖2 PQ算法模塊化函數(shù)編程及流程圖
3.3 PQ算法模塊化函數(shù)編程及流程圖
(1)導(dǎo)納矩陣生成模塊:根據(jù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)計(jì)算出導(dǎo)納矩陣;
(2)根據(jù)功率誤差公式計(jì)算出各節(jié)點(diǎn)功率誤差的模塊;
(3)生成修正方程系數(shù)矩陣的模塊;
(4)高斯消去法解 修正方程式的模塊;
(5)高斯消去法解Q-V修正方程式的模塊;
(6)修正各節(jié)點(diǎn)電壓值的模塊。
流程圖見(jiàn)圖2。
3.4 算法編程細(xì)節(jié)問(wèn)題說(shuō)明
初始電壓用“平啟動(dòng)”方式,即e=1.0,f=0.0給出;用高斯消去法解修正方程式;NR法雅可比矩陣的形成與迭代同步進(jìn)行,即每次迭代時(shí)系數(shù)矩陣都將不同。對(duì)高壓電力系統(tǒng),雅可比矩陣中各行的最大元素是有功功率誤差量對(duì)電壓的橫分量e的偏導(dǎo)數(shù)與無(wú)功功率誤差量對(duì)電壓的縱分量f的偏導(dǎo)數(shù),它們都不在對(duì)角元素位置。為減少計(jì)算過(guò)程舍入誤差,程序通過(guò)對(duì)調(diào)雅可比矩陣中奇數(shù)行和偶數(shù)行的位置來(lái)實(shí)現(xiàn)最大元素放在對(duì)角元素位置上,以提高計(jì)算精度;對(duì)PQ分解法將BX法應(yīng)用于程序編寫(xiě)。修正方程式的系數(shù)矩陣在每次迭代計(jì)算時(shí)都將固定不變,在電網(wǎng)拓?fù)浣Y(jié)構(gòu)數(shù)學(xué)模型的建立之初就已確定,與每次電壓相量迭代結(jié)果無(wú)直接關(guān)系;由于Vector只能對(duì)一維向量進(jìn)行存儲(chǔ),而矩陣相當(dāng)于一個(gè)二維數(shù)組,就出現(xiàn)了如何將二維數(shù)組轉(zhuǎn)化成一維向量的問(wèn)題。對(duì)于一個(gè)i行j列的二維數(shù)組,可通過(guò)下面語(yǔ)句將其轉(zhuǎn)變?yōu)橐痪S向量:
vector
for(i=0;i MatrixSize;i++)
for(j=0;j MatrixSize;j++)
Matrix[i* MatrixSize+j]=X[i][j];
其中,一維向量的大小即MatrixSize*MatrixSize,它等于二維數(shù)組X[i][j]中所有元素的個(gè)數(shù)(也就是矩陣的大小)。由此解決矩陣存儲(chǔ)的問(wèn)題;收斂條件可根據(jù)需要輸入,當(dāng)滿足收斂性要求時(shí)計(jì)算結(jié)束。
4. 基于C++的兩種不同算法的實(shí)驗(yàn)驗(yàn)證
圖3 包含5節(jié)點(diǎn)的網(wǎng)絡(luò)模型算例 圖4 斂代特性對(duì)數(shù)坐標(biāo)比較
以圖3的網(wǎng)絡(luò)模型為算例,以 為收斂條件。用C++編程,使用NR算法的輸出結(jié)果(直角坐標(biāo)系)如表1,使用PQ算法程序的輸出結(jié)果(極坐標(biāo)系)如表2。
迭代次數(shù) | e 1 | f1 | e 2 | f 2 | e 3 | f 3 | e 4 | f 4 |
1 | 0.96643 | -0.033481 | 1.10538 | 0.36074 | 1.05881 | -0.06900 | 1.05000 | 0.45748 |
2 | 0.87365 | -0.07006 | 1.03350 | 0.32886 | 1.03564 | -0.07694 | 0.97694 | 0.38919 |
3 | 0.85947 | -0.07176 | 1.02608 | 0.33047 | 1.03355 | -0.07737 | 0.97464 | 0.39061 |
4 | 0.85915 | -0.07182 | 1.02600 | 0.33047 | 1.03351 | -0.07738 | 0.97461 | 0.39067 |
5 | 0.85915 | -0.07182 | 1.02600 | 0.33047 | 1.03351 | -0.07738 | 0.97461 | 0.39067 |
表1:NR算法程序的輸出結(jié)果
迭代次數(shù) | Θ1 | V1 | Θ2 | V2 | Θ3 | V3 | Θ4 |
1 | -0.09455 | 0.89507 | 0.30580 | 1.07779 | -0.07995 | 1.03793 | 0.38080 |
2 | -0.08227 | 0.87158 | 030728 | 1.07857 | -0.07405 | 1.03743 | 0.37652 |
3 | -0.08239 | 0.86512 | 0.31048 | 1.07813 | -0.07448 | 1.03673 | 0.38010 |
4 | -0.08316 | 0.86309 | 0.31117 | 1.07798 | -0.07468 | 1.03652 | 0.38079 |
5 | -0.08332 | 0.86244 | 0.31152 | 1.07794 | -0.07471 | 1.03644 | 0.38115 |
6 | -0.08339 | 0.86222 | 0.31162 | 1.07792 | -0.07473 | 1.03642 | 0.38126 |
7 | -0.08341 | 0.86215 | 0.31166 | 1.07791 | -0.07473 | 1.03741 | 0.38129 |
8 | -0.08342 | 0.86213 | 0.31167 | 1.07791 | -0.07474 | 1.03740 | 0.38131 |
9 | -0.08342 | 0.86212 | 0.31167 | 1.07791 | -0.07474 | 1.03740 | 0.38131 |
10 | -0.08342 | 0.86212 | 0.31168 | 1.07791 | -0.07474 | 1.03741 | 0.38131 |
表2:PQ算法程序的輸出結(jié)果
算法 IEEE05 迭代次數(shù) IEEE14 迭代次數(shù) IEEE30 迭代次數(shù) IEEE05 運(yùn)行時(shí)間 IEEE14 運(yùn)行時(shí)間 IEEE30 運(yùn)行時(shí)間 NR法 5 5 5 0.100000s 0.291000s 0.911000s PQ法 5 34 46 0.171000s 0.751000s 2.654000s
表3:兩種算法比較
由表1和表2的比較可以看出,無(wú)論NR法還是PQ法得到的計(jì)算結(jié)果一致。另外使用IEEE14和IEEE30的算例繼續(xù)用這兩種算法程序計(jì)算,匯總結(jié)果可得到如下結(jié)論(如表3):
對(duì)于相同的收斂條件,PQ法比NR法計(jì)算時(shí)所需要的迭代次數(shù)隨著復(fù)雜度的增加而增加,相應(yīng)的運(yùn)行時(shí)間也較長(zhǎng);但對(duì)于迭代一次所需的時(shí)間,PQ法要比NR法少很多。另外對(duì)于不同的收斂條件繼續(xù)使用NR算法程序和PQ算法程序計(jì)算,根據(jù)試驗(yàn)數(shù)據(jù)可繪制斂代特性比較圖大致如圖4所示,以A點(diǎn)為界,在A點(diǎn)之左,PQ法比NR法收斂的快,而在A點(diǎn)之右,NR法比PQ法收斂的快。
5.結(jié)論
綜上可見(jiàn),偏重于滿足數(shù)據(jù)精度要求時(shí),可采用NR算法來(lái)計(jì)算網(wǎng)絡(luò)潮流的分布情況,而偏重于滿足計(jì)算速度要求時(shí)應(yīng)當(dāng)選擇PQ法,這就是PQ法也應(yīng)用于電力網(wǎng)絡(luò)潮流在線計(jì)算的原因之一。本文通過(guò)C++平臺(tái)分別用NR法和PQ法對(duì)算例一進(jìn)行了分析,有力論證了上述結(jié)論,有一定的實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn)
[1] 王錫凡.現(xiàn)代電力系統(tǒng)分析.北京:科學(xué)出版社,2003.
[2] C++ STL中文版. P. J. Plauger ... [等] 著 王昕譯.北京-中國(guó)電力出版社 2002.5.
[3] 郭志忠, 柳 卓. 兩種分析潮流算法的比較研究. 中國(guó)電機(jī)工程學(xué)報(bào), 1987,7 (6) :78-82.
[4] 陳穎,沈沉,梅生偉,盧強(qiáng).基于改進(jìn)Jacobian-Free Newton-GMRES(m)的電力系統(tǒng)分布式潮流計(jì)算. 電力系統(tǒng)自動(dòng)化, 2006,(09) .
[5] Micheli G D, Newton A R, Sangiovanni-Vincentelli A L. Symmetric Displacement Algorithm for the Timing Analysis of MO S VL S I Circuits. IEEE Trans. CAD, 1983, 2: 167-180.
dc相關(guān)文章:dc是什么
c++相關(guān)文章:c++教程
汽車(chē)防盜機(jī)相關(guān)文章:汽車(chē)防盜機(jī)原理
評(píng)論