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.1052

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

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

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

speedup = t1/t2
speedup = 2.6459

Решите линейную систему с помощью 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ложь значения, чтобы указать, ли 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ложь запись указывает на тот linsolve принимает любое значение.

 

LT

UT

UHESS

SYM

POSDEF

RECT

TRANSA

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

true

    

trueложь

trueложь

A верхний треугольный

 

true

   

trueложь

trueложь

A верхний Hessenberg

  

true

   

trueложь

A issymmetric

   

true

trueложь

 

trueложь

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

     

trueложь

trueложь

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

  • Если 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- n и B m- k, затем X n- k и решение A X = B.

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

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

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

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

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

Советы

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

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

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