在方程组的搜索解耦块
[
可用于定义的变量的子集方程识别子集(块)。变量的数目eqsBlocks
,varsBlocks
)= findDecoupledBlocks (公式
,瓦尔
)瓦尔
必须用方程的数量一致公式
。
该一世第一个块是决定变量的一组方程var (varsBlocks{我})
。在变量瓦尔([varsBlocks {1},...,{varsBlocks I-1}])
分别由方程的先前块递归确定。当你解方程的第一块由给定变量的第一个块,方程的第二块,方程(eqsBlocks {2})
,定义了一个解耦的方程组子集,只包含由第二部分变量给出的变量子集,瓦尔(varsBlock {2})
加从第一个块中的变量(这些变量此时已知的)。因此,如果一个非平凡块分解是可能的,可以为一个大系统涉及许多变量方程的成几个步骤,其中每个步骤涉及一个较小的子系统分裂溶液处理。
块的数量长度(eqsBlocks)
恰逢长度(varsBlocks)
。如果长度(eqsBlocks)=长度(varsBlocks)= 1
,则方程的一个非平凡块分解是不可能的。
计算块下三角分解(BLT分解)微分代数方程模块(DAE)的符号体系。
创建四个差分代数方程组的下列系统。在这里,象征性的函数调用X1(t)的
,X2(t)的
,X3(t)的
和X4(t)的
表示该系统的状态变量。该系统还包含符号参数C1
,C2
,C3
,C4
和功能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
-通过-2
,1
-通过-1
和1
-通过-1
。
incidenceMatrix(均衡器,VARS)
ANS = 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 1
找到方程的块中的线性代数系统,然后通过依次求解从第一个起始方程的每个块解决系统。
创建线性代数方程的以下系统。
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
用潜艇
以评估变量的已知值结果X1
,X3
和X5
。
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]
daeFunction
|decic
|诊断
|incidenceMatrix
|isLowIndexDAE
|massMatrixForm
|odeFunction
|reduceDAEIndex
|reduceDAEToODE
|reduceDifferentialOrder
|reduceRedundancies
|TRIL
|triu