广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 4195 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
deathlife
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[C/C++][精华] 想请问各位大大一个矩阵相乘的程式
正确程式执行的结果应该为:
m1:
1 2 3
4 5 6

m2:
1 2
3 4
5 6

m3=m2*m1:
22 28
49 64

可是我m3执行出来的答案都不是上面这个,已经修改无数次了,想请各位大大帮忙一下。
最后可否请大大们能替我解释一下这程式。

错误程式如下:

#include <stdio.h>
#include<stdlib.h>

main(void)
{
in ..

访客只能看到部份内容,免费 加入会员 或由脸书 Google 可以看到全部内容




献花 x0 回到顶端 [楼 主] From:台湾台湾索尼 | Posted:2006-05-02 11:40 |
cmovies
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x20
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

m1:
1 2 3
4 5 6

m2:
1 2
3 4
5 6

m3=m2*m1:
22 28
49 64

-> m1 为 2 x 3, m2 为 3 x 2, 那 m3 = m2 * m1 应该就是 3 x 3
所以我想你要的是 m3 = m1 * m2 (2 x 2)

main(void)
{
    int i,j,k,m1[2][3]={{1,2,3},{4,5,6}},m2[3][2]={{1,2},{3,4},{5,6}},m3[2][2];
   
    printf("m1矩阵的值:\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<3;j++)
        {
              printf("%3d",m1[i][j]);
        }
        printf("\n");
    }
    printf("\n");
   
    printf("m2矩阵的值:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<2;j++)
        {
              printf("%3d",m2[i][j]);
        }
        printf("\n") ;
    }
    printf("\n");
   
    printf("m1*m2矩阵的值m3:\n");
    for(i=0;i<2;i++)
    {
        for(j=0;j<2;j++)
        {
              m3[i][j]=0;
              for(k=0;k<3;k++)
              {
                  m3[i][j]+=m1[i][k]*m2[k][j];
              }
              printf("%3d",m3[i][j]);
        }
        printf("\n");
    }
    return 0;
}


献花 x0 回到顶端 [1 楼] From:台湾中华电信 | Posted:2006-05-02 12:06 |
deathlife
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

咦!大大为什么呢?我是错在那里呢?
而课本上要求的是m3=m2*m1
为什么m3=m1*m2也可以通呢?
那表示m3=m2*m1是不通的喔,因为m3会等于3*3阶吗?
大大可否解释一下整段程式阿!


献花 x0 回到顶端 [2 楼] From:台湾台湾索尼 | Posted:2006-05-02 12:24 |
cmovies
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x20
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

从结果来看 m3 应该是 2 x 2 矩阵而非 3 x 3 矩阵, 所以 m3=m1*m2 而非 m3=m2*m1
你原本就只有下面这行错
m3[i][j]+=m2[j][k]*m1[k][i];
应该是
m3[i][j]+=m1[i][k]*m2[k][j];

如果真的是 m2*m1, 也应该是 (结果会变成 3 x 3)
m3[i][j]+=m2[i][k]*m1[k][j]

还是说 m1 不是 2 x 3 而是 3 x 2, 只是表示法的不同???
你确认一下课本上写的就应该知道了

此文章被评分,最近评分记录
财富:40 (by codeboy) | 理由: 感谢您的帮助...在次感谢..^^


献花 x0 回到顶端 [3 楼] From:台湾中华电信 | Posted:2006-05-02 12:46 |
deathlife
数位造型
个人文章 个人相簿 个人日记 个人地图
路人甲
级别: 路人甲 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

谢谢大大的解释,我应该是懂了,以后还有问题在上来请教。
感恩喔。 表情 表情 表情 表情 表情 表情 表情 表情 表情


献花 x0 回到顶端 [4 楼] From:台湾台湾索尼 | Posted:2006-05-02 14:06 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.054337 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言