linsolve

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

Синтаксис

X = linsolve (A, B)
X = linsolve (A, B, opts)

Описание

X = linsolve (A, B) решает линейную систему A * X = B, используя LU-факторизацию с частичным поворотом, когда A является квадратным и QR-факторизация с поворотом столбца в противном случае. Количество строк равняется количеству строк B. Если A является m на n, и B является m-by-k, то X n-by-k. linsolve, возвращает предупреждение, если A является квадратным и плохой обусловленный или если это не является квадратным и неполный ранг.

[X, R] = linsolve(A,B) подавляет эти предупреждения и возвращает R, который является обратной величиной количества условия A, если A является квадратным, или ранг A, если A не является квадратным.

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

Примечания

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

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

Поле TRANSA структуры opts задает форму линейной системы, которую вы хотите решить:

  • Если вы устанавливаете opts.TRANSA = false, linsolve(A,B,opts) решает A*X = B.

  • Если вы устанавливаете opts.TRANSA = true, linsolve(A,B,opts) решает A'*X = B.

В следующей таблице перечислены все поле opts и их соответствующих матричных свойств. Значениями полей opts должен быть logical, и значением по умолчанию для всех полей является false.

Имя поля

Матричное свойство

&lt

Нижняя треугольная

UT

Верхняя треугольная

UHESS

Верхний Hessenberg

SYM

Реальные симметричные или комплексные эрмитовы

POSDEF

Положительный определенный

RECT

Общий прямоугольный

TRANSA

Сопряженное транспонирование — задает, решает ли функция A*X = B или A'*X = B

В следующей таблице перечислены все комбинации значений полей в opts, которые допустимы для linsolve. Истинная/ложная запись указывает, что linsolve принимает любой TRUE или FALSE.

&lt

UT

UHESS

SYM

POSDEF

RECT

TRANSA

tRUE

ложь

ложь

ложь

ложь

true/false

true/false

ложь

tRUE

ложь

ложь

ложь

true/false

true/false

ложь

ложь

tRUE

ложь

ложь

ложь

true/false

ложь

ложь

ложь

tRUE

true/false

ложь

true/false

ложь

ложь

ложь

ложь

ложь

true/false

true/false

Примеры

Следующий код решает систему A'x = b для верхней треугольной матрицы A с помощью и mldivide и linsolve.

A = triu(rand(5,3)); x = [1 1 1 0 0]'; b = A'*x;
y1 = (A')\b         
opts.UT = true; opts.TRANSA = true;
y2 = linsolve(A,b,opts)

y1 =

    1.0000
    1.0000
    1.0000
         0
         0


y2 =

    1.0000
    1.0000
    1.0000
         0
         0

Примечание

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

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

Смотрите также

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

Была ли эта тема полезной?