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
, т.е. пробела решения однородной системы.
Каждое решение имеет форму (r ≤ n) с определенными скалярами 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 матричного уравнения A X = B, если это имеет точно одно решение. В противном случае пустой список []
возвращен.
Векторный b
и матричный B
соответственно, преобразованы в доменный Dom::Matrix
(R)
, где R
является звонком компонента A
. Векторы решения также принадлежат этой области.
Звонок компонента A
должен быть интегральной областью, т.е. областью категории Cat::IntegralDomain
.
linalg::matlinsolve
может вычислить общее решение для систем больше чем с одним решением только по полям, т.е. звонкам компонента категории Cat::Field
. Если в этом случае звонок компонента A
не имеет канонического представления нулевого элемента, то это может произойти, что linalg::matlinsolve
не находит базис для ядра. В таком случае возвращен неправильный результат.
linalg::matlinsolve
действительно использует разреженную структуру A
. (Матрица разреженна, если она имеет много нулевых компонентов). Смотрите Пример 5.
Используйте функциональный numeric::matlinsolve
, чтобы решить линейную систему численно.
Решите линейную систему:
по реалам. Во-первых, введите матрицу коэффициентов и правую сторону:
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
Система:
не имеет решения по ℝ (на самом деле, ни по какой области компонента):
MatR := Dom::Matrix(Dom::Real): A := MatR([[1, 2], [-1, -2]]): b := MatR([1, 0]): linalg::matlinsolve(A, b)
Решите линейную систему:
по рациональным числам. Во-первых, введите матрицу коэффициентов и правую сторону:
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.
Если линейная система дана в форме уравнений, функциональный 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)
Рассмотрите систему линейных уравнений с разреженной структурой, то есть, матрица коэффициентов имеет много нулевых компонентов:
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
преобразовывает входные данные в числа с плавающей запятой.
Проверяйте ли матричное уравнение
имеет уникальное решение по целым числам.
Запустите путем ввода матрицы коэффициентов и матрицы правой стороны:
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
Если вы используете опцию 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)
Решите эту систему:
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)
|
m ×n матрица области категории |
|
m ×k матрица области категории |
|
m- вектор-столбец, т.е. m ×1 матрица области категории |
|
Список элементов n звонка компонента |
|
Опция, заданная как Возвратите нормированные результаты. Значением По умолчанию Чтобы избежать этого дополнительного вызова, задайте |
|
Возвратите информацию о внутренних предположениях, что С Когда Исключение Гаусса производит уравнение |
|
Только одно конкретное решение |
|
Проверки, имеет ли система уникальное решение и возвращает его. |
Без 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).