题目

编写程序,给定一个包含正数、负数与零的矩阵,使用关系运算符(>、<、==、~=)与标量比较,观察生成的 logical 逻辑布尔掩码矩阵的结构。

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

输出格式:输出测试矩阵及各个条件生成的 0/1 逻辑矩阵。

数据范围与约定:关系运算符。

思路与算法

1. 关系运算返回逻辑矩阵
在 Octave 中,A > 0 会对矩阵 A 的每个元素逐一判定,返回同维度的 logical 类型矩阵,满足条件处为 1(true),不满足为 0(false)。

2. 不等于操作符 ~=
初学者常误写 C 语言风格的 !=(虽然 Octave 做了兼容,但 MATLAB 严格不支持)。为了跨平台通用性,必须规范使用波浪线等号 ~=。

3. 逻辑数组的运算
逻辑掩码可直接当做数值参与加减(如 sum(A > 0) 统计正数个数)。

完整程序

% Octave / MATLAB 第33题:关系运算符生成逻辑掩码
A = [-2,  0,  5;
      3, -1,  0];

mask_gt = (A > 0);   % 大于 0 掩码
mask_eq = (A == 0);  % 等于 0 掩码
mask_ne = (A ~= 0);  % 不等于 0 掩码 (规范写作 ~=)

fprintf("原矩阵 A:\n");
disp(A);
fprintf("逻辑掩码 A > 0 (正数位置):\n");
disp(mask_gt);
fprintf("逻辑掩码 A == 0 (零位置):\n");
disp(mask_eq);
fprintf("正数总个数 sum(A(:) > 0) = %d\n", sum(A(:) > 0));

运行示例

输出:

原矩阵 A:
  -2   0   5
   3  -1   0
逻辑掩码 A > 0 (正数位置):
  0  0  1
  1  0  0
逻辑掩码 A == 0 (零位置):
  0  1  0
  0  0  1
正数总个数 sum(A(:) > 0) = 2