如何更有效地实现矩阵公式?

时间:2016-06-25 14:28:34

标签: c matrix-multiplication

最近,我想使用C来实现矩阵公式,如下所示:

enter image description here

其中,P_{i,j}={x_{i,j},y_{i,j},z_{i,j}}

这是我的类C算法:

SurfacePoint(i,j,p,q,Nu,Nv,P){
    uidx = i - p;
    S = 0.0;
    for(l=0; l<=q; l++){
        temp = 0.0;
        vidx = j - q + l
        for(k=0; k<=p; k++){
            temp = temp + Nu[k]*P[uidx+k][vidx];
        }
        S = S + Nv[l]*temp;
    }
    return S;
}

但是,由于P是一个向量而不是实数,所以我需要使用数组temp和数组S来恢复结果

实施

uidx = i - p;
for(l = 0; l <= q; l++){
    temp[0] = 0;
    temp[1] = 0;
    temp[2] = 0;
    vidx = j - q + l;
    for(k = 0; k <= p; k++){
        temp[0] = temp[0] + Nu[k]*P[uidx+k][vidx][0];
        temp[1] = temp[1] + Nu[k]*P[uidx+k][vidx][1];
        temp[2] = temp[2] + Nu[k]*P[uidx+k][vidx][2];
    }                   
    S[0] = S[0] + Nv[l]*temp[0];
    S[1] = S[1] + Nv[l]*temp[1];
    S[2] = S[2] + Nv[l]*temp[2];
}

对于C,我是新人,所以我想知道:

  • 是否有更多高效方法来实现它?

1 个答案:

答案 0 :(得分:1)

由于三维向量之间没有相互作用,我认为你可以实现一个正常的矩阵向量乘法函数来计算

Nu^T * P * Nv

并在P个元素的每个维度上调用3次。但是,当然您需要重新组织存储,以便P可以被视为具有实数元素的3个单独矩阵。