题目
编写程序,已有向量 $x = [1, 2, 3, 4]$,分别计算每个元素的平方(点乘方 .^)、倒数(点除法 ./),以及求两数组对应元素的商。
输入格式:无需外部输入。
输出格式:输出原向量、每个元素平方向量、元素倒数向量,以及两个数组的元素商。
数据范围与约定:元素级点运算。
思路与算法
1. 标量与数组点除
求倒数时,1 ./ x 表示将标量 1 依次除以向量 $x$ 中的每一个元素。若误写为 1 / x,将被解释为最小二乘广义逆行向量,产生极其奇怪的非预期解。
2. 点乘方规则x .^ 2 遍历每一个分量求平方;而 x ^ 2 对非方阵直接抛错,对同维方阵则代表矩阵自乘 $A \times A$。
3. 防零策略
在执行点除 A ./ B 前,如果分母 $B$ 中可能包含零,需提前做保护或者容忍 Inf/NaN。
完整程序
% Octave / MATLAB 第32题:元素点除与点乘方
x = [1, 2, 3, 4];
y = [2, 4, 8, 16];
% 1. 元素级平方
x_sq = x .^ 2;
% 2. 标量点除向量 (求倒数)
x_inv = 1 ./ x;
% 3. 数组对应元素相除
ratio = y ./ x;
fprintf("原向量 x: %s\n", mat2str(x));
fprintf("点平方 x.^2: %s\n", mat2str(x_sq));
fprintf("点倒数 1./x: %s\n", mat2str(x_inv));
fprintf("数组商 y./x: %s\n", mat2str(ratio));运行示例
输出:
原向量 x: [1 2 3 4]
点平方 x.^2: [1 4 9 16]
点倒数 1./x: [1 0.5 0.333333333333333 0.25]
数组商 y./x: [2 2 2.66666666666667 4]