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. (Матрица разреженна, если она имеет много нулевых компонентов). Смотрите Пример 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).