Ищите разъединенные блоки в системах уравнений
[ идентифицирует подмножества (блоки) уравнений, которые могут использоваться, чтобы задать подмножества переменных. Количество переменных eqsBlocks,varsBlocks]
= findDecoupledBlocks(eqs,vars)vars должен совпасть с количеством уравнений eqs.
i th блок является системой уравнений, определяющей переменные в vars(varsBlocks{i}). Переменные в vars([varsBlocks{1},…,varsBlocks{i-1}]) определяются рекурсивно предыдущими блоками уравнений. После того, как вы решаете первый блок уравнений для первого блока переменных, второго блока уравнений, данных eqs(eqsBlocks{2}), задает разъединенное подмножество уравнений, содержащих только подмножество переменных, данных вторым блоком переменных, vars(varsBlock{2}), плюс переменные из первого блока (эти переменные известны в это время). Таким образом, если нетривиальная блочная декомпозиция возможна, можно разделить процесс решения для большой системы уравнений, включающей много переменных в несколько шагов, где каждый шаг включает меньшую подсистему.
Количество блоков length(eqsBlocks) совпадает с length(varsBlocks). Если length(eqsBlocks) = length(varsBlocks) = 1, затем нетривиальная блочная декомпозиция уравнений не возможна.
Реализованный алгоритм требует этого для каждой переменной в vars в eqs должно быть по крайней мере одно соответствующее уравнение включение этой переменной. То же уравнение не может также быть соответствующим к другой переменной. Если система не удовлетворяет этому условию, то findDecoupledBlocks выдает ошибку. В частности, findDecoupledBlocks требует того length(eqs) = length(vars).
Применение сочетаний e = [eqsBlocks{:}] к векторному eqs и v = [varsBlocks{:}] к векторному vars производит матрицу падения incidenceMatrix(eqs(e), vars(v)) это имеет блок нижний треугольный шаблон разреженности.
daeFunction | decic | diag | incidenceMatrix | isLowIndexDAE | massMatrixForm | odeFunction | reduceDAEIndex | reduceDAEToODE | reduceDifferentialOrder | reduceRedundancies | tril | triu