linsolve

Решает линейную систему уравнений

Описание

пример

X = linsolve(A,B) решает линейную систему A X = B с помощью одного из следующих методов:

  • Когда A является квадратным, linsolve использует LU-факторизацию с частичным поворотом.

  • Для всех других случаев, linsolve использует QR-факторизацию с поворотом столбца.

linsolve предупреждает, если A плохо обусловлен (для квадратных матриц) или имеет дефицит ранга (для прямоугольных матриц).

пример

X = linsolve(A,B,opts) использует соответствующий решатель, определяемый структурой опций opts. Поля в opts являются логическими значениями, описывающими свойства матрицы A. Для примера, если A является верхней треугольной матрицей, можно задать opts.UT = true сделать linsolve использовать решатель, предназначенный для верхних треугольных матриц. linsolve не тестирует, чтобы проверить, что A имеет свойства, указанные в opts.

пример

[X,r] = linsolve(___) также возвращается r, что является взаимностью числа обусловленности A (для квадратных матриц) или ранга A (для прямоугольных матриц). Можно использовать любой из комбинаций входных аргументов в предыдущих синтаксисах. С этим синтаксисом, linsolve не предупреждает, если A является плохо обусловленным или имеет неполный ранг.

Примеры

свернуть все

Решить линейную систему с обеими mldivide и linsolve для сравнения эффективности.

mldivide является рекомендуемым способом решения большинства линейных систем уравнений в MATLAB ®. Однако функция выполняет несколько проверок матрицы входа, чтобы определить, имеет ли она какие-либо специальные свойства. Если вы знаете о свойствах матрицы коэффициентов раньше времени, то можно использовать linsolve чтобы избежать длительных проверок для больших матриц.

Создайте магическую квадратную матрицу 10000 на 10000 и извлеките нижний треугольный фрагмент. Установите LT поле opts структура, к true чтобы указать, что A является нижней треугольной матрицей.

A = tril(magic(1e4));
opts.LT = true;

Создайте вектор из них для правой стороны линейного уравнения Ax=b. Количество строк в A и b должно быть равным.

b = ones(size(A,2),1);

Решить линейную систему Ax=b использование mldivide и время вычисления.

tic
x1 = A\b; 
t1 = toc
t1 = 0.0955

Теперь снова решите систему, используя linsolve. Задайте структуру опций так, чтобы linsolve может выбрать подходящий решатель для нижней треугольной матрицы.

tic
x2 = linsolve(A,b,opts);
t2 = toc
t2 = 0.0244

Сравните времена выполнения, чтобы увидеть, насколько быстрее linsolve является. Как и при любом сравнении временных параметров, результаты могут варьироваться между различными компьютерами и релизами MATLAB.

speedup = t1/t2
speedup = 3.9078

Решить линейную систему можно используя команду linsolve с двумя выходами, чтобы подавить предупреждения обусловленности матрицы.

Создайте тестовую матрицу Гильберта 20 на 20. Эта матрица почти сингулярна, с наибольшим сингулярным значением около 2e18 больше, чем наименьший.

A = hilb(20);

Решите линейную систему с A с linsolve. Начиная с A почти сингулярна, linsolve возвращает предупреждение.

b = ones(20,1);
x = linsolve(A,b);
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  1.351364e-19.

Теперь решите ту же линейную систему, но задайте два выхода, чтобы linsolve. MATLAB ® подавляет предупреждение и второй выход r содержит взаимное число обусловленности A. Можно использовать этот синтаксис, чтобы обрабатывать плохо обусловленные матрицы со специальными случаями в коде, без выдачи кода предупреждения.

[x,r] = linsolve(A,b)
x = 20×1
109 ×

    0.0000
   -0.0000
    0.0001
   -0.0014
    0.0126
   -0.0613
    0.1555
   -0.1083
   -0.4672
    1.3358
      ⋮

r = 1.3514e-19

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

свернуть все

Матрица коэффициентов. A появляется в системе линейных уравнений слева как A X = B. Количество строк в A должно равняться количеству строк в B.

A не может быть разреженным. Чтобы решить линейную систему с разреженной матрицей, используйте mldivide или decomposition вместо этого.

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

Входной массив, заданный как вектор или матрица. B появляется в системе линейных уравнений справа как A X = B. Если B является матрицей, тогда каждый столбец матрицы представляет другой вектор для правой оси.

Количество строк в A должно равняться количеству строк в B.

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

Свойства матрицы коэффициентов, заданные как структура. Используйте эту структуру для задания свойств A это linsolve используется для выбора подходящего решателя для линейной системы. Поля в структуре содержат true/ false значения, указывающие, A имеет каждое свойство. По умолчанию все поля в структуре считаются false. В этой таблице перечислены возможные поля в opts и их соответствующие матричные свойства.

ОбластьСвойство матрицы

LT

Нижний треугольный (ненулевые значения, появляющиеся только на или ниже основной диагонали)

UT

Верхний треугольный (ненулевые значения, появляющиеся только на основной диагонали или выше нее)

UHESS

Верхний Гессенберг (все нулевые значения ниже первой поддиагонали)

SYM

Действительный симметричный или комплексный Эрмитов (матрица, равная его транспонированию)

POSDEF

Положительно определено (все положительные собственные значения)

RECT

Прямоугольная матрица (разное количество строк и столбцов)

TRANSA

Сопряженное транспонирование - Определяет, решает ли функция A*X = B (когда opts.TRANSA = false) или транспонированная проблема A'*X = B (когда opts.TRANSA = true)

Пример: opts.UT = true задает, что A является верхним треугольным.

Пример: opts.SYM = true, opts.POSDEF = true устанавливает два поля, чтобы указать, что A симметричен и положительно определен.

Допустимые комбинации

В строках этой таблицы перечислены все комбинации значений полей в opts которые действительны для linsolve. Пустые камеры являются значением по умолчанию false, и true/ false запись указывает, что linsolve принимает любое значение.

 

LT

UT

UHESS

SYM

POSDEF

RECT

TRANSA

A является нижним треугольным

true

    

true/ false

true/ false

A является верхним треугольным

 

true

   

true/ false

true/ false

A является верхним Гессенбергом

  

true

   

true/ false

A симметрично

   

true

true/ false

 

true/ false

A прямоугольный

     

true/ false

true/ false

Примечания по использованию

  • Если A имеет свойства в opts, затем linsolve быстрее по сравнению с mldivide, потому что linsolve немедленно вызывает соответствующий решатель и не выполняет никаких тестов, чтобы проверить, что A имеет заданные свойства.

  • Если A не имеет свойств, заданных в opts, затем linsolve возвращает неправильные результаты и не возвращает сообщение об ошибке. Поэтому, если вы не уверены, A ли имеет заданные свойства, использование mldivide или decomposition вместо этого.

Типы данных: struct

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

свернуть все

Решение линейной системы, возвращаемое как вектор или матрица, которая удовлетворяет A X = B (или ATX = B, если opts.TRANSA = true). Размер X зависит от того, opts.TRANSA = true:

  • Если A является m-by- n и B является m-by- k, затем X является n-by- k и является решением проблемы A X = B.

  • Если opts.TRANSA = true, затем A является m-by- n и B является n-by- k. В этом случае X является m-by- k и является ли решение ATX = B.

Обратное число обусловленности или ранг, возвращенный как скаляр.

  • Если A является квадратной матрицей, тогда r - обратное число обусловленности A.

  • Если A - прямоугольная матрица, затем r - ранг A.

  • Если opts задается, затем r - обратное число обусловленности A если только RECT является true и то и другое LT и UT являются false, в каком случае, r дает ранг A.

Совет

  • Преимущества скорости linsolve может варьироваться в зависимости от матричной структуры и относительной оптимизации базовых алгоритмов. В некоторых случаях (таких как с маленькими матрицами) может не быть никакой скорости по сравнению с mldivide. Преимущество скорости с linsolve возникает путем избежания дорогостоящих проверок свойств больших матриц или путем выбора алгоритма, который лучше подходит для входа, чем выбор, который mldivide делает.

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

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