編程計算潮流
㈠ 如何用matlab分析潮流計算
一、課程設計的目的與要求 目的:培養學生的電力系統潮流計算機編程能力,掌握計算機潮流計算的相關知識 要求:基本要求: 1.編寫潮流計算程序; 2.在計算機上調試通過; 3.運行程序並計算出正確結果; 4.寫出課程設計報告 二、設計步驟: 1.根據給定的參數或工程具體要求(如圖),收集和查閱資料;學習相關軟體(軟體自選:本設計選擇Matlab進行設計)。
2.在給定的電力網路上畫出等值電路圖。 3.運用計算機進行潮流計算。 4.編寫設計說明書。 三、設計原理 1. 牛頓-拉夫遜原理 牛頓迭代法是取x0 之後,在這個基礎上,找到比x0 更接近的方程的跟,一步一步迭代,從而找到更接近方程根的近似跟。牛頓迭代法是求方程根的重要方法之一,其最大優點是在方程f(x) = 0 的單根附近具有平方收斂,而且該法還可以用來求方程的重根、復根。電力系統潮流計算,一般來說,各個母線所供負荷的功率是已知的,各個節點電壓是未知的(平衡節點外)可以根據網路結構形成節點導納矩陣,然後由節點導納矩陣列寫功率方程,由於功率方程里功率是已知的,電壓的幅值和相角是未知的,這樣潮流計算的問題就轉化為求解非線性方程組的問題了。為了便於用迭代法解方程組,需要將上述功率方程改寫成功率平衡方程,並對功率平衡方程求偏導,得出對應的雅可比矩陣,給未知節點賦電壓初值,一般為額
課程設計報告
2 定電壓,將初值帶入功率平衡方程,得到功率不平衡量,這樣由功率不平衡量、雅可比矩陣、節點電壓不平衡量(未知的)構成了誤差方程,解誤差方程,得到節點電壓不平衡量,節點電壓加上節點電壓不平衡量構成新的節點電壓初值,將新的初值帶入原來的功率平衡方程,並重新形成雅可比矩陣,然後計算新的電壓不平衡量,這樣不斷迭代,不斷修正,一般迭代三到五次就能收斂。 牛頓—拉夫遜迭代法的一般步驟: (1)形成各節點導納矩陣Y。 (2)設個節點電壓的初始值U和相角初始值e 還有迭代次數初值為0。 (3)計算各個節點的功率不平衡量。 (4)根據收斂條件判斷是否滿足,若不滿足則向下進行。 (5)計算雅可比矩陣中的各元素。 (6)修正方程式個節點電壓 (7)利用新值自第(3)步開始進入下一次迭代,直至達到精度退出循環。 (8)計算平衡節點輸出功率和各線路功率 2. 網路節點的優化 1)靜態地按最少出線支路數編號 這種方法由稱為靜態優化法。在編號以前。首先統計電力網路個節點的出線支路數,然後,按 出線支路數有少到多的節點順序編號。當由n 個節點的出線支路相同時,則可以按任意次序對這n 個節點進行編號。這種編號方法的根據是導納矩陣中,出線支路數最少的節點所對應的行中非零元素也 2)動態地按增加出線支路數最少編號在上述的方法中,各節點的出線支路數是按原始網路統計出 來的,在編號過程中認為固定不變的,事實上,在節點消去過程中,每消去一個節點以後,與該節點相連的各節點的出線支路數將發生變化(增加,減少或保持不變)。因此,如果每消去一個節點後,立即修正尚未編號節點的出線支路數,然後選其中支路數最少的一個節點進行編號,就可以預期得到更好的效果,動態按最少出線支路數編號方法的特點就是按出線最少原則編號時考慮了消去過程中各節點出線支路數目的變動情況。 3. MATLAB編程應用 Matlab 是「Matrix Laboratory」的縮寫,主要包括:一般數值分析,矩陣運算、數字信號處理、建模、系統控制、優化和圖形顯示等應用程序。由於使用Matlab 編程運算與人進行科學計算的思路和表達方式完全一致,所以不像學習高級語言那樣難於掌握,而且編程效率和計算效率極高,還可在計算機上直接輸出結果和精美的圖形拷貝,所以它的確為一高效的科研助手。
㈡ 題號:72編程計算潮流(電力系統分析)
n=5;
nl=5;
isb=1;
pr=0.00001;
B1=[120.03i01.050;230.08+0.3i0.5i10;240.1+0.35i010;340.04+0.25i0.5i10;350.015i01.051];
B2=[001.051.0501;03.7+1.3i1.05002;02+1i1.05002;01.6+0.8i1.05002;501.051.0503];
X=[10;20;30;40;50];
na=3;
Y=zeros(n);YI=zeros(n);e=zeros(1,n);f=zeros(1,n);V=zeros(1,n);O=zeros(1,n);
fori=1:n
ifX(i,2)~=0;
p=X(i,1);
Y(p,p)=1./X(i,2);
end
end
fori=1:nl
ifB1(i,6)==0
p=B1(i,1);q=B1(i,2);
elsep=B1(i,2);q=B1(i,1);
end
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5));
YI(p,q)=YI(p,q)-1./B1(i,3);
Y(q,p)=Y(p,q);
YI(q,p)=YI(p,q);
Y(q,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2;
YI(q,q)=YI(q,q)+1./B1(i,3);
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;
YI(p,p)=YI(p,p)+1./B1(i,3);
end
G=real(Y);B=imag(YI);BI=imag(Y);
fori=1:n
S(i)=B2(i,1)-B2(i,2);
BI(i,i)=BI(i,i)+B2(i,5);
end
P=real(S);Q=imag(S);
fori=1:n
e(i)=real(B2(i,3));
f(i)=imag(B2(i,3));
V(i)=B2(i,4);
end
fori=1:n
ifB2(i,6)==2
V(i)=sqrt(e(i)^2+f(i)^2);
O(i)=atan(f(i)./e(i));
end
end
fori=2:n
ifi==n
B(i,i)=1./B(i,i);
elseIC1=i+1;
forj1=IC1:n
B(i,j1)=B(i,j1)./B(i,i);
end
B(i,i)=1./B(i,i);
fork=i+1:n
forj1=i+1:n
B(k,j1)=B(k,j1)-B(k,i)*B(i,j1);
end
end
end
end
p=0;q=0;
fori=1:n
ifB2(i,6)==2
p=p+1;k=0;
forj1=1:n
ifB2(j1,6)==2
k=k+1;
A(p,k)=BI(i,j1);
end
end
end
end
fori=1:na
ifi==na
A(i,i)=1./A(i,i);
elsek=i+1;
forj1=k:na
A(i,j1)=A(i,j1)./A(i,i);
end
A(i,i)=1./A(i,i);
fork=i+1:na
forj1=i+1:na
A(k,j1)=A(k,j1)-A(k,i)*A(i,j1);
end
end
end
end
ICT2=1;ICT1=0;kp=1;kq=1;K=1;DET=0;ICT3=1;
whileICT2~=0|ICT3~=0
ICT2=0;ICT3=0;
fori=1:n
ifi~=isb
C(i)=0;
fork=1:n
C(i)=C(i)+V(k)*(G(i,k)*cos(O(i)-O(k))+BI(i,k)*sin(O(i)-O(k)));
end
DP1(i)=P(i)-V(i)*C(i);
DP(i)=DP1(i)./V(i);
DET=abs(DP1(i));
ifDET>=pr
ICT2=ICT2+1;
end
end
end
Np(K)=ICT2;
ifICT2~=0
fori=2:n
DP(i)=B(i,i)*DP(i);
ifi~=n
IC1=i+1;
fork=IC1:n
DP(k)=DP(k)-B(k,i)*DP(i);
end
else
forLZ=3:i
L=i+3-LZ;
IC4=L-1;
forMZ=2:IC4
I=IC4+2-MZ;
DP(I)=DP(I)-B(I,L)*DP(L);
end
end
end
end
fori=2:n
O(i)=O(i)-DP(i);
end
kq=1;L=0;
fori=1:n
ifB2(i,6)==2
C(i)=0;L=L+1;
fork=1:n
C(i)=C(i)+V(k)*(G(i,k)*sin(O(i)-O(k))-BI(i,k)*cos(O(i)-O(k)));
end
DQ1(i)=Q(i)-V(i)*C(i);
DQ(L)=DQ1(i)./V(i);
DET=abs(DQ1(i));
ifDET>=pr
ICT3=ICT3+1;
end
end
end
elsekp=0;
ifkq~=0;
L=0;
fori=1:n
ifB2(i,6)==2
C(i)=0;L=L+1;
fork=1:n
C(i)=C(i)+V(k)*(G(i,k)*sin(O(i)-O(k))-BI(i,k)*cos(O(i)-O(k)));
end
DQ1(i)=Q(i)-V(i)*C(i);
DQ(L)=DQ1(i)./V(i);
DET=abs(DQ1(i));
end
end
end
end
Nq(K)=ICT3;
ifICT3~=0
L=0;
fori=1:na
DQ(i)=A(i,i)*DQ(i);
ifi==na
forLZ=2:i
L=i+2-LZ;
IC4=L-1;
forMZ=1:IC4
I=IC4+1-MZ;
DQ(I)=DQ(I)-A(I,L)*DQ(L);
end
end
else
IC1=i+1;
fork=IC1:na
DQ(k)=DQ(k)-A(k,i)*DQ(i);
end
end
end
L=0;
fori=1:n
ifB2(i,6)==2
L=L+1;
V(i)=V(i)-DQ(L);
end
end
kp=1;
K=K+1;
else
kq=0;
ifkp~=0
K=K+1;
end
end
fori=1:n
Dy(K-1,i)=V(i);
end
end
disp('迭代次數')
disp(K);
disp('每次沒有達到精度要求的有功功率個數為');
disp(Np);
disp('每次沒有達到精度要求的無功功率個數為');
disp(Nq);
fork=1:n
E(k)=V(k)*cos(O(k))+V(k)*sin(O(k))*j;
O(k)=O(k)*180./pi;
end
disp('各節點的電壓標么值E為');
disp(E);
disp('各節點的電壓V大小');
disp(V);
disp('各節點的電壓相角O');
disp(O);
forp=1:n
C(p)=0;
forq=1:n
C(p)=C(p)+conj(Y(p,q))*conj(E(q));
end
S(p)=E(p)*C(p);
end
disp('各節點的功率為');
disp(S);
disp('各條支路的首端功率為');
fori=1:nl
ifB1(i,6)==0
p=B1(i,1);q=B1(i,2);
elsep=B1(i,2);q=B1(i,1);
end
Si(p,q)=E(p)*(conj(E(p))*conj(B1(i,4)./2)+(conj(E(p)*B1(i,5))-conj(E(q)))*conj(1./(B1(i,3)*B1(i,5))));
disp(Si(p,q));
end
disp('各條支路的末端功率為');
fori=1:nl
ifB1(i,6)==0
p=B1(i,1);q=B1(i,2);
elsep=B1(i,2);q=B1(i,1);
end
Sj(q,p)=E(q)*(conj(E(q))*conj(B1(i,4)./2)+(conj(E(q)./B1(i,5))-conj(E(p)))*conj(1./(B1(i,3)*B1(i,5))));
disp(Sj(q,p));
end
disp('各條支路的功率損耗為');
fori=1:nl
ifB1(i,6)==0
p=B1(i,1);q=B1(i,2);
elsep=B1(i,2);q=B1(i,1);
end
DS(i)=Si(p,q)+Sj(q,p);
disp(DS(i));
end
fori=1:K
Cs(i)=i;
forj=1:n
Dy(K,j)=Dy(K-1,j);
end
end
disp('每次迭代後各節點的電壓值如圖所示');
plot(Cs,Dy)
xlabel('迭代次數')
ylabel('電壓')
title('電壓迭代次數曲線');
㈢ 電力系統上機潮流計算程序
已發送,望採納
㈣ MATLAB簡單潮流計算程序
MATLAB簡單潮流計算程序如下:
function lianxuchaoliu
clear;
clc;
n=9;%節點數;
nl=9;%支路數;
isb=1;%平衡節點號;
pr=0.00001;%誤差精度;
㈤ 怎麼用MATLAB編程高斯賽德爾迭代法,主要是解決潮流問題
...找很久了 我也是課設的內容 但軟體沒學過 這兩天正自己啃呢 但書上沒有具體提到潮流的問題 不知怎麼解決 樓主有相關資料希望發給我[email protected]
㈥ 電力系統分析用matlab做潮流計算的具體步驟,程序怎麼寫,可以舉個例子嗎
也不知道你現在什麼水平,步驟的話隨便一本電力系統書上都有,關鍵看你用matlab怎麼實現了,matlab其實跟c語言挺像的,c語言學過的話就應該不難。最開始輸入的至少得包括支路數據和節點數據吧,主要就是形成和求解雅克比了。最簡單的,寫個m文件,在matlab命令窗口輸出結果的那種全弄下來怎麼也得寫幾篇,一步步來吧,專業不行就補補專業,編程不行就學編程。
㈦ 如果電力系統中某一發電機開斷求開斷發電機潮流計算,用matlab如何編程
直接用matpower進行改寫,設個循環,設置gen矩陣的status參數即可實現開斷。當然效率低點,不過也算是可行的。
㈧ matlab編程潮流計算的count值與什麼有關
比如一個正確的潮流計算 一般用牛拉法是 迭代6次,PQ分解法是 迭代12次。
若潮流出現發散情況,迭代到20次,dP和dQ仍然不能收斂到你要的精度(比如0.0001),此時我們判定潮流發散,若不設一個迭代上限,可想而知,程序會一直迭代下去,此時數值已完全失去意義。
㈨ 潮流計算編程
1