为什么这段代码没有返回空矩阵?

时间:2014-02-04 06:06:56

标签: c++ c

为什么粘贴在下面的代码不返回空矩阵,但是仍然沿着主对角线返回一个带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) )  ;
            }
          }
    }
}


//-------------------------------------------------------

4 个答案:

答案 0 :(得分:2)

在其他可能的事情中(这不是完整的代码),if(g = 0)应该使用==而不是普通的=。如上所述,g将始终被指定为零,然后总是将其评估为false,因此将矩阵初始化为全部为零的循环赢得实际运行。相反,整个else块将以g为零运行,我认为这是意外的。

答案 1 :(得分:1)

您在第一个if条件检查中为g分配零,因此返回零,因此不执行第一个if条件子句。你应该使用'=='比较运算符。

答案 2 :(得分:0)

如果g!= 0和p!= i,i!= j,似乎你没有初始化矩阵元素。

答案 3 :(得分:0)

当g == 0(假设你已经更正)时,你将矩阵的后半部分从第N列第2列第3列变为空(再次假设行= N且列= 2 * N)然后上半部分矩阵未初始化。

如果您的目标只是将其初始化为零

int array[20][20] = {0}

编译器会用零填充未写入的条目。