| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1005 人关注过本帖
标题:C语言求矩阵的乘法!!!!!!!!!
只看楼主 加入收藏
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
结帖率:83.33%
收藏
已结贴  问题点数:5 回复次数:6 
C语言求矩阵的乘法!!!!!!!!!
有没有一种 我输入N,程序就求出矩阵M的N次方的程序????我自己写了一个,多一次方就多一个for循环,理论上何以求到N次,但是觉得不够简洁。。。。。。。
程序代码:
#include<stdio.h>
#include<conio.h>
void main(void){
int M[5][5],Mk[5][5],MKK[5][5],MKKK[5][5],i,j,p;
M[0][0]=0;M[0][1]=0;M[0][2]=0;M[0][3]=0;M[0][4]=1;
M[1][0]=1;M[1][1]=0;M[1][2]=1;M[1][3]=0;M[1][4]=0;
M[2][0]=0;M[2][1]=0;M[2][2]=0;M[2][3]=0;M[2][4]=1;
M[3][0]=1;M[3][1]=0;M[3][2]=1;M[3][3]=0;M[3][4]=0;
M[4][0]=0;M[4][1]=1;M[4][2]=0;M[4][3]=1;M[4][4]=0;
for(i=0;i<5;i++){
  for(j=0;j<5;j++){Mk[i][j]=0;
    for( p=0;p<5;p++)
        Mk[i][j]=Mk[i][j]+M[i][p]*M[p][j];
  }
}
for(i=0;i<5;i++){
  for(j=0;j<5;j++){MKK[i][j]=0;
    for( p=0;p<5;p++)
        MKK[i][j]=MKK[i][j]+Mk[i][p]*M[p][j];
  }
}
for(i=0;i<5;i++){
  for(j=0;j<5;j++){MKKK[i][j]=0;
    for( p=0;p<5;p++)
        MKKK[i][j]=MKKK[i][j]+MKK[i][p]*M[p][j];
  }
}
for(i=0;i<5;i++){
  for(j=0;j<5;j++)
     printf("%8d",MKKK[i][j]);
     printf("\n");}
getch();
}
搜索更多相关主题的帖子: C语言 color 
2014-09-15 16:41
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:2 
矩阵N次幂已经忘了怎么算了,不过就从你的程序上来看,前面三个for循环的规则都是一样的,可以编写成一个函数,根据输入的N值,循环调用函数而已
2014-09-15 17:05
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
收藏
得分:0 
回复 2 楼 wyw19880809
谢谢,我在根据这个思路想想
2014-09-15 17:31
erty1001
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:4
帖 子:331
专家分:1433
注 册:2014-8-31
收藏
得分:2 
简单说说:
可以先编写anew[N][N]=a[N]*b[N]的int anew[][N] f1(int a[][N],int b[][N])的函数
然后编写anew[N][N]=a[N][N] ^P次方的程序    int anew[][N] f2(int a[][N],int p)
其中f2(int a[][N],int p)  
{
  其中若p=2  return f1(a[][N],a[][N])
  否则
  return f1(a[][N],f2(a[][N],p-1))
}
2014-09-15 20:15
魑魅魍魉!
Rank: 3Rank: 3
来 自:亲爱MM肚子里!
等 级:论坛游侠
威 望:1
帖 子:61
专家分:149
注 册:2014-5-3
收藏
得分:2 
亲!虽然我没弄过矩阵的乘法,但是,个人觉得啊!
你前面那一团的东西干嘛不直接用一个数组    int M[5][5]={0,0,0,0,1,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0}; 这样赋值啊!
你那个看着都有点乱乱的感觉。
而且,我也也觉得下面那三重循环 机构大致一样,何不用重载函数搞呢! 看着都清晰点!
2014-09-15 22:30
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
收藏
得分:0 
回复 5 楼 魑魅魍魉!
一个个赋值,便于查找修改,等程序写的成功了,就该用定义时赋值,如果写函数的话,矩阵的幂不知道怎么表示?有的人说用循环,有的人说递归,搞不懂了。。。
2014-09-16 11:18
追寻XT
Rank: 2
等 级:论坛游民
威 望:1
帖 子:37
专家分:32
注 册:2014-8-20
收藏
得分:0 
经过几天思考,现在来结贴,以下是关于矩阵N次幂的求法:
程序代码:
#include<stdio.h>
#include<conio.h>
#define A  5
#define B  5//A,B的值可根据具体的矩阵来确定;
void main(void){
    int M[A][B]={0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0},MT[A][B],
       ME[A][B]={0,0,0,0,1,1,0,1,0,0,0,0,0,0,1,1,0,1,0,0,0,1,0,1,0},i,j,p,c,k;//M[A][B]为初始矩阵,MT[A][A]为中转矩阵;ME[A][B]为结果矩阵
printf("M的()次幂:");
scanf("%d",&k);
for(c=0;c<k-1;c++){
    for(i=0;i<5;i++){
      for(j=0;j<5;j++){
         MT[i][j]=0;
         for( p=0;p<5;p++)
             MT[i][j]=MT[i][j]+ME[i][p]*M[p][j];//迭代
          }
          } 
for(i=0;i<5;i++){
      for(j=0;j<5;j++){
        ME[i][j]=*(MT[i]+j);}
      
    }
}
for(i=0;i<5;i++){
      for(j=0;j<5;j++){
        printf("%4d",ME[i][j]);}
      printf("\n");}
getch();
}


[ 本帖最后由 追寻XT 于 2014-9-17 14:34 编辑 ]
2014-09-17 14:27
快速回复:C语言求矩阵的乘法!!!!!!!!!
数据加载中...
 
   



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

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