分治法—矩阵相乘-看看为什么错误?
程序代码:struct TSMartrix DAC_MultSMatrix(struct TSMartrix M,struct TSMartrix N)
{
struct TSMartrix Q;
int n=M.mu;
Q.nu=Q.mu=M.mu;
if(n==2)
{
int m1,m2,m3,m4,m5,m6,m7;
m1=(M.data[0][0]+M.data[1][1])*(N.data[0][0]+N.data[1][1]);
m2=(M.data[1][0]+M.data[1][1])*N.data[0][0];
m3=M.data[0][0]*(N.data[0][1]-N.data[1][1]);
m4=M.data[1][1]*(N.data[1][0]-N.data[0][0]);
m5=(M.data[0][0]+M.data[0][1])*N.data[1][1];
m6=(M.data[1][0]-M.data[0][0])*(N.data[0][0]+N.data[0][1]);
m7=(M.data[0][1]-M.data[1][1])*(N.data[1][0]+N.data[1][1]);
Q.data[0][0]=m1+m4-m5+m7;
Q.data[0][1]=m3+m5;
Q.data[1][0]=m2+m4;
Q.data[1][1]=m1+m3-m2+m6;
return Q;
}
else
{
n=n/2;
struct TSMartrix M00,M01,M10,M11;
struct TSMartrix N00,N01,N10,N11;
struct TSMartrix Q00,Q01,Q10,Q11;
struct TSMartrix s1,s2,s3,s4,s5,s6,s7;
struct TSMartrix MM,NN;
M00.mu=M01.mu=M10.mu=M11.mu=M00.nu=M01.nu=M10.nu=M11.nu=N00.mu=N01.mu=N10.mu=N11.mu=N00.nu=N01.nu=N10.nu=N11.nu=n;
divide(M,M00,M01,M10,M11);/*分割矩阵M*/
divide(N,N00,N01,N10,N11);/*分割矩阵N*/
MM=AddSMatrix(M00,M11); NN=AddSMatrix(N00,N11);
s1=DAC_MultSMatrix(MM,NN);/*运行到这就有错,为什么.......*/
MM=AddSMatrix(M10,M11);
s2=DAC_MultSMatrix(MM,N00);
NN=SubSMatrix(N01,N11);
s3=DAC_MultSMatrix(M00,NN);
NN=SubSMatrix(N10,N00);
s4=DAC_MultSMatrix(M11,NN);
MM=AddSMatrix(M00,M01);
s5=DAC_MultSMatrix(MM,N11);
MM=SubSMatrix(M10,M00);NN=AddSMatrix(N00,N01);
s6=DAC_MultSMatrix(MM,NN);
MM=SubSMatrix(M01,M11);NN=AddSMatrix(N10,N11);
s7=DAC_MultSMatrix(MM,NN);
Q00=AddSMatrix(s1,AddSMatrix(s4,SubSMatrix(s7,s5)));
Q01=AddSMatrix(s3,s5);
Q10=AddSMatrix(s2,s4);
Q11=AddSMatrix(s1,AddSMatrix(s3,SubSMatrix(s6,s2)));
merge(Q00,Q01,Q10,Q11,Q);
return Q;
}编译通过,就是调试运行到那就会说“调用访问内存违例(断异常)”[ 本帖最后由 wangshui125 于 2012-5-12 18:38 编辑 ]






