为什么粘贴在下面的代码不返回空矩阵,而是返回主对角线上的NaN矩阵?
我在哪里做错了?
if(g = 0)
{
for(i=0;i<N;i++)
{
for(j=N;j<2*N;j++)
{
fnd[i][j]=0;
}
}
}
else
{
for(i=0;i<N;i++)
{
for(p=0;p<N;p++)
{
if(p!=i)
{
fnd[i][i+N]+=g*g*3.*fabs(x[i]-x[p])*fabs(x[i+N]-x[p+N]) /fabs(pow(fabs(pow(fabs(x[i]-x[p]),2.)+g*g*pow(fabs(x[i+N]-x[p+N]),2.)+h*h*pow(fabs(x[i+2*N]-x[p+2*N]),2)),2.5) );
}
}
for(j=N;j<2*N;j++)
{
//offdiagonal terms<------
if(i!=j)
{
fnd[i][j]=-3.*g*g*fabs(x[i]-x[j-N])* fabs(x[i+N]-x[j])/fabs(pow(fabs(pow(x[i]-x[j-N],2.)+g*g*pow(x[i+N]-x[j],2.)+h*h*pow(x[i+2*N]-x[j+N],2)),2.5) ) ;
}
}
}
}
//-------------------------------------------------------
最佳答案
除其他外(这不是完整的代码),if(g = 0)
应该使用==
而不是普通的=
。如所写,g
将始终分配零,然后始终将其赋值为false,因此将矩阵初始化为全零的循环实际上不会运行。相反,整个else
块将在g
为零的情况下运行,我认为这是意外的。