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

📄 gat.cpp

📁 该程序是用来计算互联发电系统的可靠性。该系统是由两个发电系统A、B
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	{
		n2=int(ap[num+1].capacity/ap[num+1].buchang);
		temp[num+1].capacity=temp[num].capacity+ap[num+1].capacity;
		for(i=0;i<=n1+n2;i++)
			temp[num+1].X[i]=i*temp[num+1].buchang;
		ap[num+1].probability();
		ap[num+1].frequency();
		for(k=0;k<=n1+n2;k++)//确切概率
			for(i=0;i<=n1;i++)
				temp[num+1].P[k]=temp[num+1].P[k]+temp[num].P[i]*ap[num+1].P[k-i];
		temp[num+1].PP[n1+n2]=temp[num+1].P[n1+n2];
		for(i=n1+n2-1;i>=0;i--)//累计概率
			temp[num+1].PP[i]=temp[num+1].P[i]+temp[num+1].PP[i+1];
		for(m=0;m<=n1+n2;m++)//确切频率
			for(j=0;j<=n2;j++)
				temp[num+1].F[m]=temp[num+1].F[m]+(temp[num].P[m-j]*ap[num+1].F[j]+temp[num].F[m-j]*ap[num+1].P[j]);
		temp[num+1].FF[n1+n2]=temp[num+1].F[n1+n2];//累积频率
		for(k=n1+n2-1;k>=0;k--)
			temp[num+1].FF[k]=temp[num+1].F[k]+temp[num+1].FF[k+1];
		cout<<endl<<"-----------------------------"<<num+2<<"台并联停运表---------------------------"<<endl;//输出并联后的停运表
		cout<<"i  "<<"    -X   "<<"       P      "<<"      PP        "<<"     F      "<<"       FF   "<<endl;
		for(i=0;i<=n1+n2;i++)
			cout<<i<<" "<<temp[num+1].X[i]<<" "<<temp[num+1].P[i]<<" "<<temp[num+1].PP[i]<<" "<<temp[num+1].F[i]<<" "<<temp[num+1].FF[i]<<endl;
	}
	temp[num+1].N=n1+n2;
}
apparatus apparatus::change_system(apparatus &finalgen,apparatus &b)//发电系统裕度表的修改,最终计算等效支援发电系统时用到
{
	apparatus temp;
	temp=finalgen;//修改发电系统
	int limit;
	for(int i=0;i<=finalgen.N;i++)
	{
		if(finalgen.X[i]==0)   limit=i;//记录发电系统裕度表中裕为0的编号
	}
	finalgen.N=b.N;
	finalgen.PP[0]=1;//修改发电系统的裕度表
	finalgen.FF[0]=0;
	for(i=0;i<=b.N;i++) 
		finalgen.X[i]=i*finalgen.buchang;
	for(i=0;i<b.N;i++)
	{
		finalgen.P[finalgen.N-i]=temp.P[limit-i];
		finalgen.PP[finalgen.N-i]=temp.PP[limit-i];
		finalgen.F[finalgen.N-i]=temp.F[limit-i];
		finalgen.FF[finalgen.N-i]=temp.FF[limit-i];
	}
	return finalgen;//修改后的发电系统
}
apparatus apparatus::serialconnection(apparatus &a,apparatus &b)//串联公式,参数为两个对象
{
	apparatus c,temp;//将串联后的停运表放入c,将大表放入temp
	int i;
	if(a.N>b.N)//如果元件a的停运表的大小比元件b的大,则改造a表的大小为b表的大小
	{
		c.N=b.N;
		temp=a;
		a.N=b.N;
		a.PP[0]=1;
		a.FF[0]=0;
		for(i=0;i<a.N;i++)
		{
			a.X[i]=i*a.buchang;
			a.PP[a.N-i]=temp.PP[temp.N-i];
			a.FF[a.N-i]=temp.FF[temp.N-i];
		}
	}
	if(a.N<b.N)//如果元件b的停运表的大小比元件a的大,则改造b表的大小为a表的大小
	{
		c.N=a.N;
		temp=b;
		b.N=a.N;
		b.PP[0]=1;
		b.FF[0]=0;
		for(i=0;i<b.N;i++)
		{
			b.X[i]=i*b.buchang;
			b.PP[b.N-i]=temp.PP[temp.N-1];
			b.FF[b.N-i]=temp.FF[temp.N-1];
		}
	}
	c.N=a.N;
	for(i=0;i<=c.N;i++)//计算c的累计概率和累积频率
	{
		c.X[i]=i*c.buchang;
		c.PP[i]=a.PP[i]+b.PP[i]-a.PP[i]*b.PP[i];
		c.FF[i]=a.FF[i]*(1-b.PP[i])+b.FF[i]*(1-a.PP[i]);
	}
	c.P[c.N]=c.PP[c.N];
	c.F[c.N]=c.FF[c.N];
	for(i=c.N-1;i>=0;i--)
	{
		c.P[i]=c.PP[i]-c.PP[i+1];
		c.F[i]=c.FF[i]-c.FF[i+1];
	}
	cout<<"i   "<<"   -X   "<<"        P    "<<"       PP       "<<"       F   "<<"        FF   "<<endl;
	for(i=0;i<=c.N;i++)
		cout<<i<<" "<<c.X[i]<<" "<<c.P[i]<<" "<<c.PP[i]<<" "<<c.F[i]<<" "<<c.FF[i]<<endl; 
	ofstream output;
	output.open("out_serialconnection.txt");//将输电线路串联结果存入"out_serialconnection.txt"中
	output<<"i   "<<"   -X   "<<"        P    "<<"       PP       "<<"       F   "<<"        FF   "<<endl;
	for(i=0;i<=c.N;i++)
		output<<i<<" "<<c.X[i]<<" "<<c.P[i]<<" "<<c.PP[i]<<" "<<c.F[i]<<" "<<c.FF[i]<<endl; 
	return c;
}
void apparatus:: parallelconnection_system(apparatus &a,apparatus &b)//系统并联公式
{
	apparatus c;
	c.N=a.N+b.N;
	double tempP[N0],tempF[N0],LOLP,LOLF;//由于互联系统裕度表的裕度以及编号问题,加入tempP[N0],tempF[N0]
	//分别表示系统裕度表修改后的裕度表,LOLP为电力不足概率,LOLF为停电频率
	double EENS=0;
	for(int i=0;i<=N0;i++)
	{
		if(i<=b.N)//修改后的裕度表前b.N个,累积频率补1,累积概率补0
		{
			tempP[i]=1;
			tempF[i]=0;
		}
		if(i>b.N && i<=b.N+a.N+1)//第b.N到第c.N为原来系统的裕度表
		{
			tempP[i]=a.PP[i-b.N-1];
			tempF[i]=a.FF[i-b.N-1];
		}
		if (i>b.N+a.N+1)//数组后面的部分用不到
		{
			tempP[i]=0;
			tempF[i]=0;
		}
	}
	for(int k=0;k<=a.N+b.N;k++)
	{
		c.PP[k]=0;
		c.FF[k]=0;
		for(int j=0;j<=b.N;j++)
		{
			c.PP[k]=c.PP[k]+tempP[b.N+1+k-j]*b.P[j];//计算互联系统的累计概率
			c.FF[k]=c.FF[k]+(tempP[b.N+1+k-j]*b.F[j]+tempF[b.N+1+k-j]*b.P[j]);//计算互联系统的累计频率
		}
	}
	for(i=0;i<b.N;i++)//计算互联系统裕表的裕度
		c.X[i]=a.X[0]+(b.N-i)*c.buchang;
	for(i=b.N;i<=a.N+b.N;i++)
		c.X[i]=a.X[i-b.N];
	cout<<endl<<endl<<"--------------------------互联系统的裕度表----------------------------"<<endl;
	cout<<"i "<<"         X      "<<"        PP       "<<"     FF     "<<endl;
	for(k=0;k<=a.N+b.N;k++)
		cout<<k<<"  "<<c.X[k]<<"   "<<c.PP[k]<<"  "<<c.FF[k]<<endl;
	for(i=0;i<=a.N+b.N;i++)
	{
		if(c.X[i]==-10)
		{
			LOLP=c.PP[i];//计算LOLP
			LOLF=c.FF[i];//计算LOLF
			for(k=i;k<=a.N+b.N;k++)
				EENS+=c.PP[k];//计算EENS
		}
	}
	cout<<endl<<"LOLP="<<LOLP<<endl;
	cout<<"EENS="<<EENS*10*24<<endl;
	cout<<"LOLF="<<LOLF<<endl;
	ofstream output;
	output.open("out_final.txt");//将互联系统裕度表存入"out_final.txt"文件中
    output<<"---------------------------互联系统的裕度表--------------------------------"<<endl;
	output<<"i  "<<"    -X     "<<"    PP       "<<"      FF   "<<endl;//输出并联后的停运表
	for(i=0;i<=a.N+b.N;i++)
		output<<i<<" "<<c.X[i]<<" "<<c.P[i]<<" "<<c.PP[i]<<" "<<c.F[i]<<" "<<c.FF[i]<<endl; 
	output<<endl<<"LOLP="<<LOLP<<endl;
	output<<"EENS="<<EENS*10*24<<endl;
	output<<"LOLF="<<LOLF<<endl;
}
////////////////////////////////////////////////////////////////////////////////////////////////
void main()//主函数
{
	cout.setf(ios::fixed);//设置数据输出格式
	cout.width(10);
	cout.precision(10);
	////////////////////////输入A系统发电机的数据,形成等效发电机停运表///////////////////
	NN=input(0);
	cout<<endl<<"--------------------------发电系统A的停运表----------------------------"<<endl<<endl;
	int i=0;
	for(i=0;i<NN;i++)
	{
		generator_A[i].probability();
		generator_A[i].frequency();
		cout<<endl<<"------------------------第"<<i<<"台发电机的停运表------------------------"<<endl;
		generator_A[i].display();
	}
	ld_A.input(0);//输入A系统负荷的数据,从而形成发电系统A的裕度表
	ld_A.probability();//形成负荷的停运表
	ld_A.frequency();
	apparatus equal_generator_A;//建立一个对象equal_generator用于存放最终A发电系统并联停运表
	tempgen_A[0]=generator_A[0];//对c[0]赋初值为第一台发电机
    tempgen_A[0].probability();
	tempgen_A[0].frequency();
	for(i=0;i<=NN-1;i++)//调用NN次并联函数最终形成发电系统停运表
		equal_generator_A.parallelconnection_ap(i,generator_A,tempgen_A,ld_A);
	apparatus finalgen_A=tempgen_A[NN];//将发电系统停运表存入finalgen_A************
	///////////////////////////输入B系统的发电机数据,形成等效发电机的停运表//////////////
	NN=input(1)+1;
	cout<<NN<<endl;
	cout<<endl<<"--------------------------发电系统B的停运表----------------------------"<<endl<<endl;
	for(i=0;i<NN;i++)
	{
		generator_B[i].probability();
		generator_B[i].frequency();
		cout<<endl<<"------------------------第"<<i<<"台发电机的停运表------------------------"<<endl;
		generator_B[i].display();
	}
	ld_B.input(1);//输入B系统负荷的数据,从而形成发电系统B的裕度表
	ld_B.probability();//形成负荷的停运表
	ld_B.frequency();
	apparatus equal_generator_B;//建立一个对象equal_generator_B用于存放最终B发电系统并联停运表
	tempgen_B[0]=generator_B[0];//对c[0]赋初值为第一台发电机
    tempgen_B[0].probability();
	tempgen_B[0].frequency();
	for(i=0;i<=NN-1;i++)//调用NN次并联函数最终形成发电系统停运表
		equal_generator_B.parallelconnection_ap(i,generator_B,tempgen_B,ld_B);
	apparatus finalgen_B=tempgen_B[NN];//将发电系统停运表存入finalgen_B************
	cout<<endl;
	/////////////////////////输入变压器的数据 ,形成变压器并联停运表////////////////////////
	apparatus equal_tr;//建立一个对象equal_tr,用于存放变压器并联停运表
	NN=input(2);
	cout<<endl<<"--------------------------变压器的停运表-----------------------------"<<endl<<endl;
	for(i=0;i<NN;i++)
	{
		transformer[i].probability();
		transformer[i].frequency();
		cout<<"-------------------------第"<<i<<"台变压器的停运表--------------------------"<<endl;
		transformer[i].display();
	}
	temptran[0]=transformer[0];
	temptran[0].probability();
	temptran[0].frequency();
	load ld;//形成一个空负荷
	for(i=0;i<NN-1;i++)//调用NN-1次并联函数最终形成变压器停运表
		equal_tr.parallelconnection_ap(i,transformer,temptran,ld);
	apparatus finaltran=temptran[NN-1];//将并联变压器停运表存入finaltran**************
	//finaltran.display();
	cout<<endl;
	/////////////////////////输入线路的数据,形成线路并联停运表/////////////////////////////
	apparatus equal_line;//建立一个对象equal_line,用于存放线路并联停运表
	NN=input(3)+1;
	cout<<endl<<"----------------------------线路的停运表------------------------------"<<endl<<endl;
	for(i=0;i<NN;i++)
	{
		line[i].probability();
		line[i].frequency();
		cout<<"--------------------------第"<<i<<"条线路的停运表---------------------------"<<endl;
		line[i].display();
	}
	templine[0]=line[0];
	templine[0].probability();
	templine[0].frequency();
	for(i=0;i<NN-1;i++)//调用NN-1次并联函数最终形成线路停运表
		equal_line.parallelconnection_ap(i,line,templine,ld);
	apparatus finalline=templine[NN-1];//将并联线路停运表存入finalline**************
	apparatus t1,t2,t3,t;//建立对象t1,t2,t3,t,分别存储相应的结果
	cout<<endl<<"--------------------------------输电线路的裕度表--------------------------------"<<endl;
	t1=t.serialconnection(finalline,finaltran);//t1为输电系统的裕度表
	t2=t.change_system(finalgen_A,t1);//t2为A系统改造后的裕度表
	cout<<endl<<"----------------------------最终等效支援系统的裕度表-----------------------------"<<endl;
	t3=t.serialconnection(t1,t2);//t3为等效A系统的裕度表
	t.parallelconnection_system(finalgen_B,t3);
}
    




⌨️ 快捷键说明

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