程序可以运行,但while循环体执行一半不动了。以下是while循环:
while(flag>0)
{
flag=1;
cout<<"第"<<k<<"次迭代\n";
for(i=2;i<X;i++)//有功功率的不平衡量
{
double S1=0;
for(j=1;j<X;j++)
{
S1=S1+U[j]*(G[i][j]*cos(D[i]-D[j])+B[i][j]*sin(D[i]-D[j]));
}
DP[i]=P[i]-U[i]*S1;
if(fabs(DP[i])>c||fabs(DP[i])==c)
flag=flag+1;
cout<<"DP["<<i<<"]="<<DP[i]<<' '<<endl;
}
for(i=4;i<X;i++)//无功功率的不平衡量
{
double S2=0;
for(j=1;j<X;j++)
{
S2=S2+U[j]*(G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j]));
}
DQ[i]=Q[i]-U[i]*S2;
if(fabs(DQ[i])>c||fabs(DQ[i])==c)
flag=flag+1;
cout<<"DQ["<<i<<"]="<<DQ[i]<<' '<<endl;
}
cout<<'\n';
if(flag==1)//满足收敛条件,功率不平衡量都小于允许误差
flag=0;
/*计算雅可比子矩阵元素*/
for(i=2;i<X;i++)
{
for(j=2;j<X;j++)
{
H[i][j]=-U[i]*U[j]*(G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j]));
cout<<H[i][j]<<" ";
}
}
//........还有其他的,但到上一个for语句就已经不输出了
}
运行结果:
应该是:H[i][j]=-U[i]U[j](G[i][j]*sin(D[i]-D[j])-B[i][j]*cos(D[i]-D[j])) 这句出错,注释这句看能否通过,能通过就是这句问题。原因可能:各给数组是否正确初始化并有值
你的循环中X是多少
【解】循环体继续执行。在完成了当前的循环周期后再次检查循环条件,此时循环将终止。