daetools:: findDecoupledBlocks

Ищите разъединенные блоки в системах уравнений

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

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

Синтаксис

[eqsBlocks,varsBlocks] := daetools::findDecoupledBlocks(eqs,vars)

Описание

[eqsBlocks,varsBlocks] := daetools::findDecoupledBlocks(eqs,vars) идентифицирует подмножества (блоки) уравнений, которые могут использоваться, чтобы задать подмножества переменных. Количество переменных vars должно совпасть с количеством уравнений eqs.

i th блок является системой уравнений, определяющей переменные в vars[varsBlocks[i]]. Переменные в vars[varsBlocks[1],...,varsBlocks[i-1]] определяются рекурсивно предыдущими блоками уравнений. После того, как вы решаете первый блок уравнений для первого блока переменных, второй блок уравнений, данных eqs[eqsBlocks[2]], задает разъединенное подмножество уравнений, содержащих только подмножество переменных, данных вторым блоком переменных vars[varsBlock[2]], плюс переменные из первого блока (эти переменные известны в это время). Таким образом, если нетривиальная блочная декомпозиция возможна, можно разделить процесс решения для большой системы уравнений, включающей много переменных в несколько шагов, где каждый шаг включает меньшую подсистему.

Количеством блоков является nops(eqsBlocks). Это совпадает с nops(varsBlocks). Если nops(eqsBlocks) = nops(varsBlocks) = 1, то нетривиальная блочная декомпозиция уравнений не возможна.

Реализованный алгоритм требует, чтобы для каждой переменной в vars было по крайней мере одно соответствующее уравнение в eqs, включающем эту переменную. То же уравнение не может также быть соответствующим к другой переменной. Если система не удовлетворяет это условие, то daetools::findDecoupledBlocks выдает ошибку. В частности, daetools::findDecoupledBlocks требует того nops(eqs) = nops(vars).

Примеры

Пример 1

Вычислите блок нижнее треугольное разложение символьной системы дифференциальных алгебраических уравнений (ДАУ).

Создайте следующую систему четырех дифференциальных алгебраических уравнений. Здесь, выражения x1(t), x2(t), x3(t) и x4(t) представляют переменные состояния системы. Система также содержит символьные параметры c1, c2, c3, c4 и выражения f(t,x,y) и g(t,x,y).

eqs := [c1*diff(x1(t),t) + c2*diff(x3(t),t) = c3*f(t,x1(t),x3(t)),
        c2*diff(x1(t),t) + c1*diff(x3(t),t) = c4*g(t,x3(t),x4(t)),
        x1(t) = g(t,x1(t),x3(t)),
        x2(t) = f(t,x3(t),x4(t))]:
vars:= [x1(t), x2(t), x3(t), x4(t)]:

Используйте daetools::findDecoupledBlocks, чтобы найти блочную структуру системы.

[eqsBlocks, varsBlocks] := daetools::findDecoupledBlocks(eqs, vars)

Первый блок содержит два уравнения в двух переменных.

eqs[eqsBlocks[1]]

vars[varsBlocks[1]]

После того, как вы решите этот блок для переменных состояния x1(t), x3(t), можно решить следующий блок уравнений. Этот блок состоит из одного уравнения.

eqs[eqsBlocks[2]]

Этот блок включает одну переменную.

vars[varsBlocks[2]]

После того, как вы решите уравнение от блока 2 для переменной состояния x4(t), остающийся блок уравнений, eqs[eqsBlocks[3]] задает остающуюся переменную vars[varsBlocks[3]].

eqs[eqsBlocks[3]];
vars[varsBlocks[3]]

Найдите перестановки, которые преобразовывают систему в блок нижняя треугольная форма.

eqsPerm := [op(eqsBlocks[i]) $ i = 1..nops(eqsBlocks)];
varsPerm := [op(varsBlocks[i]) $ i = 1..nops(varsBlocks)]

Преобразуйте систему в блок нижняя треугольная система уравнений.

eqs := eqs[eqsPerm];
vars := vars[varsPerm]

Найдите матрицу падения получившейся системы. Матрица падения показывает, что система переставленных уравнений имеет три диагональных блока размера 2-by-2, 1-by-1 и 1-by-1.

daetools::incidenceMatrix(eqs, vars)

Параметры

eqs

Список или вектор уравнений или выражений в переменных состояния vars и их производные. Выражения представляют уравнения с правой стороной 0.

vars

Список или вектор идентификаторов или выражений, таких как [x1(t),x2(t)].

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

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

Введенный в R2014b