📄 gat.cpp
字号:
{
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 + -