潮流计算程序有误差,不知道是哪里出了问题。求大神解救
潮流程序计算结果又误差是什么问题造成的啊? 你给这么些信息量,,真得靠大神来答了。。 回复 3# 玉门关山因为我不知道问题出在哪里了。。
do
{
//求解不平衡量
for(i=0;i<nB;i++)
{
if(sB.Type!=2)//假如不是平衡节点
{
DP=sB.GenP-sB.LoadP;
DQ=sB.GenQ-sB.LoadQ;
for(j=0;j<nB;j++)
{
A=sB.Phase-sB.Phase;
DP-=sB.Volt*(sB.Volt*(g*cos(A)+b*sin(A)));
if(sB.Type==0)//PQ节点
DQ-=sB.Volt*(sB.Volt*(g*sin(A)-b*cos(A)));
else if(sB.Type==1)//PV节点
DQ=0;
}
}
else if(sB.Type==2)//平衡节点
DP=DQ=0;
}
//for(i=0;i<nB;i++)
// printf("DP[%d]===%f,DQ[%d]===%f\n",i,DP,i,DQ);
//求解修正方程
for(i=0;i<nB-1;i++)
AA1=DP/sB.Volt;
for(i=0;i<nB-1-count_PVnode;i++)
AA2=DQ/sB.Volt;
calculate_gaosi((double **)b1,BB1,AA1,NBUS-1);//AA是不平衡量,BB是解向量
calculate_gaosi((double **)b2,BB2,AA2,NBUS-1);
max1=fabs(AA1);
for(i=1;i<nB-1;i++)
if(max1<fabs(AA1))
max1=fabs(AA1);
max2=fabs(AA2);
for(i=1;i<nB-1-count_PVnode;i++)
if(max2<fabs(AA2))
max2=fabs(AA2);
for(i=0;i<nB-1;i++)
sB.Phase+=BB1/sB.Volt;
for(i=0;i<nB-1-count_PVnode;i++)
sB.Volt+=BB2;
for(i=0;i<nB;i++)
{
printf("sB[%d].Volt=%f,sB[%d].Phase=%f\n",i,sB.Volt,i,sB.Phase*180/PI);
}
printf("\n");
ci++;
}
while(fabs(max1)>0.00001&&fabs(max2)>0.00001&&ci<40);
这是我求潮流的程序,用的PQ分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。 别急躁,好好找找一定能好到原因。 回复 2# lllmos
跟你的收敛条件设置有关系啊。 回复 4# lllmos
建议楼主换几个软件试试,SPS,PSSE,PowerSystemWorld,特别是PSSE算潮流比较专业。
页:
[1]