廣告廣告
  加入我的最愛 設為首頁 風格修改
首頁 首尾
 手機版   訂閱   地圖  簡體 
您是第 4063 個閱讀者
 
發表文章 發表投票 回覆文章
  可列印版   加為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.020631 second(s),query:16 Gzip disabled
本站由 瀛睿律師事務所 擔任常年法律顧問 | 免責聲明 | 本網站已依台灣網站內容分級規定處理 | 連絡我們 | 訪客留言