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

看板Mathematica作者 (阿泰斯)時間12年前 (2012/12/21 14:43), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/5 (看更多)
※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言: : ※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言: : : 標題: Re: [問題]要如何將行列式使用拉普拉斯展開? : : 時間: Wed Dec 12 00:22:53 2012: : 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 這樣? 求高手幫忙想一下!! 感謝!!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.130.17.157
文章代碼(AID): #1Gr0Jrh1 (Mathematica)
討論串 (同標題文章)
文章代碼(AID): #1Gr0Jrh1 (Mathematica)