Решение систем линейных уравнений
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
.
Имя поля | Матричное свойство |
---|---|
| Нижняя треугольная |
| Верхняя треугольная |
| Верхний Hessenberg |
| Реальные симметричные или комплексные эрмитовы |
| Положительный определенный |
| Общий прямоугольный |
| Сопряженное транспонирование — задает, решает ли функция |
В следующей таблице перечислены все комбинации значений полей в opts
, которые допустимы для linsolve
. Истинная/ложная запись указывает, что linsolve
принимает любой TRUE или FALSE.
< | UT | UHESS | SYM | POSDEF | RECT | TRANSA |
---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Следующий код решает систему 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
.