.. .
{
//**** 本函数获得yds[]、ydz[]、列足码iy[] ****//
int i, j, l, ll;
for (i = 1; i <= n; i ++)
yds[i]=0; // yds[]存放各行非零非对角元素的个数。
ll = 1;
for (l = 1; l <= zls; l ++)
{
i = iabs(izl[l]); j = iabs(jzl[l]); if (i == j)
continue;
iy[ll] = j;
if((i != iabs(izl[l + 1])) || (j != iabs(jzl[l + 1]))) { }
ll ++;
//ll统计总支路数(双回线算一条支路) yds[i] ++;
}
z
.. .
nzls = ll - 1; //总支路数(双回线算一条支路) ydz[1] = 1;
for (i = 1; i <= n - 1; i ++)
ydz[i + 1] = yds[i] + ydz[i]; //由yds[]得ydz[]。
// ydz[i]是第 i 行第一个非零非对角元素的首地址, // 即在所有非零非对角元素中的顺序号。 }
void printi(int* aa, int n) {
//**** 本函数输出aa[1]-aa[n]的值 ****//
int i;
for(i = 1; i <= n; i ++)
fprintf(fp2, \ printi(ydz, n);
fprintf(fp2, \printi(yds, n); fprintf(fp2, \
{
z
if(i % 10 == 1)
fprintf(fp2, \
.. .
fprintf(fp2, \
} }
void y2()
{
//**** 本函数形成节点导纳阵,一次形成,不分B'和B'' int j1;
double r, x, yk, zf, gij, bij; int i, j, i1, l, ll; for (i = 1; i <= n ; i ++) { gii[i] = 0.0;
bii[i] = 0.0;
}// 导纳阵对角元(与节点一一对应)先清零。 for (i = 1; i <= mdk; i ++) { j = idk[i];
bii[j] = -1.0 / dkk[i];
}//计算接地支路导纳,只影响导纳阵对角元(自导纳)。
for (i = 1; i <= zls; i ++)
z
****//
.. .
z
{
yg[i] = 0.0; yb[i] = 0.0;
} //导纳阵非零非对角元(与支路一一对应)先清零。 ll = 1;
for (l = 1; l <= zls; l ++) {
i1 = izl[l]; j1 = jzl[l];
// 支路左节点号。 // 支路右节点号。
// 变压器支路有一节点号为负值。
i = iabs(i1); j = iabs(j1); if (i == j)
continue; // 排除左、右节点号相等的情况。
r = zr[l]; x = zx[l];
yk = zyk[l]; // zr[],zx[],zyk[]:支路三参数。 zf = r * r + x * x; gij = r / zf; bij = -x / zf;
if ((i1 > 0) && (j1 > 0))// {
yg[ll] = yg[ll] - gij;
不是变压器支路。是一般支路。
.. .
z
}
yb[ll] = yb[ll] - bij; gii[i] = gii[i] + gij; bii[i] = bii[i] + bij + yk; gii[j] = gii[j] + gij; bii[j] = bii[j] + bij + yk;
else {
// 变压器支路。
if(j1 < 0) { }
// 若非标准变比在右(j)侧,则左、右互换,保证非标准变比在左侧。 gii[j] = gii[j] + gij;
bii[j] = bii[j] + bij; // 标准变比侧。 gii[i] = gii[i] + gij / yk / yk;
// yk=zyk[],对变压器支路指非标准变比(设在节点号为负的一侧)。 bii[i] = bii[i] + bij / yk / yk; // 非标准变比侧阻抗计算。 yg[ll] = yg[ll] - gij / yk; yb[ll] = yb[ll] - bij / yk;
i=iabs(j1); j=iabs(i1);