资源描述:
《矩阵相乘的快速算法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、矩阵相乘的快速算法算法介绍矩阵相乘在进行3D变换的时候是经常用到的。在应用中常用矩阵相乘的定义算法对其进行计算。这个算法用到了大量的循环和相乘运算,这使得算法效率不高。而矩阵相乘的计算效率很大程度上的影响了整个程序的运行速度,所以对矩阵相乘算法进行一些改进是必要的。这里要介绍的矩阵算法称为斯特拉森方法,它是由v.斯特拉森在1969年提出的一个方法。我们先讨论二阶矩阵的计算方法。对于二阶矩阵a11a12b11b12A=a21a22B=b21b22先计算下面7个量(1)x1=(a11+a22)*(b11+b22);x2=(a21+a22)*b11;x3=a11*(b12-b22);x4=
2、a22*(b21-b11);x5=(a11+a12)*b22;x6=(a21-a11)*(b11+b12);x7=(a12-a22)*(b21+b22);再设C=AB。根据矩阵相乘的规则,C的各元素为(2)c11=a11*b11+a12*b21c12=a11*b12+a12*b22c21=a21*b11+a22*b21c22=a21*b12+a22*b22比较(1)(2),C的各元素可以表示为(3)c11=x1+x4-x5+x7c12=x3+x5c21=x2+x4c22=x1+x3-x2+x6根据以上的方法,我们就可以计算4阶矩阵了,先将4阶矩阵A和B划分成四块2阶矩阵,分别利用公式
3、计算它们的乘积,再使用(1)(3)来计算出最后结果。ma11ma12mb11mb12A4=ma21ma22B4=mb21mb22其中a11a12a13a14b11b12b13b14ma11=a21a22ma12=a23a24mb11=b21b22mb12=b23b24a31a32a33a34b31b32b33b34ma21=a41a42ma22=a43a44mb21=b41b42mb22=b43b44实现//计算2X2矩阵voidMultiply2X2(float&fOut_11,float&fOut_12,float&fOut_21,float&fOut_22,floatf1_11
4、,floatf1_12,floatf1_21,floatf1_22,floatf2_11,floatf2_12,floatf2_21,floatf2_22){constfloatx1((f1_11+f1_22)*(f2_11+f2_22));constfloatx2((f1_21+f1_22)*f2_11);constfloatx3(f1_11*(f2_12-f2_22));constfloatx4(f1_22*(f2_21-f2_11));constfloatx5((f1_11+f1_12)*f2_22);constfloatx6((f1_21-f1_11)*(f2_11+f2_1
5、2));constfloatx7((f1_12-f1_22)*(f2_21+f2_22));fOut_11=x1+x4-x5+x7;fOut_12=x3+x5;fOut_21=x2+x4;fOut_22=x1-x2+x3+x6;}//计算4X4矩阵voidMultiply(CLAYMATRIX&mOut,constCLAYMATRIX&m1,constCLAYMATRIX&m2){floatfTmp[7][4];//(ma11+ma22)*(mb11+mb22)Multiply2X2(fTmp[0][0],fTmp[0][1],fTmp[0][2],fTmp[0][3],m1._11
6、+m1._33,m1._12+m1._34,m1._21+m1._43,m1._22+m1._44,m2._11+m2._33,m2._12+m2._34,m2._21+m2._43,m2._22+m2._44);//(ma21+ma22)*mb11Multiply2X2(fTmp[1][0],fTmp[1][1],fTmp[1][2],fTmp[1][3],m1._31+m1._33,m1._32+m1._34,m1._41+m1._43,m1._42+m1._44,m2._11,m2._12,m2._21,m2._22);//ma11*(mb12-mb22)Multiply2X2
7、(fTmp[2][0],fTmp[2][1],fTmp[2][2],fTmp[2][3],m1._11,m1._12,m1._21,m1._22,m2._13-m2._33,m2._14-m2._34,m2._23-m2._43,m2._24-m2._44);//ma22*(mb21-mb11)Multiply2X2(fTmp[3][0],fTmp[3][1],fTmp[3][2],fTmp[3][3],m1._33,m1._34,m1._43,m1._4