!!!!!!!!!!!!
########################
牛顿—拉夫逊法潮流计算程序By Yuluo
%牛顿--拉夫逊法进行潮流计算
n=input('请输入节点数:n=');
n1=input('请输入支路数:n1=');
isb=input('请输入平衡母线节点号:isb=');
pr=input('请输入误差精度:pr=');
B1=input('请输入由支路参数形成的矩阵:B1=');
B2=input('请输入各节点参数形成的矩阵:B2=');
X=input('请输入由节点参数形成的矩阵:X=');
Y=zeros(n);e=zeros(1,n);f=zeros(1,n);V=seros(1,n);O=zeros(1,n);S1=zeros(n1);
for i=1:n
if X(i,2)~=0;
p=X(i,1);
Y(p,p)=1./X(i,2);
end
end
for i=1:n1
if B1(i,6)==0
p=B1(i,1);q=B1(i,2);
else p=B1(i,2);q=B1(i,1);
end
Y(p,q)=Y(p,q)-1./(B1(i,3)*B1(i,5);
Y(p,q)=Y(p,q);
Y(p,q)=Y(q,q)+1./(B1(i,3)*B1(i,5)^2)+B1(i,4)./2;
Y(p,p)=Y(p,p)+1./B1(i,3)+B1(i,4)./2;
end %求导纳矩阵
G=real(Y);B=imag(Y);
for i=1:n
e(i)=real(B2(i,3));
f(i)=imag(B2(i,3));
V(i)=B2(i,4);
end
for i=1:n
S(i)=B2(i,1)-B2(i,2);
B(i,i)=B(i,i)+B2(i,5);
end
P=rea(S);Q=imag(S);
ICT1=0;IT2=1;NO=2*n;N=NO+1;a=0;
while IT2~=0
IT2=0;a=a+1;
for i=1:n;
if i~=isb
C(i)=0;
D(i)=0;
for j1=1:n
C(i)=C(i)+G(i,j1)*e(j1)-B(i,j1)*f(j1);
D(i)=D(i)+G(i,j1)*f(j1)+B(i,j1)*e(j1);
end
P1=C(i)*e(i)+f(i)*D(i);
Q1=f(i)*C(i)-D(i)*e(i); %求'P,Q'
V2=e(i)^2+f(i)^2;
if B2(i,6)~=3
DP=P(i)-P1;
DQ=Q(i)-Q1;
for j1=1:n
if j1~=isb&j1~=i
X1=-G(i,j1)*e(i)-B(i,j1)*f(i);
X2=B(i,j1)*e(i)-G(i,j1)*f(i);
X3=X2;
X4=-X1;
p=2*i-1;q=2*j1-1;J(p,q)=X3;J(p,N)=DQ;m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X4;J(m,q)=X2;
end
end
else
DP=P(i)-P1;
DV=V(i)~2-V2;
for j1=1:n
if j1~=isb&j1~=i
X1=-G(i,j1)*e(i)-B(i,j1)*f(i);
X2=B(i,j1)*e(i)-G(i,j1)*f(i);
X5=0;
X6=0;
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;
J(m,q)=X1;J(m,N)=DP;q=q+1;J(p,q)=X6;J(m,q)=X2;
elseif j1==i&j1~=isb
X1=-C(i)-G(i,i)*e(i)-B(i,i)*f(i);
X2=-D(i)+B(i,i)*e(i)-G(i,i)*f(i);
X5=-2*e(i);
X6=-2*f(i);
p=2*i-1;q=2*j1-1;J(p,q)=X5;J(p,N)=DV;m=p+1;
J(m,q)=X1;J(m,N)=D