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

📄 pq潮流程序.cpp

📁 使用C语言
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	for(i=1;i<=nod_num;i++)
	{
		for(j=1;j<=youhua[i].nn1;j++)
		{k++;
		youhua[i].w[j]=k;//记录下新的支路号
		
		}
		
	}
	cout<<"优化后的度表"<<endl;
	
	/*for(i=1;i<=nod_num;i++)//输出调试
	{
	cout<<i<<" ";
	for(j=1;j<=youhua[i].nn1;j++)
	cout<<youhua[i].jd[j]<<"支路数为"<<youhua[i].w[j]<<" ";
	cout<<"**"<<youhua[i].nn1<<endl;
	
	  }
	  
		for(i=1;i<=line_num;i++)//输出调试
		{cout<<line[i].i<<" "<<line[i].j<<" "<<line[i].r<<" "<<line[i].x<<" "<<line[i].b<<"非接地支路"<<endl;
		}
		for(i=1;i<=grand_num;i++)//输出调试
		{cout<<grand[i].i<<" "<<grand[i].r<<" "<<grand[i].b<<"接地支路"<<endl;
		}
		for(i=1;i<=generator_num;i++)//输出调试
		{cout<<generator[i].i<<" "<<generator[i].P<<" "<<generator[i].Q<<" "<<generator[i].V<<"发电机支路"<<endl;
		}
		for(i=1;i<=load_num;i++)//输出调试
		{cout<<load[i].i<<" "<<load[i].P<<" "<<load[i].Q<<" "<<load[i].V<<"负荷支路"<<endl;
		}
	cout<<"*******"<<endl;*/
	jj=0;
/*	ofstream outfile("f1.txt");
	if(!outfile)
		cout<<"error";*/
	bb=0;
	min=1000;
	for(j=1;j<=nod_num;j++)
	{	
		kk=1;
		for(i=1;i<=line_num;i++)
		{if(abs(line[i].i)==j&&abs(line[i].j)==youhua[j].jd[kk])
		{ 
			
			
			jj=youhua[j].w[kk];//支路号交换
			// cout<<"j="<<j<<"jj="<<jj<<endl;
			line[line_num+1]=line[i];  
			line[i]=line[jj];
			line[jj]=line[line_num+1];
			kk++;	
			i=jj;
			
		}		
		
		
		
		}
		/*for(i=1;i<=line_num;i++)
			outfile<<line[i].i<<" "<<line[i].j<<" "<<line[i].r<<" "<<line[i].x<<" "<<line[i].b<<"非接地支路"<<j<<endl;*/
		
	}
/*	outfile<<"zuizhong"<<endl;
	for(i=1;i<=line_num;i++)//输出调试
	{outfile<<line[i].i<<" "<<line[i].j<<" "<<line[i].r<<" "<<line[i].x<<" "<<line[i].b<<"非接地支路"<<line[i].hh<<endl;
	}
	*/
}




//--------------求导纳矩阵函数块---------------------//
void daona()
{
	int i,j,n,i1,j1,a;
	double r,x,yk,z,g,b,b1;
	
	//---------形成不接地支路的导纳矩阵----------//
	
	sum=new int [nod_num+1];
	seq=new int [nod_num+1];
	yii=new struct Yii[nod_num+1];
	yij=new struct Yij[line_num+1];
	yii1=new struct Yii1[nod_num+1];
	yij1=new struct Yij1[line_num+1];
	
	for(i=1;i<=nod_num;i++)
	{yii[i].g=0.0;
	yii[i].b=0.0;
	yii1[i].g=0.0;
	yii1[i].b=0.0;
	sum[i]=0;
	}
	int mm=1;
	for(n=1;n<=line_num;n++)
	{
		i=abs(line[n].i);
		i1=line[n].i;
		j=abs(line[n].j);
		j1=line[n].j;
		
		r=line[n].r;
		x=line[n].x;
		yk=line[n].b; 
		z=r*r+x*x;
		g=r/z;
		b=-x/z;
		b1=-1.0/x;
		if(line[n].i==line[n-1].i&&line[n].j==line[n-1].j)//处理并联支路
		{
			if(i1<0||j1<0)
			{
				yij[mm-1].g=yij[mm-1].g-g/yk;
				yij[mm-1].b=yij[mm-1].b-b/yk;
				yij1[mm-1].b=yij1[mm-1].b-b1/yk;
				mm--;
			}
			else
			{yij[mm-1].g=yij[mm-1].g-g;
			yij[mm-1].b=yij[mm-1].b-b;
			yij1[mm-1].b=yij1[mm-1].b-b1;
			mm--;
			}
		}
	else
	{
		if(i1<0||j1<0)//形成互导纳
		{
			yij[mm].g=-g/yk;
			yij[mm].b=-b/yk;
			yij1[mm].g=0.0;
			yij1[mm].b=-b1/yk; 
		}
		else
		{
			yij[mm].g=-g;
			yij[mm].b=-b;
			yij1[mm].g=0.0;
			yij1[mm].b=-b1; 
		}
	}
	
	yij[mm].j=j;
	yij1[mm].j=j;
	mm++;
	if(i1<0||j1<0)//形成自导纳
	{
		yii[i].g=yii[i].g+g/yk;
		yii[i].b=yii[i].b+b/yk;
		yii[j].g=yii[j].g+g/yk;
		yii[j].b=yii[j].b+b/yk;
		yii1[i].b=yii1[i].b+b1/yk;
		yii1[j].b=yii1[j].b+b1/yk;
	}
	else
	{
		yii[i].g=yii[i].g+g;
		yii[i].b=yii[i].b+b;
		yii[j].g=yii[j].g+g;
		yii[j].b=yii[j].b+b;
		yii1[i].b=yii1[i].b+b1;
		yii1[j].b=yii1[j].b+b1; 
	}
	if(line[n].i==line[n-1].i&&line[n].j==line[n-1].j)
		a=0;
	else sum[i]=sum[i]+1;
	
  	 }
	
	seq[1]=1;
	for(i=1;i<=nod_num-1;i++)
	{
		seq[i+1]=seq[i]+sum[i];
	}
	void formb(int flag);
	void formbb(int flag);
	
	formb(1);//形成因子表1
	
	//---------形成追加接地支路的导纳矩阵----------//
	
	for(n=1;n<=line_num;n++)
	{
		i=line[n].i;
		
		j=line[n].j;
		r=line[n].r;
		x=line[n].x;
		yk=line[n].b; 
		z=r*r+x*x;
		g=r/z;
		b=-x/z;
		b1=-1.0/x;
		if(i<0||j<0)
		{ 
			if(i<0)
			{
				
				
				g=-g/yk;
				b=-b/yk;
				b1=-b1/yk;
				
				yii[abs(i)].g=yii[abs(i)].g+(1.0-1.0/yk)*g;
				yii[abs(i)].b=yii[abs(i)].b+(1.0-1.0/yk)*b;
				yii1[abs(i)].b=yii1[abs(i)].b+(1.0-1.0/yk)*b1;
				
				yii[j].g=yii[j].g+(1.0-yk)*g;
				yii[j].b=yii[j].b+(1.0-yk)*b;
				yii1[j].b=yii1[j].b+(1.0-yk)*b1;
				
				
			}
			else
			{
			
				
				g=-g/yk;;
				b=-b/yk;
				b1=-b1/yk;
				
				yii[abs(j)].g=yii[abs(j)].g+(1.0-1.0/yk)*g;
				yii[abs(j)].b=yii[abs(j)].b+(1.0-1.0/yk)*b;
				yii1[abs(j)].b=yii1[abs(j)].b+(1.0-1.0/yk)*b1;
				
				yii[i].g=yii[i].g+(1.0-yk)*g;
				yii[i].b=yii[i].b+(1.0-yk)*b;
				yii1[i].b=yii1[i].b+(1.0-yk)*b1;
			}
		}
		else
		{
			b=yk;
			b1=yk;
			yii[i].b=yii[i].b+b;
			yii[j].b=yii[j].b+b;
			yii1[i].b=yii1[i].b+b1;
			yii1[j].b=yii1[j].b+b1;
		}
		
	}
	
	for(n=1;n<=grand_num;n++)
	{
	
		
		b=grand[n].b;
		b1=grand[n].b;
		yii[grand[n].i].b=yii[grand[n].i].b+b;
		yii1[grand[n].i].b=yii1[grand[n].i].b+b; 
		
		
	}
	formbb(2);//形成因子表2
	
			  /*cout<<"列号"<<endl;
			  for(n=1;n<=line_num;n++)
			  {cout<<yij[n].j<<" "<<endl;
			  }
			  cout<<"seq******"<<endl;
			  for(n=1;n<=nod_num;n++)
			  {cout<<seq[n]<<" "<<endl;
}*/
	ofstream outfile1("导纳矩阵.txt");
	n=1;
	for(i=1;i<=nod_num-1;i++)
	{  outfile1<<"第"<<i<<"行"<<" "<<"第"<<i<<"列的自导纳元素为"<<" "<<yii[i].g<<"+j"<<yii[i].b<<endl;
    j=seq[i+1]-seq[i];	
	for(;j>0;j--)
	{outfile1<<"第"<<i<<"行";
	outfile1<<"第"<<yij[n].j<<"列的互导纳元素为"<<" "<<yij[n].g<<"+j"<<yij[n].b<<endl;
	n++;
	}  
	}
	outfile1<<"第"<<i<<"行"<<" "<<"第"<<i<<"列的自导纳元素为"<<" "<<yii[i].g<<"+j"<<yii[i].b<<endl;

/*ofstream outfile2("导纳矩阵2.txt");
n=1;
for(i=1;i<=nod_num-1;i++)
	{  outfile2<<"第"<<i<<"行"<<" "<<"第"<<i<<"列的自导纳元素为"<<" "<<yii1[i].g<<"+j"<<yii1[i].b<<endl;
    j=seq[i+1]-seq[i];	
	for(;j>0;j--)
	{outfile2<<"第"<<i<<"行";
	outfile2<<"第"<<yij1[n].j<<"列的互导纳元素为"<<" "<<yij1[n].g<<"+j"<<yij1[n].b<<endl;
	n++;
	}  
	}
	outfile2<<"第"<<i<<"行"<<" "<<"第"<<i<<"列的自导纳元素为"<<" "<<yii1[i].g<<"+j"<<yii1[i].b<<endl;
*/
	
}



void formb(int flag)//形成因子表1
{
	int n_pv,i,count,j,n_u,i_above,i_pv,n;
	
	double Btemp;
	U1=new struct U_Type [2000];
	double *B;
	B=new double[nod_num+1];
	D1=new double[nod_num+1];
	seq1=new int[nod_num];
	sum1=new int[nod_num];
	
	n_pv=1;
	i_pv=generator[1].i;
	for(i=1;i<=nod_num-1;i++)
	{
		if(flag==2&&i==i_pv)
		{
			
			n_pv++;
			i_pv=generator[n_pv].i;
			sum1[i]=0;
			D1[i]=0;
			
		}
		else
		{
			for(count=i+1;count<=nod_num-1;count++)//清零
			{
				B[count]=0.0;
			}
			
			B[i]=yii[i].b;
			
			for(count=seq[i];count<=seq[i+1]-1;count++)
			{//cout<<yij[count].b<<" "; 
				j=yij[count].j;
				B[j]=yij[count].b;
			}
			
			if(flag==2)
			{
				for(count=1;count<=n_pv;count++)
				{
					
					j=generator[count].i;
					B[j]=0;
					
				}
			}
			
			n_u=1;
			i_above=1;
			
			while(i_above<=i-1)
			{
				count=1;
				
				while(count<=sum1[i_above])
				{
					if(U1[n_u].j==i)
					{Btemp=U1[n_u].value/D1[i_above];
					break;
					}
					count++;
					n_u++;
				}
				
				while(count<=sum1[i_above])//把那一行的各列加到被消去行的各行
				{
					j=U1[n_u].j;//列号
					B[j]=B[j]-Btemp*U1[n_u].value;//由对称性可知
					count++;
					n_u++;
				}
				
				i_above++;
			}
			Btemp=1.0/B[i];
			D1[i]=Btemp;
			count=0;
			for(j=i+1;j<=nod_num-1;j++)//统计上三角
			{
				if(B[j]==0)
					continue;
				U1[n_u].value=B[j]*Btemp;//规格化
				U1[n_u].j=j;
				count++;
				n_u++;
			}
			sum1[i]=count;
		}
	}
	
	delete []B;
	seq1[1]=1;
	/*for(i=1;i<=nod_num-1;i++)
	{
	seq1[i+1]=seq1[i]+sum1[i];
}*/
	ofstream outf("因子表1.txt");
	n=1;
	outf<<"因子表1"<<endl;
	
	for(i=1;i<=nod_num-1;i++)
	{ 
		outf<<"第"<<i<<"行"<<" "<<"第"<<i<<"列"<<" "<<D1[i]<<endl;
		j=sum1[i];	
		for(;j>0;j--)
		{
			outf<<"第"<<i<<"行";
			outf<<"第"<<U1[n].j<<"列"<<" "<<U1[n].value<<endl;
			n++;
		}  
	}
	
	
	/*	cout<<"n_u="<<n_u;
	
	  
		for(n=1;n<=14;n++)
		cout<<"D1["<<n<<"]="<<D1[n]<<endl;
		for(n=1;n<=25;n++)
	cout<<"U1["<<n<<"]="<<U1[n].value<<endl;*/
	
	
	
}

void formbb(int flag)//形成因子表2
{
	int n_pv,i,count,j,n_u,i_above,i_pv,n;
	
	double Btemp;
    double *B;
	U2=new struct U_Type [2000];
	
	B=new double[nod_num+1];
	D2=new double[nod_num+1];
	seq2=new int[nod_num];
	sum2=new int[nod_num];
	
	n_pv=1;
	i_pv=generator[1].i;
	for(i=1;i<=nod_num-1;i++)
	{
		if(flag==2&&i==i_pv)
		{
			
			n_pv++;
			i_pv=generator[n_pv].i;
			sum2[i]=0;
			D2[i]=0;
			
		}
		else
		{
			for(count=i+1;count<=nod_num-1;count++)//清零
			{
				B[count]=0.0;
			}
			
			B[i]=yii1[i].b;
			
			for(count=seq[i];count<=seq[i+1]-1;count++)
			{//cout<<yij1[count].b<<" "; 
				j=yij1[count].j;
				B[j]=yij1[count].b;
			}
			
			if(flag==2)
			{
				for(count=1;count<=generator_num;count++)
				{
					
					j=generator[count].i;
					B[j]=0;
					
				}
			}
			
			n_u=1;
			i_above=1;
			
			while(i_above<=i-1)
			{
				count=1;
				
				while(count<=sum2[i_above])
				{
					if(U2[n_u].j==i)
					{Btemp=U2[n_u].value/D2[i_above];
					break;
					}
					count++;
					n_u++;
				}
				
				while(count<=sum2[i_above])//把那一行的各列加到被消去行的各行
				{
					j=U2[n_u].j;//列号
					B[j]=B[j]-Btemp*U2[n_u].value;//由对称性可知
					count++;
					n_u++;
				}
				
				i_above++;
			}
			Btemp=1.0/B[i];
			D2[i]=Btemp;
			count=0;
			for(j=i+1;j<=nod_num-1;j++)//统计上三角
			{
				if(B[j]==0)
					continue;
				U2[n_u].value=B[j]*Btemp;//规格化
				U2[n_u].j=j;
				count++;
				n_u++;
			}
			sum2[i]=count;
		}
	}
	
	delete []B;
	seq2[1]=1;
	/*	for(i=1;i<nod_num-1;i++)
	{
	seq2[i+1]=seq2[i]+sum2[i];
}*/
	ofstream outf("因子表2.txt");
	n=1;
	outf<<"因子表2"<<endl;
	
	for(i=1;i<=nod_num-1;i++)
	{ flag=0;
	for(j=1;j<=generator_num;j++)
		if(i==generator[j].i)
		{
			flag=1;
			break;
		}
		if(!flag)
		{
			outf<<"第"<<i<<"行"<<" "<<"第"<<i<<"列"<<" "<<D2[i]<<endl;
			j=sum2[i];	
			for(;j>0;j--)

⌨️ 快捷键说明

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