正文

[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, p2 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] 求传递闭包。

阅读(10327) | 评论(1)


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

评论

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