mldivide, \

Решите системы линейных уравнений Ax = B для x

Синтаксис

x = A\B
x = mldivide(A,B)

Описание

пример

x = A\B решает систему линейных уравнений A*x = B. Матрицы A и B должны иметь одинаковое число строк. MATLAB® отображает предупреждающее сообщение, если A плохо масштабируется или почти сингулярный, но выполняет вычисление независимо.

  • Если A является скаляром, то A\B эквивалентен A.\B.

  • Если A - квадратная n-на-n матрица, а B - матрица с n строками, то x = A \ B является решением уравнения A * x = B, если оно существует.

  • Если A является прямоугольный m-by-n матрица с m ~= n, и B является матрицей со строками m, то A \B возвращает решение методом наименьших квадратов в систему уравнений A*x= B.

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

Примеры

свернуть все

Решите простую систему линейных уравнений, A*x = B.

A = magic(3);
B = [15; 15; 15];
x = A\B
x = 3×1

    1.0000
    1.0000
    1.0000

Решить линейную систему уравнений A * x = b с сингулярной матрицей A.

A = magic(4);
b = [34; 34; 34; 34];
x = A\b
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.306145e-17.
x = 4×1

    1.5000
    2.5000
   -0.5000
    0.5000

Когда rcond находится между 0 и eps, MATLAB® выдает предупреждение о сингулярности, но продолжает вычислять. При работе с плохо обусловленными матрицами может возникнуть ненадежное решение, хотя невязка (b-A * x) относительно небольшая. В этом конкретном примере норма невязки является нулем, и точное решение получено, несмотря на то, что rcond является маленьким.

Когда rcond равно 0, появляется предупреждение о сингулярности.

A = [1 0; 0 0];
b = [1; 1];
x = A\b
Warning: Matrix is singular to working precision.
x = 2×1

     1
   Inf

В этом случае деление на нуль приводит к вычислениям с Inf и/или NaN, делая вычисленный результат ненадежным.

Решите систему линейных уравнений, A*x = b.

A = [1 2 0; 0 4 3];
b = [8; 18];
x = A\b
x = 3×1

         0
    4.0000
    0.6667

Решите простую систему линейных уравнений с помощью разреженных матриц.

Считайте матричное уравнение A*x = B.

A = sparse([0 2 0 1 0; 4 -1 -1 0 0; 0 0 0 3 -6; -2 0 0 0 2; 0 0 4 2 0]);
B = sparse([8; -1; -18; 8; 20]);
x = A\B
x = 
   (1,1)       1.0000
   (2,1)       2.0000
   (3,1)       3.0000
   (4,1)       4.0000
   (5,1)       5.0000

Входные параметры

свернуть все

Матрица коэффициентов, заданная как вектор, полная матрица или разреженная матрица. Если A имеет строки m, то B должен иметь строки m.

Типы данных: single | double | logical
Поддержка комплексного числа: Да

Правая сторона, заданная как вектор, полная матрица или разреженная матрица. Если B имеет строки m, то A должен иметь строки m.

Типы данных: single | double | logical
Поддержка комплексного числа: Да

Выходные аргументы

свернуть все

Решение, возвращенное как вектор, полная матрица или разреженная матрица. Если A является m-by-n матрица, и B является m-by-p матрица, то x является n-by-p матрица, включая случай когда p==1.

Если A - полная матрица, x также полно. Если A разрежен, то x имеет то же устройство хранения данных как B.

Советы

  • Операторы / и \ связаны друг с другом уравнением B/A = (A'\B')'.

  • Если A является квадратной матрицей, то A\B примерно равен inv(A)*B, но процессам MATLAB A\B по-другому и более надежно.

  • Если ранг A является меньше, чем количество столбцов в A, то x = A\B является не обязательно минимальным решением для нормы. Можно вычислить минимальное решение методом наименьших квадратов нормы с помощью x = lsqminnorm(A,B) или x = pinv(A)*B.

Алгоритмы

свернуть все

Универсальность mldivide в решении линейных систем происходит от своей способности использовать в своих интересах симметрии в проблеме путем диспетчеризации соответствующему решателю. Этот подход стремится минимизировать время вычисления. Первое различие, которое делает функция, между полным (также названо “плотным”) и разреженными входными массивами.

Алгоритм для полных вводов

Блок-схема ниже показов путь к алгоритму, когда входные параметры A и B полны.

Алгоритм для разреженных вводов

Если A полон, и B разрежен затем, mldivide преобразовывает B в полную матрицу и использует весь путь к алгоритму (выше), чтобы вычислить решение с полным устройством хранения данных. Если A разрежен, устройство хранения данных решения, x совпадает с x B, и mldivide следует за путем к алгоритму для разреженных входных параметров, показанных ниже.

Расширенные возможности

Представлено до R2006a