《牛顿 拉夫逊迭代法极坐标潮流计算C语言程序》由会员分享,可在线阅读,更多相关《牛顿 拉夫逊迭代法极坐标潮流计算C语言程序(31页珍藏版)》请在人人文库网上搜索。
1、*利用牛顿-拉夫逊迭代法(极坐标形式),计算复杂电力系统潮流,具有收敛性好,收敛速度快等优点。所有参数应归算至标幺值下。 */ PQ,PV,平衡节点/*可计算最大节点数为100,可计算*/ 可计算非标准变比和平行支路/*#include #include #include 最大矩阵阶数*/ #define M 100 /*迭代次数*/ #define Nl 100 /* 循环控制变量int i,j,k,a,b,c; /*/ int t,l; 中间变量*/ double P,Q,H,J; /*节点数int n, /*/ 支路数 m, /*/ 节点数*/ pq, /*PQ节点数 pv; /*PV*。
2、/ 迭代精度double eps; /*/ 中间变量double aaM,bbM,ccM,ddM,max, rr,tt; /*/ 复数运算函数的返回值double mo,c1,d1,c2,d2; /*/ 节点导纳矩阵中的实部、GMM,BMM,YMM; /*double 虚部*/ 及其模方值雅克比矩阵、ykbMM,DM,dM,dUM; /*double 不平衡量矩阵*/ 节点结构体*/ struct jd /*为节点号,ty为节点类 int num,ty; /* num*/ 型节点有功、无功功率,功率模 double p,q,S,U,zkj,dp,dq,du,dj; /* 阻抗角,值,电压模值牛。
3、顿 - 拉夫逊中功率不平*/ 衡量、电压修正量 jdM; 支路结构体*/ struct zl /*为支路号*/ int numb; /*numb支路的两个节点 int p1,p2; /*/ 非标准变比 */ double kx; /*支路的电阻与电抗 */ double r,x; /* zlM; FILE *fp1,*fp2; */ void data() /* 读取数据 int h,number; fp1=fopen(input.txt,); fscanf(fp1,%d,%d,%d,%d,%lfn,&n,&m,&pq,&pv,&eps); /*输入节点数,支路数,PQ节点数,PV节点数和迭代。
4、精度*/ for(i=1;i=0) fprintf(fp2,+j); fprintf(fp2,%f ,Bik); else Bik=-Bik; fprintf(fp2,-j); fprintf(fp2,%f ,Bik); Bik=-Bik; fprintf(fp2,-n); /*-牛顿拉夫逊-*/ void Calculate_Unbalanced_Para() for(i=1;ipq时的H、J */ ykb2*i-1pq+j=Ui*Uj*(Gi1j1*sin(zi-zj)-Bi1j1*cos(zi-zj); /* H */ ykb2*ipq+j=-Ui*Uj*(Gi1j1*cos(zi-zj。
5、)+Bi1j1*sin(zi-zj); /* J */ for(i=pq+1;ipq时的H*/ if(i!=j) /*求i!=j时的H*/ ykbpq+ipq+j=Ui*Uj*(Gi1j1*sin(zi-zj)-Bi1j1*cos(zi-zj); /* H */ else /*求i=j时的H*/ aai=0; for(k=1;k=0;i-) for(j=n-1,sum=0;ji;j-) sum+=xj*uij; xi=(float)(yi-sum)/uii); for(i=1; imax) max=fabs(di); void Niudun_Lafuxun() int z=1; fprintf。
6、(fp2,-极坐标形式的牛顿-拉夫逊迭代法结果:-n); do max=1; if(z=eps) fprintf(fp2,迭代次数: %dn,z); /*开始迭代计算*/ Calculate_Unbalanced_Para(); Form_Jacobi_Matric(); Solve_Equations(); for(i=1;i=eps); /*判断是否达到精度要求*/ void Powerflow_Result() int n1=jdn.num; fprintf(fp2,n =nn); fprintf(fp2, *潮流计算结果*); fprintf(fp2,n =nn); fprintf(f。
7、p2,各节点电压值: ); /*输出各节点的电压值*/ for(c=1;c=0) fprintf(fp2,+j%fn,jdi.q); else fprintf(fp2,-j%fn,-jdi.q); for(i=pq+1;i=0) fprintf(fp2,+j%fn,jdi.q); else fprintf(fp2,-j%fn,-jdi.q); fprintf(fp2, 平衡节点: 节点%d,jdn.num,jdn.num); /*平衡节点注入功率*/ fprintf(fp2, S%d=%f,n1,c1); if(d1=0) fprintf(fp2,+j%f,d1); else fprintf(。
8、fp2,-j%f,-d1); :n); 线路功率fprintf(fp2,n rr=tt=0; for(i=1;i=0) fprintf(fp2,+j%fn,d1); else fprintf(fp2,-j%fn,-d1); aai+=c1; bbi+=d1; P=Q=0; ji(jdb.U,-jdb.zkj,c2,-d2); /*考虑非标准变比*/ P+=c1;Q+=d1; ji(jda.U/zli.kx,-jda.zkj,c2,-d2); P-=c1;Q-=d1; ji(jdb.U,jdb.zkj,P,Q); fprintf(fp2, 线路%d: %d-%d 的功率为: %f,i,j1,i1。
9、,c1); if(d1=0) fprintf(fp2,+j%fn,d1); else fprintf(fp2,-j%fn,-d1); aai+=c1; bbi+=d1; rr+=aai; tt+=bbi; fprintf(fp2,n 线路损耗功率:n); /*计算线路功率损耗*/ for(i=1;i=0) fprintf(fp2,+j%fn,bbi); else fprintf(fp2,-j%fn,-bbi); fprintf(fp2,n 网络总损耗功率为: %f,rr); /*计算网络总损耗*/ if(tt=0) fprintf(fp2,+j%fn,tt); else fprintf(fp2,-j%fn,-tt); fprintf(fp2,=n); fprintf(fp2,n * 潮流计算结束 *); void main() 瀠楲瑮?请仔细阅读附录里的输入文件使用说明以便于你正确输入!n); data(); /*读取数据*/ Form_Y(); /*形成节点导纳矩阵*/ for(i=1;i=pq;i+) /* U、zkj附初值*/ jdi.U=1; jdi.zkj=0; for(i=pq+1;in;i+) jdi.U=jdi.U; jdi.zkj=0; Niudun_Lafux。