Символ /
- это матричный оператор деления справа в MATLAB, который вызывает функцию mrdivide
. Из документации, матричное правое деление связано с матричным левым делением следующим образом:
B/A = (A'\B')'
Если A
- квадратная матрица, B/A
примерно равен B*inv(A)
(хотя он вычисляется другим, более надежным способом). В противном случае x = B/A
является решением в смысле наименьших квадратов недооцененной или переопределенной системы уравнений x*A = B
. Более подробно об алгоритмах, используемых для решения системы уравнений, дано здесь . Обычно пакеты типа LAPACK или BLAS используются под капотом.
Пакет NumPy для Python содержит подпрограмму lstsq
для вычисления решения методом наименьших квадратов для системы уравнений. Эта процедура, скорее всего, даст вам сравнимые результаты с использованием функции mrdivide
в MATLAB, но вряд ли она будет точной . Любые различия в базовых алгоритмах, используемых каждой функцией, вероятно, приведут к ответам, которые немного отличаются друг от друга (то есть один может возвращать значение 1,0, тогда как другой может возвращать значение 0,999). Относительный размер этой ошибки может оказаться больше, в значительной степени зависящей от конкретной системы уравнений, которую вы решаете.
Чтобы использовать lstsq
, возможно, вам придется немного скорректировать проблему. Похоже, что вы хотите решить уравнение вида cB = a , где B - 25 на 18, a - 1 на 18 и c - 1 на 25. Применение транспонирования к обеим сторонам дает уравнение B T c T = a T , которое более стандартная форма (то есть Ax = b ). Аргументы для lstsq
должны быть (в этом порядке) B T (массив 18 на 25) и a T (массив из 18 элементов). lstsq
должен возвращать массив из 25 элементов ( c T ).
Примечание: хотя NumPy не делает различий между массивом 1 на N или N на 1, MATLAB, безусловно, делает, и будет кричать на вас, если вы не используете правильный.