exponenta event banner

linsolve

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

Описание

пример

X = linsolve(A,B) решает линейную систему AX = 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 появляется в системе линейных уравнений слева как AX = B. Количество строк в A должно равняться количеству строк в B.

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

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

Входной массив, заданный как вектор или матрица. B появляется в системе линейных уравнений справа как AX = 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

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

свернуть все

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

  • Если A является mоколо-n и B является mоколо-k, то X является nоколо-k и является решением для AX = B.

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

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

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

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

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

Совет

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

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

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