Только если вам явно нужна обратная матрица, вы используете inv()
, в противном случае используйте оператор обратной косой черты \
.
В документации на inv()
прямо указано:
x = A\b
вычисляется иначе, чем x = inv(A)*b
, и рекомендуется для решения систем линейных уравнений.
Это связано с тем, что оператор обратной косой черты или mldivide()
использует любой метод, наиболее подходящий для ваша конкретная матрица:
x = A\B
решает систему линейных уравнений A*x = B
. Матрицы A
и B
должны иметь одинаковое количество строк. MATLAB® отображает предупреждающее сообщение, если A
плохо масштабируется или почти единственное число, но выполняет вычисление независимо.
Чтобы вы знали, какой алгоритм выбирает MATLAB в зависимости от ваших входных матриц, вот полная блок-схема алгоритма, как указано в их документации.
Универсальность mldivide
в решении линейных систем проистекает из его способности использовать преимущества симметрии в задаче путем отправки к соответствующему решателю. Этот подход направлен на минимизацию времени вычислений. Первое различие, которое делает функция, - это полные (также называемые плотными) и разреженные входные массивы.
![введите описание изображения здесь](https://i.stack.imgur.com/Z5hLA.png)
В качестве примечания об ошибке порядка величины 10^(-12)
, помимо вышеупомянутой неточности функции inv()
, существует точность с плавающей запятой. Этот пост о проблемах MATLAB довольно информативен, с более общим постом по информатике на нем здесь. В принципе, если вы вычисляете числа, не беспокойтесь (по крайней мере, слишком сильно) об ошибках, которые на 12 порядков меньше.
person
Adriaan
schedule
22.03.2016