首页 > 编程语言 > 详细

求矩阵的n次方 c语言实现

时间:2014-04-23 13:05:36      阅读:1192      评论:0      收藏:0      [点我收藏+]

矩阵的n次方,比较容易理解的想法是递归。

思路是这样的,把n分成两部分,当n是偶数的时候,即为左右两边的乘积,如果n是奇数,即为左右两边的乘积再乘a

bubuko.com,布布扣
if(n%2)
matrixn(int* a,int n)=(matrixn(int* a,int n/2))^2*a
else
matrixn(int* a,int n)=(matrixn(int* a,int n/2))^2
bubuko.com,布布扣

下面列一下具体代码

bubuko.com,布布扣
#include <stdio.h> 
#include <stdlib.h>
#include <algorithm>
void copyMatrix(int* to,int *from){
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            to[i*5+j]=from[i*5+j];            
        }
    }
}
void Multiply(int *pMatrixA,int *pMatrixB,int col,int *pMatrixC)
{
    int i,j,n;
    int fSum = 0;
    int fTemp = 0;
    for(i = 0; i < col; i++)
    {
        for(j = 0; j < col; j++)
        {
            for(n = 0; n < col; n++)
            {
                fTemp = pMatrixA[i * col + n] * pMatrixB[n * col + j];
                fSum += fTemp;
            }
            pMatrixC[i * col +j] = fSum;
            fSum = 0;
        }
    }
    copyMatrix(pMatrixA,pMatrixC);
}

void matrixn(int* a,int* result,int n)
{
    int C[5][5]={0};//C是用来进行矩阵累乘的数组
    if(n==1)  copyMatrix(result,a);
    else{
        int ret=n % 2;
        matrixn(a,result,n/2);
        Multiply(result,result,5,&C[0][0]);
        if(ret){        
            Multiply(result,a,5,&C[0][0]);        
        }
    }
}
void main(){
    int A[5][5]={{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1},{1,1,1,1,1}};
    int C[5][5]={0};
    matrixn(&A[0][0],&C[0][0],5);
    
    for(int i=0;i<5;i++){
        printf("\n");
        for(int j=0;j<5;j++)
            printf("%d ",C[i][j]);
}    
}
bubuko.com,布布扣

 

求矩阵的n次方 c语言实现,布布扣,bubuko.com

求矩阵的n次方 c语言实现

原文:http://www.cnblogs.com/777fleet/p/3681893.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!