Re: [问题]要如何将行列式使用拉普拉斯展开?

楼主: chungyuandye (养花种鱼数月亮赏星星)   2012-12-21 15:54:03
※ 引述《candy88257 (阿泰斯)》之铭言:
: ※ 引述《chungyuandye (养花种鱼数月亮赏星星)》之铭言:
: : dim=Length@mymatrix;
: : {If[OddQ[#],1,-1]*mymatrix[[1,#]],
: : mymatrix[[All,Drop[Range[dim],{#}]]][[2;;-1]]}&/@
: : Range[dim]
: : ];
: : dist[list1_,list2_List]:=Insert[#,list1,1]&/@list2
: : (* 降阶到11x11的minor后代Mathematica的Det *)
: : anstemp1=
: : Nest[Flatten[ParallelMap[dist[#[[1;;-2]],myminors[#[[-1]]]]&,#],1]&,
: : myminors[A],temp1-12];
: : ans=Total[ParallelTable[
: : Times@@Flatten[anstemp1[[i]][[1;;-2]]]*
: : Det[anstemp1[[i]][[-1]]],{i,Length@anstemp1}]
: : Det[A/.z->1]-ans/.z->1
: : 上面的程式在anstemp1所产生的项数共15*14*13*12=32760,所以显然是很没效率。
: : 但如果就上述的矩阵改以下列方式计算,那速度快很多。
: : temp=15;
: : AA=Table[Tan[m+2n]//N,{m,1,temp},{n,1,temp}];
: : BB=Table[Cot[m+2n]//N,{m,1,temp},{n,1,temp}];
: : A=Table[Tan[m+2n]+Cot[m+2n]z//N,{m,1,temp},{n,1,temp}];
: : ans1=AbsoluteTiming[Det[AA]*Det[(IdentityMatrix[temp]+z*Inverse[AA].BB)]]
: : ans2=AbsoluteTiming@Det[AA+z*BB]
: : ans3=AbsoluteTiming@Det[A]
: : {ans1[[2]]/.z->#,ans2[[2]]/.z->#,ans3[[2]]/.z->#}&/@Range[0.1,1,0.1]
: 非常感谢您!!
: 但现在问题出在假设我的矩阵是:
: M={{a11+b11*Z,a12+b12*Z,a13+b13*Z},{a21+b21*Z,a22+b22*Z,a23+b23*Z},{a31+b31*Z,a32+b32*Z,a33+b33*Z}}
: 要怎把它分成:
: A={aij}3*3
: B={bij}3*3
: M=A+B*Z
(* 问题应该是如何分解成AA+Z*BB *)
(* 利用Map和Coefficient即可将level2的系数提出 *)
AA = Map[Coefficient[#, Z, 0] &, M, {2}];
BB = Map[Coefficient[#, Z, 1] &, M, {2}];
mydet = AbsoluteTiming[
Det[AA]*Det[(IdentityMatrix[Length@M] + Z*Inverse[AA].BB)]] //
Simplify
mydet[[2]] - Det[M] // Simplify
作者: candy88257 (阿泰斯)   2012-02-21 16:11:00
感谢!! 那我的AA行列式为0(没有反矩阵)的话...,用BB去转换也可吧?(变Det[BB]在最前面)另外,我的矩阵还有Z^2...
作者: jurian0101 (Hysterisis)   2012-02-21 21:54:00
大冏

Links booklink

Contact Us: admin [ a t ] ucptt.com