曲径通幽论坛

标题: 矩阵与矩阵相乘 [打印本页]

作者: beyes    时间: 2009-9-12 16:36
标题: 矩阵与矩阵相乘
矩阵与矩阵相乘应满足的条件:
1、矩阵 A 的列数必须等于矩阵 B 的行数;
2、设矩阵 C 是矩阵A 与 矩阵B 相乘结果存放的矩阵,那么矩阵 C 的行数等于矩阵A 的行数,矩阵C 的列数等于矩阵 B 的列数;
3、矩阵C 中的第 i 行 j 列的元素是 矩阵A 中的第 i 行元素与 矩阵B 中第 j 列元素的乘积之和。

例子如下图所示:



C 语言算法(以上面为例):
#include <stdio.h>

int main()
{
    int a [2][3] = {{1, 4, 6}, {2, 8, 5}};
    int b [3][2] = {{3,7}, {9,5}, {8,4}};
    int c [2][2];
   
    int i;
    int j;
    int k;   
   
    for (i = 0; i < 2; i++)
        for (j = 0; j < 2; j++) {
            c [i][j] = 0;

            for (k = 0; k <= 2; k++)
                c [i][j] += a [i][k] * b [k][j];
    }

    printf ("[%d][%d]\n", c[0][0],c[0][1]);
    printf ("[%d][%d]\n", c[1][0],c[1][1]);

    return (0);
}
运行与输出
beyes@linux-beyes:~/C/structer> ./matrix.exe
[87][51]
[118][74]

说明
第一层 for 循环中的 i 表示,矩阵 A 由于有 2 行,所以要进行 2 次循环才完成矩阵的运算。
第二层 for 循环中的 j 表示,矩阵 B 由于有 2 列,矩阵A中的每一行都要与矩阵B中的每1列相乘。
第三层 for 循环中的 k 表示,矩阵A的每行和矩阵B的每列都有 3 个元素,所以需要有 3 次的相乘然后相加的运算才会得到矩阵C中的一个元素值。




欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) Powered by Discuz! X3.2