findDecoupledBlocks

在方程组的搜索解耦块

描述

[eqsBlocksvarsBlocks)= findDecoupledBlocks (公式瓦尔可用于定义的变量的子集方程识别子集(块)。变量的数目瓦尔必须用方程的数量一致公式

一世第一个块是决定变量的一组方程var (varsBlocks{我})。在变量瓦尔([varsBlocks {1},...,{varsBlocks I-1}])分别由方程的先前块递归确定。当你解方程的第一块由给定变量的第一个块,方程的第二块,方程(eqsBlocks {2}),定义了一个解耦的方程组子集,只包含由第二部分变量给出的变量子集,瓦尔(varsBlock {2})加从第一个块中的变量(这些变量此时已知的)。因此,如果一个非平凡块分解是可能的,可以为一个大系统涉及许多变量方程的成几个步骤,其中每个步骤涉及一个较小的子系统分裂溶液处理。

块的数量长度(eqsBlocks)恰逢长度(varsBlocks)。如果长度(eqsBlocks)=长度(varsBlocks)= 1,则方程的一个非平凡块分解是不可能的。

例子

DAE系统的块下三角分解

计算块下三角分解(BLT分解)微分代数方程模块(DAE)的符号体系。

创建四个差分代数方程组的下列系统。在这里,象征性的函数调用X1(t)的X2(t)的X3(t)的X4(t)的表示该系统的状态变量。该系统还包含符号参数C1C2C3C4和功能f (t, x, y)克(T,X,Y)

SYMS X1(t)的X2(t)的X3(t)的X4(t)的SYMS C1 C2 C3 C4 SYMS F(T,X,Y)G(T,X,Y)方程= [C1 *的diff(X1(t)的,T)+ C2 *的diff(×3(T),T)== C3 * F(T,X 1(t)的,X 3(t)的); ... C2 *的diff(X1(t)的,T)+ C1* DIFF(×3(T),T)== C4 * G(T,X 3(t)的,X 4(t))的; ... X1(t)的==克(吨,X1(t)的X3(吨)); ... X2(t)的== F(T,X 3(t)的,X 4(t))的];瓦尔= [X1(吨),X2(t)的,X 3(t)的,X4(吨)];

findDecoupledBlocks找到系统的块结构。

[eqsBlocks, varsBlocks] = find解耦pledblocks(等式,变量)
eqsBlocks = 1×3单元阵列{1×2双} {[2]} {[4]} varsBlocks = 1×3单元阵列{1×2双} {[4]} {[2]}

第一个块包含两个变量两个方程。

方程(eqsBlocks {1})
ANS = C1 * DIFF(X1(t)的,T)+ C2 *的diff(×3(T),T)== C3 * F(T,X 1(t)的X3(t))的X1(t)的==克(吨,X1(t)的X3(t))的
瓦尔(varsBlocks {1})
ANS = [X1(t)的X3(吨)]

你以后解决这个块变量X1(t)的X3(t)的,可以解方程的下一块。此块由一个方程。

方程(eqsBlocks {2})
ANS = C2 * DIFF(X1(t)的,T)+ C1 * DIFF(×3(T),T)== C4 * G(T,X 3(t)的,X 4(t))的

块包括一个变量。

瓦尔(varsBlocks {2})
ANS = X4(t)的

当您从块2求解方程变量X4(t)的,方程组的剩余块,方程(eqsBlocks {3})限定其余可变,瓦尔(varsBlocks {3})

方程(eqsBlocks {3})瓦尔(varsBlocks {3})
ANS = X2(t)的== F(T,X 3(t)的,X 4(t))的ANS = X2(t)的

发现系统转换为块下三角形式排列。

eqsPerm = [{eqsBlocks:}] varsPerm = [{varsBlocks:}]
eqsPerm = 1 3 2 4 varsPerm = 1 3 4 2

该系统转换成块降低方程的三角系统。

方程=方程(eqsPerm)瓦尔=瓦尔(varsPerm)
等式= C1 * DIFF(X1(t)的,T)+ C2 *的diff(×3(T),T)== C3 * F(T,X 1(t)的X3(t))的X1(t)的==克(吨,X1(t)的X3(t))的C2 * DIFF(X1(t)的,T)+ C1 * DIFF(×3(T),T)== C4 * G(T,X 3(t)的,X4(t))的X2(t)的== F(T,X 3(t)的,X 4(t))的瓦尔= [X1(t)的,X 3(t)的,X4(吨),X2(t)的]

查找导致系统的关联矩阵。关联矩阵显示,置换方程系统具有大小三个对角块2-通过-21-通过-11-通过-1

incidenceMatrix(均衡器,VARS)
ANS = 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1

BLT分解和线性系统解决方案

找到方程的块中的线性代数系统,然后通过依次求解从第一个起始方程的每个块解决系统。

创建线性代数方程的以下系统。

SYMS X1 X2 X3 X4 X5 X6 C1 C2 C3方程= [C1 * X1 + X3 + X5 == C1 + C2 + 1; ... X1 + X3 + X4 + 2 * 5233 == 4 + C2; ... X1+ 2 * X3 + C3 * X5 == 1 + 2 * C2 + C3; ... X2 + X3 + X4 + X5 == 2 + C2; ... X1  -  C2 * X3 + X5 == 2  -  C 2-42; ... X1  -  X3 + X4  -  5233 == 1  -  C2];瓦尔= [X1,X2,X3,X4,X5,X6];

findDecoupledBlocks将系统转换到下三角形式。对于这个系统,findDecoupledBlocks识别方程和相应的变量的三个块。

[eqsBlocks, varsBlocks] = find解耦pledblocks(等式,变量)
eqsBlocks = 1×3单元阵列{1×3双} {1×2双} {[4]} varsBlocks = 1×3单元阵列{1×3双} {1×2双} {[2]}

确定在第一块中的变量。此块由三个变量三个方程的。

瓦尔(varsBlocks {1})
ANS = [X1,X3,X5]

为第一个变量块求解方程的第一个块,并将解赋给相应的变量。万博 尤文图斯

[X1,X3,X5] =解决(方程(eqsBlocks {1}),乏(varsBlocks {1}))
X1 = 1×3 = C2×5 = 1

识别在所述第二块中的变量。该电路由两个变量两个方程。

瓦尔(varsBlocks {2})
ANS = [X4的,5233]

求解方程分配方案为相应的变量此块。万博 尤文图斯

[X4的,5233] =解决(方程(eqsBlocks {2}),乏(varsBlocks {2}))
X4 = X3 / 3  -  X1  -  C2 / 3 + 2 5233 =(2 * C2)/ 3  - (2 * X3)/ 3 + 1

潜艇以评估变量的已知值结果X1X3X5

X4 =潜艇(4个)5233 =潜艇(5233)
X4 = 1 5233 = 1

确定第三块的变量。此块由一个方程在一个变量。

瓦尔(varsBlocks {3})
ANS = X2

解决这个方程分配解决方案X2

X2 =解决(方程(eqsBlocks {3}),乏(varsBlocks {3}))
X2 = C2  -  X3  -  X4  -  X5 + 2

潜艇以评估该系统的所有其他变量的已知值的结果。

X2 =潜艇(×2)
X2 = 0

另外,您也可以使用重写这个例子对于-循环。此方法可让您使用例如较大的方程组。

SYMS X1 X2 X3 X4 X5 X6 C1 C2 C3方程= [C1 * X1 + X3 + X5 == C1 + C2 + 1; ... X1 + X3 + X4 + 2 * 5233 == 4 + C2; ... X1+ 2 * X3 + C3 * X5 == 1 + 2 * C2 + C3; ... X2 + X3 + X4 + X5 == 2 + C2; ... X1  -  C2 * X3 + X5 == 2  -  C 2-42×1  -  X 3 + X 4  -  5233 == 1  -  C2];瓦尔= [X1,X2,X3,X4,X5,X6];[eqsBlocks,varsBlocks] = findDecoupledBlocks(方程,乏);vars_sol =乏;对于i = 1:numel(eqsBlocks)溶胶=解决(方程(eqsBlocks {I}),乏(varsBlocks {I}));vars_sol_per_block =潜艇(瓦尔(varsBlocks {I}),溶胶);对于k = 1:I-1 vars_sol_per_block =潜艇(vars_sol_per_block,乏(varsBlocks {K}),... vars_sol(varsBlocks {K}));端vars_sol(varsBlocks {I})= vars_sol_per_block端
vars_sol = [1, x2, c2, 1, x6]

输入参数

全部收缩

方程组,指定为符号方程或表达式向量。

变量,指定为符号变量,函数或函数调用的载体,如X(t)的

例:[X(t),Y(t)的]要么[X(t); Y(t)的]

输出参数

全部收缩

索引定义方程组块,返回一个单元阵列。索引的每个块是双精度整数的行向量。该一世方程个块由方程方程(eqsBlocks {I})并且仅涉及变量瓦尔(varsBlocks {1:ⅰ})

索引定义的变量块,返回一个单元阵列。索引的每个块是双精度整数的行向量。该一世方程个块由方程方程(eqsBlocks {I})并且仅涉及变量瓦尔(varsBlocks {1:ⅰ})

提示

  • 所实现的算法要求对每个变量瓦尔必须有至少一个匹配方程公式涉及此变量。相同的公式不能同时被匹配到另一个变量。如果系统不能满足这个条件,那么findDecoupledBlocks抛出一个错误。特别是,findDecoupledBlocks要求长度(方程)=长度(乏)

  • 运用排列E = [{eqsBlocks:}]到向量公式V = [{varsBlocks:}]到向量瓦尔产生关联矩阵incidenceMatrix(方程(e)中,瓦尔(V))具有块下三角稀疏模式。

介绍了在R2014b