linsolve

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

Синтаксис

X = linsolve(A,B)
X = linsolve(A,B,opts)
[X,r] = 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.1019

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

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

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

speedup = t1/t2
speedup = 3.2707

Решите линейную систему с помощью 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

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

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 является верхний Hessenberg

  

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 (или A TX = 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 и является решением A TX = B.

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

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

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

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

Советы

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

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

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