Re: [問題]要如何將行列式使用拉普拉斯展開?

看板Mathematica作者 (養花種魚數月亮賞星星)時間12年前 (2012/12/21 15:54), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串5/5 (看更多)
※ 引述《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 -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.137.88

12/21 16:11, , 1F
感謝!! 那我的AA行列式為0(沒有反矩陣)的話...,用BB
12/21 16:11, 1F

12/21 16:12, , 2F
去轉換也可吧?(變Det[BB]在最前面)
12/21 16:12, 2F

12/21 16:12, , 3F
另外,我的矩陣還有Z^2...
12/21 16:12, 3F

12/21 21:54, , 4F
大冏
12/21 21:54, 4F
文章代碼(AID): #1Gr1MZl7 (Mathematica)
文章代碼(AID): #1Gr1MZl7 (Mathematica)