| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 255 人关注过本帖
标题:分治法—矩阵相乘-看看为什么错误?
只看楼主 加入收藏
wangshui125
Rank: 2
等 级:论坛游民
帖 子:28
专家分:36
注 册:2011-10-25
收藏
 问题点数:0 回复次数:1 
分治法—矩阵相乘-看看为什么错误?
程序代码:
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 编辑 ]
2012-05-12 18:32
wangshui125
Rank: 2
等 级:论坛游民
帖 子:28
专家分:36
注 册:2011-10-25
收藏
得分:0 
没人吗...
2012-05-12 18:47
快速回复:分治法—矩阵相乘-看看为什么错误?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017663 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved