lllmos 发表于 2015-6-16 10:44:58

潮流计算程序有误差,不知道是哪里出了问题。求大神解救

lllmos 发表于 2015-6-16 11:17:56

潮流程序计算结果又误差是什么问题造成的啊?

玉门关山 发表于 2015-6-16 11:33:18

你给这么些信息量,,真得靠大神来答了。。

lllmos 发表于 2015-6-16 15:02:40

回复 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分解法,最后得到的结果是只能精确到小数点后第二位,第三位就不对了。

electri 发表于 2015-6-16 19:38:59

别急躁,好好找找一定能好到原因。

ordinarymengya 发表于 2015-10-4 18:59:11

回复 2# lllmos


   跟你的收敛条件设置有关系啊。

ordinarymengya 发表于 2015-10-4 19:00:33

回复 4# lllmos

建议楼主换几个软件试试,SPS,PSSE,PowerSystemWorld,特别是PSSE算潮流比较专业。
页: [1]
查看完整版本: 潮流计算程序有误差,不知道是哪里出了问题。求大神解救

招聘斑竹