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 не реагирует на свойства идентификаторов, установленных assume.

Примеры

Пример 1

Уравнения и переменные могут быть введены как наборы или списки:

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})

Пример 2

Если решение линейной системы не уникально, то некоторые неизвестные используются в качестве “свободных параметров” охват пробела решения. В следующем примере неизвестный 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)

Пример 3

Если вы используете опцию 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)

Пример 4

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

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:

Параметры

eqs

Список или набор линейных уравнений или арифметических выражений

vars

Список или набор неизвестных, чтобы решить для: обычно идентификаторы или индексированные идентификаторы

Опции

Domain

Опция, заданная как Domain = R

Решите систему по полю R, которое должно быть областью категории Cat::Field.

Normal

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

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

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

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

ShowAssumptions

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

При использовании этой опции linsolve возвращает список [Solution, Constraints, Pivots]. Solution является списком решенных уравнений, представляющих коллектор полного решения eqs, как описано выше. Списки Constraints и Pivots содержат уравнения и неравенства, вовлекающие символьные параметры в eqs. Внутренне, они были приняты, чтобы сохраняться при решении системы. Смотрите Пример 4.

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

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

Без опции 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. Возможно разреженная структура входной системы не учтена.