linsolve
Решите систему линейных уравнений
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
linsolve(eqs
,options
) linsolve(eqs
,vars
,options
)
linsolve(eqs, vars)
решает систему линейных уравнений относительно неизвестных vars
.
linsolve(eqs, < vars , < ShowAssumptions >>)
решает линейную систему eqs
относительно неизвестных vars
. Если никакие неизвестные не заданы, то linsolve
решает для всего indeterminates в eqs
; неизвестные определяются внутренне indets(eqs,PolyExpr)
.
linsolve(eqs, vars, Domain = R)
решает систему по доменному R
, который должен быть полем, т.е. областью категории Cat::Field
.
Обратите внимание на то, что формат возврата не позволяет возвращать элементы ядра, если элементы доменного R
не могут быть умножены с символьными неизвестными, которые охватывают ядро. В таком случае linsolve
выдает предупреждение и возвращает только специальное решение. Ядро может быть вычислено через linalg::matlinsolve
для любого поля R
.
Каждый элемент eqs
должен быть или уравнением или арифметическим выражением f
, который считается эквивалентным уравнению f = 0
.
Неизвестные в vars
не должны быть идентификаторами или индексированными идентификаторами; выражения, такие как sin(x)
, f(x)
или y^(1/3)
позволены также. В более общем плане любое выражение, принятое как неопределенное poly
, является допустимым неизвестным.
Если опция, которую ShowAssumptions
не дан и система, разрешима, то возвращаемое значение является списком уравнений формы var = value
, где var
является одними из неизвестных в vars
, и value
является арифметическим выражением, которое не включает ни одних из неизвестных на левой стороне возвращенного уравнения. Обратите внимание на то, что, если коллектор решения будет иметь размерность, больше, чем нуль, то некоторые неизвестные в vars
произойдут на правой стороне некоторых возвращенных уравнений, представляя степени свободы. Смотрите Пример 2.
Если vars
является списком, то решенные уравнения возвращены в тот же порядок как неизвестные в vars
.
Функциональный linsolve
может только решить системы линейных уравнений. Используйте solve
для нелинейных уравнений.
linsolve
является функцией интерфейса к процедурам numeric::linsolve
и linalg::matlinsolve
. Для получения дополнительной информации смотрите numeric::linsolve
, страницы справки linalg::matlinsolve
и фоновый раздел этой страницы справки.
Система eqs
проверяется на линейность. Поскольку такой тест может быть дорогим, рекомендуется использовать numeric::linsolve
или linalg::matlinsolve
непосредственно, когда вы знаете, что система линейна.
Уравнения и переменные могут быть введены как наборы или списки:
linsolve({x + y = 1, 2*x + y = 3}, {x, y}), linsolve({x + y = 1, 2*x + y = 3}, [x, y]), linsolve([x + y = 1, 2*x + y = 3], {x, y}), linsolve([x + y = 1, 2*x + y = 3], [x, y])
Также выражения могут использоваться в качестве переменных:
linsolve({cos(x) + sin(x) = 1, cos(x) - sin(x) = 0}, {cos(x), sin(x)})
Кроме того, индексируемые идентификаторы допустимы, также:
S := linsolve({2*a[1] + 3*a[2] = 5, 7*a[2] + 11*a[3] = 13, 17*a[3] + 19*a[1] = 23}, {a[1], a[2], a[3]})
Присвойте отдельные решения переменных с помощью assign
. Также получите доступ к решению путем индексации в S
:
assign(S): a[1]; a2_val := S[2][2];
Удалите a
для использования в дальнейших вычислениях.
delete a;
Затем, мы демонстрируем использование опции Domain
и решаем систему по полю ℤ 23 с ним:
linsolve([2*x + y = 1, -x - y = 0], Domain = Dom::IntegerMod(23))
Следующая система не имеет решения:
linsolve({x + y = 1, 2*x + 2*y = 3}, {x, y})
Если решение линейной системы не уникально, то некоторые неизвестные используются в качестве “свободных параметров” охват пробела решения. В следующем примере неизвестный z
является таким параметром. Это не появляется на левой стороне решенных уравнений:
eqs := [x + y = z, x + 2*y = 0, 2*x - z = -3*y, y + z = 0]:
vars := [w, x, y, z]:
linsolve(eqs, vars)
Если вы используете опцию Normal
, linsolve
вызывает функцию normal
для конечных результатов. Этот вызов гарантирует, что linsolve
возвращает результаты в нормированной форме:
linsolve([x + a*y = a + 1, b*x - y = b - 1], {x, y})
Если вы задаете Normal = FALSE
, linsolve
не вызывает normal
для конечного результата:
linsolve([x + a*y = a + 1, b*x - y = b - 1], {x, y}, Normal = FALSE)
Решите эту систему:
eqs := [x + a*y = b, x + A*y = b]:
linsolve(eqs, [x, y])
Обратите внимание на то, что больше решений существует для a = A
. linsolve
не использует эти решения, потому что он делает некоторые дополнительные предположения на символьных параметрах этой системы. Чтобы видеть предположения что linsolve
, сделанный при решении этой системы, используйте опцию ShowAssumptions
:
linsolve(eqs, [x, y], ShowAssumptions)
delete eqs:
|
Список или набор линейных уравнений или арифметических выражений |
|
Список или набор неизвестных, чтобы решить для: обычно идентификаторы или индексированные идентификаторы |
|
Опция, заданная как Решите систему по полю |
|
Опция, заданная как Возвратите нормированные результаты. Значением По умолчанию Чтобы избежать этого дополнительного вызова, задайте |
|
Возвратите информацию о внутренних предположениях, что При использовании этой опции Когда Исключение Гаусса производит уравнение |
Без опции ShowAssumptions
возвращен список упрощенных уравнений. Это представляет общее решение системы eqs
. FAIL
возвращен, если система не разрешима.
С ShowAssumptions
список возвращен [Solution, Constraints, Pivots]
. Solution
является списком упрощенных уравнений, представляющих общее решение eqs
. Списки Constraints
и Pivots
содержат уравнения и неравенства, вовлекающие символьные параметры в eqs
. Внутренне, они были приняты, чтобы сохраняться при решении системы.
Если опция, Domain
не присутствует, система, решена путем вызова numeric::linsolve
с опцией Symbolic
.
Если опцией, которую Domain = R
дан и R
, является или Dom::ExpressionField
()
или Dom::Float
, то numeric::linsolve
используется, чтобы вычислить решение системы. Эта функция использует разреженное представление уравнений.
В противном случае eqs
сначала преобразован в матрицу и затем решен linalg::matlinsolve
. Возможно разреженная структура входной системы не учтена.