linalg::matlinsolve

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

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразуют Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

linalg::matlinsolve(A, b, <list>, options)
linalg::matlinsolve(A, B, options)
linalg::matlinsolve(A, options)

Описание

linalg::matlinsolve(A, b) вычисляет общее решение уравнения.

linalg::matlinsolve(A, b) возвращает вектор решения системы, если это - уникальное решение.

linalg::matlinsolve(A, b) возвращает список, если система имеет больше чем одно решение, где одно конкретное решение, т.е. и сформируйте основание ядра A, т.е. пробел решения однородной системы.

Каждое решение имеет форму (rn) с определенными скалярами s 1, …, s r.

Список скаляров n [s 1, …, s n] может быть передан как дополнительный параметр list. Это извлекает решение с из пробела решения системы, где j 1, …, j l является характеристическими индексами столбца A (см. linalg::gaussJordan).

Записи list преобразованы в элементы звонка компонента A (сообщение об ошибке возвращено, если это не возможно).

Примечание

Эта опция должна только использоваться в точных и символьных расчетах. В случае, что A или b содержит записи с плавающей точкой, это не должно использоваться.

Если система не имеет никакого решения, то пустой список [] возвращен.

linalg::matlinsolve(A) решает матричное уравнение, где последний столбец A и C является A с последним удаленным столбцом.

linalg::matlinsolve(A, B) возвращает решение X матричного уравнения AX = B, если это имеет точно одно решение. В противном случае пустой список [] возвращен.

Векторный b и матричный B соответственно, преобразованы в доменный Dom::Matrix(R), где R звонок компонента A. Векторы решения также принадлежат этой области.

Звонок компонента A должна быть интегральная область, т.е. область категории Cat::IntegralDomain.

linalg::matlinsolve может вычислить общее решение для систем больше чем с одним решением только по полям, т.е. звонкам компонента категории Cat::Field. Если в этом случае звонок компонента A не имеет канонического представления нулевого элемента, затем это может произойти тот linalg::matlinsolve не находит базис для ядра. В таком случае возвращен неправильный результат.

linalg::matlinsolve действительно использует разреженную структуру A. (Матрица A разреженна, если она имеет много нулевых компонентов). Смотрите Пример 5.

Используйте функциональный numeric::matlinsolve решить линейную систему численно.

Примеры

Пример 1

Решите линейную систему:

по реалам. Во-первых, введите матрицу коэффициентов и правую сторону:

MatR := Dom::Matrix(Dom::Real):
A := MatR([[1, 2], [-1, 2]]); b := MatR([1, -1])

Затем вызовите linalg::matlinsolve решить систему:

x := linalg::matlinsolve(A, b)

Система имеет точно одно решение. Векторный x удовлетворяет матричному уравнению, данному выше:

A * x

Пример 2

Система:

не имеет решения по (на самом деле, ни по какой области компонента):

MatR := Dom::Matrix(Dom::Real):
A := MatR([[1, 2], [-1, -2]]): b := MatR([1, 0]):
linalg::matlinsolve(A, b)

Пример 3

Решите линейную систему:

по рациональным числам. Во-первых, введите матрицу коэффициентов и правую сторону:

MatQ := Dom::Matrix(Dom::Rational):
A := MatQ([[1, 1, -4, -7, -6], [0, 1, -3, -5, -7]]);
b := MatQ([30, 17])

Затем вызовите linalg::matlinsolve решить систему:

sol:= linalg::matlinsolve(A, b)

Результат состоит в том, чтобы быть интерпретирован можно следующим образом: первый вектор списка sol конкретное решение линейной системы:

A * sol[1]

Вторая запись списка содержит базис для ядра A, т.е. пробел решения соответствующей однородной системы (ядро A). Возвращенное основание дано как список векторов.

Следующий вход проверяет этот факт путем вычисления продукта для каждого вектора списка sol[2]:

map(sol[2], x -> A * x)

Любое решение линейной системы может быть представлено как сумма конкретного решения (здесь: sol[1]) и линейная комбинация базисных векторов ядра A. Следовательно входная система имеет бесконечное число решений.

Например, другим решением системы дают:

x := sol[1] + 1*sol[2][1] + 1/2*sol[2][2] - 2*sol[2][3]

A * x

Если вы идентифицируете столбцы матрицы коэффициентов A линейной системы с переменными x 1, x 2, x 3, x 4, x 5, то вы видите из общего решения что переменные x 3, x 4, x 5 действий как свободные параметры. Они могут быть присвоены произвольные рациональные значения, чтобы получить уникальное решение.

Путем предоставления списка значений для этих переменных как третий параметр к linalg::matlinsolve, можно выбрать определенный вектор из набора всех решений линейной системы. Например, чтобы выбрать тот же векторный x как выбрано в предыдущем входе, введите:

linalg::matlinsolve(A, b, [0, 0, 1, 1/2, -2])

Если вы только интересуетесь конкретным решением и не нуждаетесь в общем решении линейной системы, введите:

linalg::matlinsolve(A, b, Special)

Этот вызов подавляет расчет ядра A.

Пример 4

Если линейная система дана в форме уравнений функциональный linalg::expr2Matrix может использоваться, чтобы сформировать соответствующее матричное уравнение:

delete x, y, z:
Ab := linalg::expr2Matrix(
  [x + y + z = 6, 2*x + y + 2*z = 10, x + 3*y + z = 10]
)

Результатом здесь является расширенная матрица коэффициентов входной системы, то есть, вектор правой стороны является 4-м вектор-столбцом матричного Ab. Поскольку вы не задавали звонок компонента для этой матрицы, стандартный звонок компонента для матриц, доменного Dom::ExpressionField(), был выбран.

Чтобы решить линейную систему, вызовите:

linalg::matlinsolve(Ab)

Система имеет бесконечное число решений. Третьи действия переменной z как свободный параметр и поэтому могут иметь любое (комплексное) значение.

Чтобы получить общее решение в форме параметра, можно использовать параметры в переменных x, y, z входной системы:

delete u, v, w:
sol := linalg::matlinsolve(Ab, [u, v, w])

Это возможно здесь, потому что вы выполняете матричные расчеты по Dom::ExpressionField() который позволяет вам вычислить с символическими (арифметическими) выражениями.

Выбрать определенный вектор из набора решений, например, решения для w = 1, введите:

x := subs(sol, w = 1)

Пример 5

Рассмотрите систему линейных уравнений с разреженной структурой, то есть, матрица коэффициентов имеет много нулевых компонентов:

eqs := {x1 + x5 = 0, x2 - x4 = 1, x3 + 2*x5 = 2, x4 - x5 = -1}:
Ab := linalg::expr2Matrix(eqs, [x1, x2, x3, x4, x5])

linalg::matlinsolve использует разреженность матрицы коэффициентов, если это передается как матрица типа Dom::Matrix. В качестве альтернативы можно использовать функциональный linsolve который позволяет разреженный ввод и вывод через символьные уравнения:

linsolve(eqs)

Также можно использовать функциональный numeric::matlinsolve с опцией Symbolic вместо linalg::matlinsolve:

A := linalg::delCol(Ab, 6):
b := linalg::col(Ab, 6):
numeric::matlinsolve(A, b, Symbolic)

Обратите внимание на то, что функциональный numeric::matlinsolve всегда перерабатывает подполе комплексных чисел и не позволяет вам задать область расчета. Без опции Symbolic, numeric::matlinsolve преобразует входные данные в числа с плавающей запятой.

Пример 6

Проверяйте ли матричное уравнение

имеет уникальное решение по целым числам.

Запустите путем ввода матрицы коэффициентов и матрицы правой стороны:

MatZ := Dom::Matrix(Dom::Integer):
A := MatZ([[1, 2], [-2, 3]]); B := MatZ([[4, 2], [6, 3]])

Затем решите матричное уравнение:

X := linalg::matlinsolve(A, B)

Уравнение действительно имеет уникальное решение (в противном случае ответ linalg::matlinsolve был бы пустой список []). Проверяйте результат:

A * X

Пример 7

Если вы используете Normal опция, linalg::matlinsolve вызывает normal функция для конечных результатов. Этот вызов гарантирует тот linalg::matlinsolve возвращает результаты в нормированной форме:

A := matrix([[1, s], [t, -1]]):
b := matrix([s + 1, t - 1]):
x := linalg::matlinsolve(A, b)

Если вы задаете Normal = FALSE, linalg::matlinsolve не вызывает normal для конечного результата:

x := linalg::matlinsolve(A, b, Normal = FALSE)

Пример 8

Решите эту систему:

A := matrix([[1, s], [1, t]]):
b := matrix([1, 1]):
linalg::matlinsolve(A, b)

Обратите внимание на то, что больше решений существует для t = s. linalg::matlinsolve не использует эти решения, потому что это делает некоторые дополнительные предположения на символьных параметрах этой системы. Видеть предположения что linalg::matlinsolve сделанный при решении этой системы, используйте ShowAssumptions опция:

linalg::matlinsolve(A, b, ShowAssumptions)

Параметры

A

m ×n матрица области категории Cat::Matrix

B

m ×k матрица области категории Cat::Matrix

b

m- вектор-столбец, т.е. m ×1 матрица области категории Cat::Matrix

list

Список элементов n звонка компонента A

Опции

Normal

Опция, заданная как Normal = b

Возвратите нормированные результаты. Значение b должен быть TRUE или FALSE. По умолчанию, Normal = TRUE, значение, что linalg::matlinsolve нормализация гарантий возвращенных результатов. Нормализация результатов может быть в вычислительном отношении дорогой.

По умолчанию, linalg::matlinsolve вызовы normal прежде, чем возвратить результаты. Этот дополнительный внутренний вызов гарантирует, что конечный результат нормирован. Этот вызов может быть в вычислительном отношении дорогим. Эта опция влияет на выход, только если решение содержит переменные или точные выражения, такие как sqrt(5) или sin(PI/7).

Чтобы избежать этого дополнительного вызова, задайте Normal = FALSE. В этом случае, linalg::matlinsolve также может возвратить нормированные результаты, но не гарантирует такой нормализации. Смотрите Пример 7.

ShowAssumptions

Возвратите информацию о внутренних предположениях что linalg::matlinsolve сделанный на символьных параметрах в eqs.

С ShowAssumptions, linalg::matlinsolve возвращает список [S, KernelBasis, Constraints, Pivots]. Списки Constraints и Pivots содержите уравнения и неравенства, вовлекающие символьные параметры в A и b (или B). Внутренне, они были приняты, чтобы сохраняться при решении системы. Смотрите Пример 8.

Когда Исключение Гаусса производит уравнение 0 = c с ненулевым c, linalg::matlinsolve без ShowAssumptions возвращается. Если c включает символьные параметры, попытайтесь использовать linalg::matlinsolve с ShowAssumptions решить такие системы. Если система будет разрешима, вы получите решение. В этом случае, уравнение 0 = c возвращен в Constraints список. Если система не разрешима, linalg::matlinsolve с ShowAssumptions возвращается.

Special

Только одно конкретное решение w из системы возвращен. Это подавляет расчет основания для ядра A.

Unique

Проверки, имеет ли система уникальное решение и возвращает его. Возвращаемое значение NIL средние значения, что система имеет больше чем одно решение.

Возвращаемые значения

Без ShowAssumptions, linalg::matlinsolve может возвратить вектор или список [S, KernelBasis] (возможно пустой), где S вектор решения и KernelBasis список базисных векторов для ядра A. Это также может возвратить матрицу или значение NIL.

Матрица и векторы, соответственно, имеют доменный тип Dom::Matrix(R), где R звонок компонента A.

С ShowAssumptions, linalg::matlinsolve возвращает список [S, KernelBasis, Constraints, Pivots]. Списки Constraints и Pivots содержите уравнения и неравенства, вовлекающие символьные параметры в A и b (или B). Внутренне, они были приняты, чтобы сохраняться при решении системы. Если система не разрешима, linalg::matlinsolve с ShowAssumptions возвращается.

Алгоритмы

Позвольте A быть m ×n матрица с компонентами от поля F и m - размерный вектор по F. Позвольте быть расширенной матрицей коэффициентов линейной системы.

Затем следующее содержит:

  • Линейная система имеет решение, если и только если.

  • Это имеет точно одно решение, если и только если.

  • Если решение системы и основание ядра A, то

    набор всех решений линейной системы, общего решения (неоднородной) линейной системы.

Ядро matrixA задано как:

.

Ядро A является векторным пространством по F размерности n - rank (A).