正文

[050] 求两个矩阵的乘积矩阵2006-04-09 10:27:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/12139.html

分享到:

参考: 《C程序设计》(夏宝岚) P78


6.10 求两个矩阵的乘积矩阵。

#include <stdio.h>
int main()
{
    int a[100][100] = {{1, 0, 3, -1}, {2, 1, 0, 2}};
    int b[100][100] = {{4, 1, 0}, {-1, 1, 3}, {2, 0, 1}, {1, 3, 4}};
    int c[100][100] = {{0}};
    int n = 2; /* 第一矩阵的行数 */
    int m = 4; /* 第一矩阵的列数,即第二矩阵的行数 */
    int p = 3; /* 乘积矩阵的列数 */
    int i, j, k;

    for (i = 0; i < n; i++)
    {
        for (j = 0; j < p; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < m; k++)
                c[i][j] = c[i][j] + a[i][k] * b[k][j];

            printf("%5d", c[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行结果:
===================
    9   -2   -1
    9    9   11
===================

只有当一个矩阵(左矩阵)的列数等于第二个矩阵(右矩阵)的行数时, 两个矩阵才能相乘。得到的乘积矩阵行数为第一个矩阵的行数, 列数为第二个矩阵的列数。

矩阵的相乘规则如下:

   ┌ a11  a12  a13
A =│              
   └ a21  a22  a23

   ┌ b11  b12
B =│ b21  b22
   └ b31  b32

    ┌ a11b11+a12b21+a13b31  a11b12+a12b22+a13b32
AB =│                                           
    └ a21b11+a22b21+a23b31  a21b12+a22b22+a23b32


上述程序中两个矩阵的维数分别为 n × m,m×p,所得乘积矩阵为 n×p 。若要交互输入原矩阵,则改写如下:

#include <stdio.h>
int main()
{
    int a[100][100], b[100][100], c[100][100];
    int n, m, p; /* n×m, m×p */
    int i, j, k;
    printf("Input value of n, m, p\n");
    scanf("%d %d %d", &n, &m, &p);

    printf("\nA:\n");
    for (i = 0; i < n; i++)              /* 读取矩阵A的各元素 */
        for (j = 0; j < m; j++)
            scanf("%d", &a[i][j]);

    printf("\nB:\n");
    for (i = 0; i < m; i++)              /* 读取矩阵A的各元素 */
        for (j = 0; j < p; j++)
            scanf("%d", &b[i][j]);

    printf("\nAB:\n");
    for (i = 0; i < n; i++)              /* 求矩阵C的各元素 */
    {
        for (j = 0; j < p; j++)
        {
            c[i][j] = 0;
            for (k = 0; k < m; k++)
                c[i][j] = c[i][j] + a[i][k] * b[k][j];
            printf("%5d", c[i][j]);
        }
        printf("\n");
    }
    return 0;
}

运行结果:
=========================
Input value of n, m, p
2 4 3↙

A:
1 0 3 -1↙
2 1 0 2↙

B:
4 1 0↙
-1 1 3↙
2 0 1↙
1 3 4↙

AB:
    9   -2   -1
    9    9   11
==========================

搞懂矩阵相乘的原理,就可以对以前的一个问题进行补充了, 详见 [047] 求传递闭包

阅读(10168) | 评论(1)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册