如何修复高条件数矩阵?

问题描述 投票:0回答:1

这是我的代码:

A = [+0.00, -2.34, -2.25, -2.16, -2.07, -1.98, -1.89, -1.80, -0.72, +0.09, +1.16;
+2.34, +0.00, -3.15, -3.06, -2.97, -2.88, -2.79, -2.70, -1.26, -0.18, +0.98;
+2.25, +3.15, +0.00, -3.96, -3.87, -3.78, -3.69, -3.60, -1.80, -0.45, +0.80;
+2.16, +3.06, +3.96, +0.00, -4.77, -4.68, -4.59, -4.50, -2.34, -0.72, +0.62;
+2.07, +2.97, +3.87, +4.77, +0.00, -5.58, -5.49, -5.40, -2.88, -0.99, +0.44;
+1.98, +2.88, +3.78, +4.68, +5.58, +0.00, -6.39, -6.30, -3.42, -1.26, +0.26;
+1.89, +2.79, +3.69, +4.59, +5.49, +6.39, +0.00, -7.20, -3.96, -1.53, +0.08; 
+1.80, +2.70, +3.60, +4.50, +5.40, +6.30, +7.20, +0.00, -2.00, -1.40, +0.00;
+0.72, +1.26, +1.80, +2.34, +2.88, +3.42, +3.96, +2.00, +0.00, -0.60, -0.24;
-0.09, +0.18, +0.45, +0.72, +0.99, +1.26, +1.53, +1.40, +0.60, +0.00, -0.42;
-1.16, -0.98, -0.80, -0.62, -0.44, -0.26, -0.08, +0.00, +0.24, +0.42, +0.00]


b = [1;1;1;1;1;1;1;1;1;1;1]

x = linsolve(A,b)

disp("Verification: (should be close to b)")
disp(A*x)

我正在尝试找到 Ax = b 的解 x。然而,该解决方案非常不准确,正如 A*x 不接近等于 B 所验证的那样。

代码给出了这个警告: 警告:矩阵接近奇异或缩放严重。结果可能不准确。 RCOND = 4.757657e-19.

据我了解,我的矩阵具有非常高的“条件数”,这意味着它接近不可逆,因此解决方案因舍入误差而发生很大变化,至少我相信。

那么我该如何解决这个问题并获得准确的解决方案x?

matlab matrix floating-point matrix-inverse singular
1个回答
0
投票

我想这个问题已经解决了。我认为矩阵远非不可逆,但实际上是不可逆的。这意味着没有好的解决方案x。我计算了 det(A),它是 -3.3310e-13(实际上可能是 0),但即使将任何值更改 0.01 也会产生一个“好的”行列式和通过验证测试的准确解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.