Решение систем линейных уравнений
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.