MATLAB上为什么验证不了矩阵的基本运算

MATLAB矩阵运算上出了点问题。
按照道理来讲,在两个矩阵为同阶方阵的时候,A矩阵除以B矩阵应该等于A矩阵乘以B矩阵的逆(A和B均为可逆矩阵)
我就试着想在MATLAB上演示一下。
1 随意设置了矩阵A和B
2 通过inv(B)的方式得出B可逆且逆矩阵如图所示。
3 分别算了A/B和Ainv(B)的值,发现他们一样。
4 利用==希望得到logical下的三阶单位矩阵eye(3)
5 得到了一个非零非单位的矩阵
但按理来讲,如果A/B和inv(B)相等的话应该在logical下能看到单位矩阵来表明这个是1,是true的。就算这两个不等,也应该得到的是一个三阶零矩阵才对。我甚至在这之前用A
inv(B)==eye(3)证实过,这个等式得到的就是个三阶单位矩阵。不知道这是为什么,求各位大蝶救我一命(哭泣)自学真的摸不着头脑。

img

img

img

img

【以下回答由 GPT 生成】

回答:

在MATLAB中,由于计算机对浮点数的精度问题,可能会导致通过比较操作符"=="得到的结果与预期的不一致。这是因为计算机在进行浮点数计算时会有舍入误差,导致数字并非完全精确。

为了解决这个问题,我们可以使用MATLAB提供的近似相等比较函数isequal或者指定一个容差范围来比较两个矩阵的相等性。下面是一个可以解决你问题的示例代码:

% 设定矩阵 A 和 B
A = [1 2 3; 4 5 6; 7 8 9];
B = [9 8 7; 6 5 4; 3 2 1];

% 计算 B 的逆矩阵
inv_B = inv(B);

% 计算 A/B 和 A*inv(B)
result1 = A/B;
result2 = A*inv_B;

% 使用 isequal 函数比较两个结果是否近似相等
isEqual = isequal(result1, result2);  % 结果应为 true

% 或者我们可以指定一个容差范围来比较两个矩阵的相等性
tolerance = 1e-10;  % 容差范围,可以根据具体情况进行调整
isEqual = max(abs(result1(:) - result2(:))) <= tolerance;

% 对结果进行逻辑判断,判断是否接近单位矩阵
isIdentityMatrix = isequal(result1, eye(3))  % 结果应为 true

% 如果你想比较两个矩阵是否完全相等,可以直接使用 "==" 进行比较,但要注意浮点数精度问题
isExactEqual = result1 == eye(3)  % 结果可能不完全相等,取决于浮点数精度

% 因为浮点数精度问题,即使结果不完全相等,我们可以使用容差范围来判断是否近似相等
isApproxEqual = max(abs(result1(:) - eye(3)(:))) <= tolerance

通过上述代码,我们可以比较两个矩阵的近似相等性,并且考虑了浮点数精度问题。这样可以避免在比较操作中得到意外的结果。希望这能解决你在MATLAB中验证矩阵基本运算中遇到的问题。如果还有其他疑问,请随时追问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^