Вы получите не неправильный ответ. Действительно, сравнивая исходную b
с восстановленной br
...
A
# array([[7.03894408e+00, 1.34629120e+10, 2.00000000e+10, 1.14564392e+10,
# 1.82002747e+10, 1.73205081e+10],
# [1.34629120e+10, 7.03894408e+00, 1.82002747e+10, 2.00000000e+10,
# 2.23606798e+10, 2.07665597e+10],
# [2.00000000e+10, 1.82002747e+10, 7.03894408e+00, 1.67705098e+10,
# 1.67705098e+10, 2.23606798e+10],
# [1.14564392e+10, 2.00000000e+10, 1.67705098e+10, 7.03894408e+00,
# 1.73205081e+10, 1.34629120e+10],
# [1.82002747e+10, 2.23606798e+10, 1.67705098e+10, 1.73205081e+10,
# 7.03894408e+00, 1.95256242e+10],
# [1.73205081e+10, 2.07665597e+10, 2.23606798e+10, 1.34629120e+10,
# 1.95256242e+10, 7.03894408e+00]])
b
# array([5.49316406e+42, 9.62786249e+22, 5.49316406e+42, 8.66507624e+23,
# 1.38770661e+25, 7.66220239e+24])
br = A@np.linalg.solve(A,b)
abserr = np.sqrt((br-b)@(br-b))
relerr = abserr / np.sqrt(b@b)
relerr
# 4.914258035606803e-16
... мы получаем относительную ошибку, примерно в 2,2 раза превышающую точность станка ...
np.finfo(float).eps
# 2.220446049250313e-16
... что на самом деле довольно точно.