inv(A)*B vs A\B - Почему такое странное поведение в MatLab?

Создадим две случайные матрицы,

A = randn(2)
B = randn(2)

и inv(A)*B, и A\B дают одинаковый результат

inv(A)*B
A\B

ans =

    0.6175   -2.1988
   -0.7522    5.0343

ans =

    0.6175   -2.1988
   -0.7522    5.0343

если только я не умножу на какой-то коэффициент. Почему это?

.5*A\B
.5*inv(A)*B

ans =

    1.2349   -4.3977
   -1.5045   10.0685

ans =

    0.3087   -1.0994
   -0.3761    2.5171

Это очень раздражает, так как MatLab всегда подталкивает меня использовать A\B вместо inv(A)*B, и мне потребовались годы, чтобы понять, почему мой код не работает.


person stollenm    schedule 26.05.2020    source источник
comment
0,5*(А\В) !! Вы делаете (0,5*A)\B!   -  person Ander Biguri    schedule 26.05.2020
comment
Для справки: mathworks.com/help/matlab/matlab_prog/operator-precedence .html . Обратите внимание, что на каждом уровне приоритета операторы имеют одинаковый приоритет и оцениваются слева направо.   -  person Cris Luengo    schedule 27.05.2020


Ответы (1)


Когда A является невырожденной матрицей, тогда inv(A) * B = A \ B.

Ваш расчет выглядит следующим образом: .5 * A\B = (0.5 * A) \ B против .5* inv(A) * B = 0.5 * (A\B) . Таким образом, это даст вам неравный результат.

person Jaden    schedule 26.05.2020