#包括“stdio.h中”
的#include“math.h的”
#定义M 20 / *节点数目,分行数目限制* /
#定义N 5 / *迭代次数的限制* /
整数N,M,DD = 0,PQ = 0,PV = 0,TT,QY;
浮动EPS / *节点数目,地支的,PQ节点,PV节点,控制打印,互联网一些精密* /
结构jiedian / *节点的数据结构* /
{int类型; / *节点的分支数类型:1-PQ节点; 2-PV节点; 3 - 平衡节点* /
持股量P,Q,E,F,V; / *节点主动和无功功率,电压,实部,虚部发言电压值* /
} jiedian [M] / *作为一个参考节点的无功功率,相比jiedian [1]。 Q * /
结构植绿/ *分支的数据结构* / {P1,P2,S / *分支结束节点号,分支类型:1 - 正常滑中国 - 变压器分支3 - 地支鲁* /
浮动R,X,B,克拉; / *防滑性,抗,导纳,非标准变压器匝数比* / }植绿[M]; /> 结构hulianwang / *网络结构* /
{数,PV / * Internet区域的号码,指定PV节点数量* /
持股量P,EPS2 / *指定激活时,其允许误差* /
诠释计数; / *每个区域包括相互连接的节点* /
INT A [M] / *包括节点* /
} hulianwang [M];
静态浮动G [M] [M],B [M] [M],G1 [M] [M],B1 [M] [M] / *节点导纳矩阵矩阵* /
静浮YKB [2 * M] [2 * M] / *节点导纳矩阵矩阵* /
静态浮动饮子[2 * M] [2 * M];系数表* / * /
静态持股量P [M] [M],Q [M] [M] / *流* /
FILE * FP1,FP2 * / *文件的输入和输出指针* / / a>
无效输入()/ *输入文件in.txt基本参数,节点数据,分支机构数据线* /
{
INT I,J,H / *循环变量节点(分公司)类型* /
/ **********************************开放电网参数文件********************** /
FP1 =的FOPEN(英寸TXT“,”R“);
如果(FP1 == NULL)
{
的printf(“无法打开文件in.txt!\ N”);
出口(0);
}
/ ***********阅读的节点,多家分支机构,互联网号码,PQ节点,节点和准确性的光伏*********** /
> fscanf(FP1,“%D,%D,%D,%F \ N”,&N,&M&QY&EPS);
/ ******* *****************读取节点信息****************************** ******* /
(1 <= N;我+ +)
{
fscanf(FP1,“%D”,&H); BR />(H == 1)/ *类型H = 1的PQ节点* /
{
PQ + +;
fscanf(FP1,“%F%F %F,%F \ N“,&jiedian的[I] P,&jiedian的[I] Q,&jiedian的[I]。&jiedian的[I] F);
jiedian [ ]。 S = 1;,
jiedian [I]。 = SQRT(jiedian [I],E * jiedian [I] E + jiedian [I],F * jiedian [I] F);
}
其他(H == 2) / * H型= 2是PV节点* /
{
PV + +;
fscanf(FP1,“%F,%F,%F,%F \”& jiedian [] P,&jiedian的[I] V,&jiedian的[I],E,及jiedian [I],F);
jiedian [I]。 S = 2;,
jiedian [I]。 Q = 0;
}
其他/ *型h = 3是平衡的节点* /
{ jiedian [I]。 P = 0;,
jiedian [I]。 Q = 0;,
jiedian [I]。 E = 1;,
jiedian [I]。 F = 0;,
jiedian [I]。 V = 1;,
jiedian [I]。 S = 3;
}
}
/ *************************** ****阅读分支信息************************************* /
(I = 1; <= M; + +)
{
fscanf(FP1,“为%d”,&H);
(H == 1)/ *类型H = 1是一个普通的分支* /
{
fscanf(FP1,“%D%D%F%F%F \ N”,植绿[I] P1,植绿[I] P2,&植绿[I],R&植绿[I],&植绿[I]);
植绿[I]。 KT = 1;,
植绿[I]。 = 1;
}
(H == 2)/ * H型= 2是变压器支路* /
{
fscanf(FP1,“%D, %%F,%F,%D,F \ N“,植绿[I]。P1,植绿[I]。P2,植绿[I],R&植绿[I],X,&植绿I]。克拉);,
植绿[I]。 S = 2;
}
(H == 3)/ * H型= 3接地分支* /
{
fscanf(FP1,“%D,% D,%F,%F,%F \ N“,植绿[I]。P1,植绿[I]。P2,植绿[I],R&植绿[I],X,&植绿[ ,B);
植绿[I]。 KT = 1;,
植绿[I]。 S = 3;
DD + +;
}
}
/ ******************* ************读取互联网信息*********************************** / **
(qy! = 0)
(I = 1; <= QY; + +)/ *输入互联网状态* /
{
fscanf(FP1,“%D,%D,%F,%F,为%d”,&hulianwang [i]于民,&hulianwang的[I]光伏hulianwang [I],P&hulianwang [I] 。EPS2,hulianwang的[I]计数);
(J = 1; <= hulianwang [I]。计数; J + +)
fscanf(FP1,“%D”, (hulianwang [I]一个[J]));
}
FCLOSE(FP1);
/ ********* *打开输出文件********************************************* *********** /
FP2 =打开(“out.txt的”,“W”);
(FP2 == NULL)
{
>的printf(“无法打开文件!\ N”);
出口(0);
}
fprintf(FP2,“\ N ****原始数据如下************************************************ *********** \ n \ n已“);
fprintf(FP2,”节点:%2D科数:%2D正确的地支的:%2D PQ节点编号:%2D PV节点:%2D精度1%F \ N“,N,M,DD,PQ,PV,EPS);
fprintf(FP2,”\ N ---------- -------------------------------------------------- ----------------- \ N \ N“);
(1 <= PQ + +)
fprintf(FP2 ,“%2D PQ节点节点P [%d〕=%F Q [%] =%F \”,我,我,jiedian [I],P,I,jiedian []。Q); p>就(i = PQ +1 <= PQ + PV + +)
fprintf(FP2,“节点%2D PV节点P [%] =%F V [% e] =%f \ N“,我,我,jiedian [I],P,I,jiedian [I],V);
fprintf(FP2,”节点%2D平衡节点\ N“,我)
fprintf(FP2,“,\ N -------------------------------------- ----------------------------------------- \ N \ N“); />(I = 1; <= M; + +)
{
如果(植绿[I]。== 1)
fprintf(FP2,“支部%2D :普通分支相关节点:%2D,2D R%=%F X =%F B =%F \“,我,植绿[I] P1,植绿[I]。P2,植绿[I],R植绿[I],植绿[I]);
其他(植绿[I]。== 2)
fprintf(FP2,“分支%2D:变压器分会相关节点: %2D,2D R%=%F X =%f KT =%F \“,我植绿[I] P1,植绿[I]。P2,植绿[I],R,植绿[I],X植绿[I]。克拉);
其他
fprintf(FP2,“支部%2D:相关节点树枝在地上:%2D=%F X =%F B =%F \ “,我植绿[I]。P1,植绿[I],R,植绿[I],植绿[] b)条;
}
(I = 1 <= QY; + +)
{
fprintf(FP2,“Internet区域中:%2D指定PV节点:%2D提供有效:%8.5F允许误差:包括节点%8.5F :“,hulianwang [I]数,hulianwang [I]。光伏,hulianwang [I],P,hulianwang []。EPS2);
(J = 1; <= hulianwang [I]。计数; J + +)
fprintf(FP2,“2D”,hulianwang [I]一个[J]); fprintf(FP2,“\ N”);
}
}
无效油花()/ *使用节点数据,分支机构的数据,形成一个新的号码* / {
INT I,K,J,JD [N / * JD [N] [记录]节点* / struct jiedian的温度; / *中间临时党支部连接的节点数量* /
(I = 1; <= N + +)/ *分支的节点上连接数赋0 * /
{
JD [0] = 0; }
(我= 1 <=我+ +)/ *考虑每个节点* /
{
(J = 1,J <= M,J + +)/ *考虑每个分支* /
{
((植绿[J]。P1 = | |植绿[J]。P2 ==)&&(植绿[J]。!= 3))/ *如果这个分支的节点,不接地分支* /
JD [0] + +;
}
}
(I = 1
{
(J = i +1的J <= PQ研究+ +)/ *升序排序算法* /
{
(JD [I]> JD [J])
{
TEM = jiedian [I];
jiedian [I] = jiedian [J];
jiedian [J] = TEM
(K = 1; K <= M,K + +)/ *更新分支信息* /
{
(植绿[K]。P1 == J)
植绿[K]。 P1 = I 否则,如果(植绿[K]。P2 == J)
植绿[K]。 P2 = I;
其他(植绿[K]。P1 ==我)
植绿[K]。 P1 = J;
否则,如果(植绿[K]。P2 ==)
植绿[K]。 P2 = J;
}
}
}
}
就(i = PQ +1;
{
(J = i +1的; J <= PQ + PV; J + +)/ *小大排序算法* /
{
如果(JD [我]> JD [J])
{
温度= jiedian [我];
jiedian [I] = jiedian [J];
jiedian [J] = TEM
(K = 1; K <= M,K + +)/ *更新分支信息* /
> {
(植绿[K]。P1 == J)
植绿[K]。 P1 = I;
否则,如果(植绿[K]。P2 == J)
植绿[K]。 P2 = I;
其他(植绿[K]。P1 ==我)
植绿[K]。 P1 = J;
否则,如果(植绿[K]。P2 ==)
植绿[K]。 P2 = J;
}
}
}
}
fprintf(FP2,“\ N ****节点优化结果如下*********************************************** ********** \ n \ n已“);
(I = 1; <=我+ +)
{
(jiedian [I]。== 1)
fprintf(FP2,“%2D PQ节点,节点P [%d〕=%F Q [%] =%F \”,我,我,jiedian [I],P,I,jiedian [I]。Q);
如果(jiedian [I]。== 2)
fprintf(FP2,“节点%2D PV节点P [%d的=%F V [%d〕=%F \“,我,我,jiedian [I],P,我jiedian [I],V);
(jiedian [I]。= = 3)
fprintf(FP2,“%2D平衡节点的节点\ N”);
}
}
的无效form_y()/ *使用分支数据形成Y,要注意地面腿* /
{
I,J,K;
float类型的
(I = 1 <= N;我+ +)
(J = 1; <= N,J + +)
G [我] [J] = B [I] [J] = 0;
(1 <= M; + +)/ *节点导纳矩阵主对角线准入* /
(J = 1; <= N; J + +)
(植绿[I] P1 ==| |植绿[I]。P2 == J)
{
S =植绿[I]。 R *植绿[I]。 R +植绿[I]。 X *植绿[I]。 X;
(S == 0);
G [J] [J] + =植绿[I]。 R / S;
B [J] [J] + =植绿[我]。 X / S;
(植绿[I]。== 1)/ *如果是普通的分支* / B [J] [J] + =植绿[I]。 B / 2;
}
其他(植绿[I]。== 2)/ *如果是普通变压器支路* /
{
(植绿[ P1 == J)
{
G [J] [J] + =(植绿[I],R / S *(1-植绿[]克拉))/(植绿我克拉*植绿[I]克拉);
B [J] [J] + =(-植绿[I] X / S *(1-植绿[]。克拉))/(植绿[I] KT *植绿[I]克拉);
}
其他(植绿[I] P2 == j)条
{
[J] [J] + =(植绿[I],R / S(植绿[I]千吨-1))/植绿[I]。克拉;
B [J] [J] + =(-植绿[I],X / S *(植绿[I] KT-1))/植绿[I]。克拉;
}
}
其他(植绿[I]。== 3)/ *如果是在地面上分支* /
{
乙[J] [J] + =植绿[I]。 b;
}
}
(K = 1; K <= M,K + +)/ *节点导纳矩阵非准入的主对角线上* /
{
=植绿[K]。 P1;
=植绿[K]。 P2;
S =植绿[K]。 R *植绿[K]。 R +植绿[K]。 X *植绿[K]。 X;
(S == 0);
G [我] [J] + =植绿[K]。 R / S;
B [我] [J] + =植绿[K]。 X / S;
(植绿[K]。克拉= 1.0)
{
G [我] [J] / =植绿[K]。克拉;
B [我] [J] / =植绿[K]。克拉;
}
G [J] [I] = G [I] [J];
B [J] [] = B [I] [J];
>}
fprintf(FP2,“\ N \ N ******************************节点导纳矩阵********************************** \ N“);
(I = 1 <= N;我+ +)
{
fprintf(FP2,“\”);
(J = 1; <= N研究+) BR /> fprintf(FP2,“%+ J%8.5F 8.5F,G [I] [J],B [I] [J]);
}
}
BR />无效form_j,()/ *使用节点数据和Y形式的J * /
{
浮法EI,FI,A = 0,B = 0;
I1,J1,K1,I,J,K;
(I = 1; <= 2 *(PQ + PV)+1; + +)
(J = 1; J <= 2 *(PQ + PV)+1; J + +)
YKB [I] [J] = 0;
(I = 1; < = PQ + +)
(J = 1; J <; J + +)
{I1 =;
J1 = J;
EI = jiedian I]。 E;
Fi = jiedian的[I]。 F;
(i! = J)/ *找我! = j的H,N,J,L * /
{YKB *-1 [2] [2 * J-1] = G [期1] [J1] * EI + B [期1] [J1] * FI / * H * /
YKB [2 *的i-1] [2 * J] = B [I1] [J1] * EI + G [I1] [J1] * FI / * N * /
YKB [2] [2 * J-1] = B [I1]?[J1] * EI + G [I1] [J1] * FI / * J * / YKB [2] [2 * J] =-G [I1] [J1] * EI-B [I1] [J1] * FI / * L * /
}
BR /> / *其他寻求当我= J H,N,J,K * /
{A = 0,B = 0;
(K = 1; K <= N,K + +)
(k! = I)
{K1 = K;
= A + G [I1] [K1] * jiedian [K]。 EB [I1] [K1] * jiedian [K]。 F;
B = B + G [I1] [K1] * jiedian [K]。 F + B [期1] [K1] * jiedian [●]。 E;
}
YKB [2 *的i-1] [2 * J-1] = 2 * G [I1] [I1] * jiedian [I]。 E + A / * H * /
YKB [2] [2 * J] = -2 * B [I1] [I1] * jiedian [I]。 F +一个; / * L * /
YKB [2 *的i-1] [2 * j]的= 2 * G [期1] [1期1] * jiedian []。 F + B; / * N * /
YKB [2] [2 * J-1] = -2 * B [I1] [I1] * jiedian [I]。 EB / * J * /
} }
就(i = PQ +1; <= PQ + PV; + +)/ *子矩阵形成光伏节点* /
(十= 1; J <; J + +)
{I1 =;
J1 = J;
EI = jiedian [我]。 E;
Fi = jiedian的[I]。 F;
(i! = J)/ *找我! =当H,N * /
{
YKB [2 *的i-1] [2 * J-1] = G [期1] [J1] * EI + B [期1] [J1] * FI / * H * /
YKB [2 *的i-1] [2 * J] = B [I1] [J1] * EI + G [I1] [J1] * FI / * N * /
}
其他/ *求时,我= J H,N,R,S * /
{A = 0,B = 0;
(K = 1,K <= N,K +)
(k! = I)
{K1 = K;
+ = G [I1] [K1] * jiedian [K]。 EB [I1] [K1] * jiedian [K]。 F;
B + = G [I1] [K1] * jiedian [K]。 F + B [期1] [K1] * jiedian [●]。 E;
}
YKB [2 *的i-1] [2 * J-1] = 2 * G [I1] [I1] * jiedian [I]。 E + A / * H * /
YKB [2 *的i-1] [2] = 2 * G [I1] [I1] * jiedian [I]。 F + B; / * N * /
YKB [2] [2 * J-1] = 2 * EI / * R * /
YKB [2] [2 * J ] = 2 * FI / * S * /
}
}
fprintf(FP2,“\ N \ N \ N ********** *********************雅可比************** *********** \ N“);
(I = 1; <= 2 *(PQ + PV); + +) {
fprintf(FP2,“\”);
(J = 1; <= 2 *(PQ + PV); J + +)
fprintf(FP2,“%8.5 F“,YKB [I] [J]);
}
}
无效form_yz()/ *使用的J的外形表* / { BR /> INT I,J,K,
浮法A [2 * M] [2 * M],L [2 * M] [2 * M],R [2 * M] [2 * M]。
浮法X,Y,Z;
(I = 1; <= 2 *(PQ + PV); + +)
(J = 1;研究<= 2 *(PQ + PV); J + +)
{[I] [J] = 0,R [I] [J] = 0,L [I] [J] = 0 ;}
(I = 1; <= 2 *(PQ + PV); + +)
(J = 1; <= 2 *(PQ + PV); J + +) A [I] [J] = YKB [I] [J];
(I = 1; <= 2 *(PQ + PV)+ + )
{
(J = 1; <= 2 *(PQ + PV),J + +)
{
如果(> J)
{
R [我] [J] = 0;
X = 0;
(K = 1; K <= J-1,K +)
{ BR /> X = X + L [I] [K] * R [K] [J];
}
L [我] [J] = A [I] [J] X;
}
(I == J)
{
R [我] [J] = 1;
Y = 0;
(K = 1; K <= I-1,K +)
{
Y = Y + L [我] [K] * R [K] [I];
} L [I] [I] = [I] [J];
}
(I
{
L [我] [J ] = 0;
Z = 0;
(K = 1; K <= I-1,K +)
Z = Z + L [我] [K] * R [K] [J]; }
R [我] [J] =([I] [J] Z)/ L [] []; BR />}
}
}
(I = 1; <= 2 *(PQ + PV); + +)
{(J = 1; <= 2 *(PQ + PV); J + +)
{
(I
饮子[I] [J] = R [我] [J];
(I == J)
饮子[I] [J] = 1 / L [I] [J];
(> j的)
饮子[我] [J] = L [I] [J];
}
}
fprintf(FP2,“\ N \ N \ N ********************************因子表**************** ************************* \ N“);
(I = 1; <= 2 *( PQ + PV); + +){
fprintf(FP2,“\”);
(J = 1; <= 2 *(PQ + PV); + +)
fprintf(FP2,“%8.5F”,银子岩[I] [J]);
}
}