题目

编写程序,给定两个相同维度的 2×2 矩阵 A 和 B,分别计算它们的矩阵乘积(线性代数乘法)与元素级点乘(Hadamard 积),对比输出两者的结果差异。

输入格式:无需外部输入。

输出格式:分别打印原矩阵 A、B,以及矩阵乘法结果和点乘结果。

数据范围与约定:基础矩阵运算。

思路与算法

1. 矩阵乘法与点乘本质区别
A * B 是线性代数内积求和,要求 A 的列数等于 B 的行数;A .* B 是对应元素各自相乘,要求两矩阵维度完全一致或支持广播。

2. 科学计算的通用习惯
在绘制函数图像、信号采样点计算时,变量 $x$ 通常为数组,代入多项式或公式中的乘法、平方必须一律加上小数点写成 .*、.^。

3. 错误提示辨析
当两个非方阵形状相同时(如 1×3 行向量),写 v * v 会直接报错 `nonconformant arguments`,正确写法是 v .* v。

完整程序

% Octave / MATLAB 第31题:矩阵乘法与点乘对比
A = [1, 2;
     3, 4];

B = [5, 6;
     7, 8];

fprintf("矩阵 A:\n");
disp(A);
fprintf("矩阵 B:\n");
disp(B);

% 1. 线性代数矩阵乘法 (1*5+2*7=19)
mat_mul = A * B;
fprintf("矩阵乘法 A * B:\n");
disp(mat_mul);

% 2. 元素级点乘 (1*5=5, 2*6=12)
elem_mul = A .* B;
fprintf("元素点乘 A .* B:\n");
disp(elem_mul);

运行示例

输出:

矩阵 A:
   1   2
   3   4
矩阵 B:
   5   6
   7   8
矩阵乘法 A * B:
   19   22
   43   50
元素点乘 A .* B:
    5   12
   21   32