题目
编写程序,给定两个相同维度的 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