⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpp2.cpp

📁 电力系统分析的NR法潮流计算、暂态稳定计算VC++源码。
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
#include<stdlib.h>
#include "stdlib.h"
#include<iomanip.h>
#include<math.h>
#include<fstream.h>
#define pi 3.1415926
int i,j,k,p,q,y;
/*
	N :节点 L:支路数 
	data[100][6]:输入数据 
*/
int N,L,N0;
/*
 getSysData() 子函数功能:从输入文件得到系统接线图数据
*/
void getSysData(){


}

void main(){
		FILE *result;						//定义文件用于输出结果,此文件包含节点导纳矩阵
		result=fopen("result.txt","w");
											//以及每次迭代的节点电压修正值、PV节点的功率、迭代收敛后的最终潮流分布		
//**************从文本文件读取线路和节点数据 	
		ifstream fLine;
		fLine.open("Line.txt");		//Line.txt  放置线路间的信息,第一个数据是节点个数
		fLine>>N>>L;
		double LD[100][7];                      //从文件里读出的线路参数
		for(i=0;i<L;i++)      
		{
			for(j=0;j<7;j++)
			{
				fLine>>LD[i][j];
			}
		}
		cout<<"*****************************************"<<"\n";
		cout<<	N<<"\n";
		cout<<	L<<"\n";
		fLine.close();
		ifstream fNode;
		fNode.open("Node.txt");		//Node.txt  放置节点的参数信息
		double ND[100][9];                      //从文件里读出的节点参数
		for(i=0;i<N;i++)
		{
			for(j=0;j<9;j++)
			{
				fNode>>ND[i][j];
			}
		}
		      	
//************************************形成节点导纳矩阵YG(实部),YB(虚部)
	//double * * YG=new double * [node_num+1];			//节点导纳矩阵的实部
	//double * * YG=new double * [N+1];                      //定义节点导纳矩阵的实部矩阵
	//double * * YB=new double * [N+1];                      //定义节点导纳矩阵的虚部矩阵
	double YG[100][10];
	double YB[100][10];
	for(i=0;i<N;i++){                                    //初始化纳矩阵的实部矩阵和虚部矩阵
		for(j=0;j<N;j++){
			YG[i][j]=YB[i][j]=0;
		}	
	}
	int p,q; //临时变量,保存节点
	for(i=0;i<L;i++)       
	{
		if(LD[i][6]==0)   //线路无变压器或者标准变比类型 
		{
			p=LD[i][0]-1;
			q=LD[i][1]-1;
		}
		else				//非标准变压器类型
		{
			q=LD[i][0]-1;
			p=LD[i][1]-1;
		}
		YG[p][q]=YG[p][q]-LD[i][2]/(LD[i][5]*(pow(LD[i][2],2)+pow(LD[i][3],2)));
		YG[q][p]=YG[p][q];
		YG[q][q]=YG[q][q]+LD[i][2]/(pow(LD[i][5],2)*(pow(LD[i][2],2)+pow(LD[i][3],2)));
		YG[p][p]=YG[p][p]+LD[i][2]/(pow(LD[i][2],2)+pow(LD[i][3],2));
        YB[p][q]=YB[p][q]+LD[i][3]/(LD[i][5]*(pow(LD[i][2],2)+pow(LD[i][3],2)));
		YB[q][p]=YB[p][q];
		YB[q][q]=YB[q][q]-LD[i][3]/(pow(LD[i][5],2)*(pow(LD[i][2],2)+pow(LD[i][3],2)))+LD[i][4]/2;
		YB[p][p]=YB[p][p]-LD[i][3]/(pow(LD[i][2],2)+pow(LD[i][3],2))+LD[i][4]/2;
	}
//****************输出节点导纳矩阵到文本文件
fprintf(result,"***************节点导纳矩阵******************: \n");
		for(i=0;i<N;i++)
		{
			for(j=0;j<N;j++)
			{
				fprintf(result,"%9.6f",YG[i][j]);
				fprintf(result,"+j");
				fprintf(result,"%9.6f",YB[i][j]);
				fprintf(result,"    ");
			}
			fprintf(result,"\n");
		}
	fprintf(result,"\n");
	fprintf(result,"*********************************: \n");

//********节点初始参数
	double *E=new double[N];								 //电压实部
	double *F=new double[N];								 //电压虚部
	double *V=new double[N];								 //
	double *P=new double[N];								 //有功
	double *Q=new double[N];								 //无功
//	double *B=new double[N];	
  for (i=0;i<N;i++)
	{
		E[i]=ND[i][4];
		F[i]=ND[i][5];
		P[i]=ND[i][0]-ND[i][2];
		Q[i]=ND[i][1]-ND[i][3];
		V[i]=ND[i][6];
        YB[i][i]=YB[i][i]+ND[i][7];	
	}
//********节雅可比矩阵***************************************
N0=2*N;
	int BalancePoint=1,a=0,m,ICT1=0,IT2=1,ICT2[40];
	float pr =0.00001;
	double C[20],D[20],P1,Q1,DP,DV,DQ,V2,J[30][21],O[20];
	double SP[30][30],SQ[30][30],SP1[30][30],SQ1[30][30],e1,f1,e2,f2,R,X,K,c,A1,A2,A3,A4,A5,A6,DET;
	while(IT2!=0)
	{
		IT2=0;
		for(i=0;i<N;i++)
		{
			if(i!=(BalancePoint-1))
			{
				C[i]=0;D[i]=0;
				for(j=0;j<N;j++)
				{
					C[i]+=YG[i][j]*E[j]-YB[i][j]*F[j];
					D[i]+=YG[i][j]*F[j]+YB[i][j]*E[j];
				}
				P1=C[i]*E[i]+F[i]*D[i];
				Q1=F[i]*C[i]-D[i]*E[i];
				//求P、Q
                V2=E[i]*E[i]+F[i]*F[i];
				if(ND[i][8]!=3)
				{
					DP=P[i]-P1;
					DQ=Q[i]-Q1;
					for(j=0;j<N;j++)
					{
						if(j!=(BalancePoint-1)&&j!=i)
						{
							A1=-YG[i][j]*E[i]-YB[i][j]*F[i];
							A2=YB[i][j]*E[i]-YG[i][j]*F[i];
							A3=A2;
							A4=-A1;
							p=2*i+1,q=2*j+1,J[p-1][q-1]=A3;J[p-1][N0]=DQ;m=p+1;
							J[m-1][q-1]=A1;J[m-1][N0]=DP;q=q+1;J[p-1][q-1]=A4;J[m-1][q-1]=A2;
						}
						else if(j==i&&j!=(BalancePoint-1))
						{
							A1=-C[i]-YG[i][i]*E[i]-YB[i][i]*F[i];
							A2=-D[i]+YB[i][i]*E[i]-YG[i][i]*F[i];
                            A3=D[i]+YB[i][i]*E[i]-YG[i][i]*F[i];
							A4=-C[i]+YG[i][i]*E[i]+YB[i][i]*F[i];
							p=2*i+1;q=2*j+1;J[p-1][q-1]=A3;J[p-1][N0]=DQ;m=p+1;
							J[m-1][q-1]=A1;J[m-1][N0]=DP;q=q+1;J[p-1][q-1]=A4;J[m-1][q-1]=A2;
						}
					}
				}
				else
				{
					DP=P[i]-P1;
					DV=V[i]*V[i]-V2;
					for(j=0;j<N;j++)
					{
						if(j!=(BalancePoint-1)&&j!=i)
						{
							A1=-YG[i][j]*E[i]-YB[i][j]*F[i];
							A2=YB[i][j]*E[i]-YG[i][j]*F[i];
							A5=0;
							A6=0;
							p=2*i+1,q=2*j+1;J[p-1][q-1]=A5;J[p-1][N0]=DV;
							m=p+1;J[m-1][q-1]=A1;J[m-1][N0]=DP;q=q+1;J[p-1][q-1]=A6;J[m-1][q-1]=A2;
						}
						else if(j==i&&j!=(BalancePoint-1))
						{
							A1=-C[i]-YG[i][i]*E[i]-YB[i][i]*F[i];
							A2=-D[i]+YB[i][i]*E[i]-YG[i][i]*F[i];
							A5=-2*E[i];
							A6=-2*F[i];
							p=2*i+1;q=2*j+1;J[p-1][q-1]=A5;J[p-1][N0]=DV;m=p+1;
							J[m-1][q-1]=A1;J[m-1][N0]=DP;q=q+1;J[p-1][q-1]=A6;J[m-1][q-1]=A2;
						}
					}
				}
			}
		}
		//雅可比矩阵
			for(i=2;i<N0;i++)
		{
			for(j=i+1;j<=N0;j++)
				J[i][j]=J[i][j]*1.0/J[i][i];
			
			for(j=i+1;j<N0;j++)
			{
				for(k=i+1;k<N0+1;k++)
					J[j][k]-=J[j][i]*J[i][k];
			}		
		}	
    	for(i=N0-2;i>1;i--)
		{
			for(j=i+1;j<N0;j++)
				J[i][N0]-=J[i][j]*J[j][N0];
		}
		for(i=2;i<N0-1;)
		{
            L=1.0*i/2;
			E[L]-=J[i][N0];
			
			F[L]-=J[i+1][N0];
			i=i+2;
		}
   for(i=2;i<N0;i++)
		{
			DET=J[i][N0];
			if(J[i][N0]<0)
				DET=-J[i][N0];
			if(DET>=pr)
				IT2=IT2+1;
		}
		ICT2[a]=IT2;
		a=a+1;
		ICT1=ICT1+1;
	}
	//迭代结束
	cout<<"迭代次数:"<<ICT1<<endl;
	cout<<"没有达到精度要求的个数:"<<endl;
	for(i=0;i<a;i++)
	{
		cout<<ICT2[i]<<"\t";
	}
	cout<<"\n";
	//*************************************************test
	for(i=0;i<N;i++)
	{
		V[i]=hypot(E[i],F[i]);
		O[i]=atan(F[i]/E[i])*180.0/pi;
	}
	cout<<"各节点的实际电压标么值为(节点号从小到大):"<<endl;
	for(i=0;i<N;i++)
	{
		if(E[i]==0)
			{
				if(F[i]==0)
					cout<<"0"<<"     ";
				else
					cout<<F[i]<<"j"<<"      ";
			}
		else
			{
				if(F[i]>0)
					cout<<E[i]<<"+"<<F[i]<<"j"<<"      ";
				else if(F[i]<0)
					cout<<E[i]<<F[i]<<"j"<<"      ";
				else
					cout<<E[i]<<"      ";
			}
	}
	cout<<"\n\n";
	cout<<"各节点的电压大小为:"<<endl;
	for(i=0;i<N;i++)
	{
		cout<<V[i]<<"      ";
	}
	cout<<"\n\n";
	cout<<"各节点的电压相角为:"<<endl;
	for(i=0;i<N;i++)
	{
		cout<<O[i]<<"      ";
	}
	cout<<"\n\n";
	cout<<"各节点的功率为:"<<endl;
	for(i=0;i<N;i++)
	{
		C[i]=0,D[i]=0;
		for(j=0;j<N;j++)
		{
			C[i]+=YG[i][j]*E[j]-YB[i][j]*F[j];
			D[i]+=YG[i][j]*F[j]+YB[i][j]*E[j];
		}
		P1=C[i]*E[i]+F[i]*D[i];
		Q1=F[i]*C[i]-D[i]*E[i];
		if(P1==0)
			{
				if(Q1==0)
					cout<<"0"<<"    ";
				else
					cout<<Q1<<"j"<<"     ";
			}
		else
			{
				if(Q1>0)
					cout<<P1<<"+"<<Q1<<"j"<<"     ";
				else if(Q1<0)
					cout<<P1<<Q1<<"j"<<"     ";
				else
					cout<<P1<<"     ";
			}
	}
	cout<<"\n\n";
	cout<<"各支路的首端功率为:"<<endl;
	for(i=0;i<L;i++)
	{
		if(LD[i][6]==0)
		{
			p=LD[i][0]-1;
			q=LD[i][1]-1;
		}
		else 
		{
			q=LD[i][0]-1;
			p=LD[i][1]-1;
		}
		e1=E[p],f1=F[p],c=LD[i][4],R=LD[1][2],X=LD[i][3],e2=E[q],f2=F[q],K=LD[i][5];
		SP[p][q]=(e1*e1*K*R-e1*e2*R-e1*f2*X+K*f1*f1*R-f1*f2*R+e2*f1*X)/((R*R+X*X)*K);
		SQ[p][q]=(-e1*e1*c-f1*f1*c)/2+(e1*f2*R+K*X*e1*e1-e1*e2*X-e2*f1*R+K*f1*f1*X-f1*f2*X)/((R*R+X*X)*K);
		if(SP[p][q]==0)
			{
				if(SQ[p][q]==0)
					cout<<"0"<<"    ";
				else
					cout<<SQ[p][q]<<"j"<<"    ";
			}
		else
			{
				if(SQ[p][q]>0)
					cout<<SP[p][q]<<"+"<<SQ[p][q]<<"j"<<"    ";
				else if(SQ[p][q]<0)
					cout<<SP[p][q]<<SQ[p][q]<<"j"<<"    ";
				else
					cout<<SP[p][q]<<"    ";
			}
	}
	cout<<"\n\n";
	cout<<"各支路的末端功率为:"<<endl;
	for(i=0;i<L;i++)
	{
		if(LD[i][6]==0)
		{p=LD[i][0]-1,q=LD[i][1]-1;}
		else {q=LD[i][0]-1,p=LD[i][1]-1;}
		e1=E[q],f1=F[q],c=LD[i][4],R=LD[1][2],X=LD[i][3],e2=E[p],f2=F[p],K=LD[i][5];
		SP1[q][p]=(e1*e1*K*R-e1*e2*R-e1*f2*X+K*f1*f1*R-f1*f2*R+e2*f1*X)/((R*R+X*X)*K);
		SQ1[q][p]=(-e1*e1*c-f1*f1*c)/2+(e1*f2*R+K*X*e1*e1-e1*e2*X-e2*f1*R+K*f1*f1*X-f1*f2*X)/((R*R+X*X)*K);
		if(SP1[q][p]==0)
			{
				if(SQ1[q][p]==0)
					cout<<"0"<<"    ";
				else
					cout<<SQ1[q][p]<<"j"<<"    ";
			}
		else
			{
				if(SQ1[q][p]>0)
					cout<<SP1[q][p]<<"+"<<SQ1[q][p]<<"j"<<"    ";
				else if(SQ1[q][p]<0)
					cout<<SP1[q][p]<<SQ1[q][p]<<"j"<<"    ";
				else
					cout<<SP1[q][p]<<"    ";
			}
	}
	cout<<"\n\n";
	cout<<"各支路的功率损耗为:"<<endl;
	for(i=0;i<L;i++)
	{
		if(LD[i][6]==0)
		{	p=LD[i][0]-1,q=LD[i][1]-1;}
		else {q=LD[i][0]-1,p=LD[i][1]-1;}
		DP=SP[p][q]+SP1[q][p];
		DQ=SQ[p][q]+SQ1[q][p];
		if(DP==0)
			{
				if(DQ==0)
					cout<<"0"<<"    ";
				else
					cout<<DQ<<"j"<<"     ";
			}
		else
			{
				if(DQ>0)
					cout<<DP<<"+"<<DQ<<"j"<<"     ";
				else if(DQ<0)
					cout<<DP<<DQ<<"j"<<"     ";
				else
					cout<<DP<<"     ";
			}



	}
		

//*}*************结束************************************************
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -