看板 Mathematica 關於我們 聯絡資訊
※ 引述《chungyuandye (養花種魚數月亮賞星星)》之銘言: : 標題: Re: [問題]要如何將行列式使用拉普拉斯展開? : 時間: Wed Dec 12 00:22:53 2012 : : ※ 引述《candy88257 (阿泰斯)》之銘言: : : 在此說的拉普拉斯是指: http://tinyurl.com/bhhlt4q : : 上面網址是維基百科 : : 有辦法做到這點嗎? : : 想把10幾階的矩陣使用拉普拉斯展開,不想用Det算 : : 因為用Det怪怪的,行列式值會有分母....,明明所有數值都沒分數的說... : : 求高手幫忙!! 感謝!!! : : temp=12; : A:=N@Table[Sin[m+2n]+Cos[m+2n]z,{m,1,temp},{n,1,temp}]; : : myminors[mymatrix_?MatrixQ,i_,j_]:=Block[{dim}, : dim=Length@mymatrix; : mymatrix[[All,Drop[Range[dim],{j}]]][[Drop[Range[dim],{i}]]]] : : mydet[mymatrix_?MatrixQ]:= : Total[Table[Det@myminors[mymatrix,1,i]*mymatrix[[1,i]]*If[OddQ[i],1,-1], : {i,Length@A}]] : : {temp=#;Det[A/.z->1]-mydet[A/.z->1]}&/@Range[2,12] : : mydet[A]//Simplify : : 推 AmibaGelos:您好,這樣做的話似乎只能用在12的情況?更高階便必須做 12/13 09:18 : → AmibaGelos:更多的展開@@...共會有n!/11!項ORZ 12/13 09:20 : → chungyuandye:是的,更高階的話要將每個minor繼續分解 12/13 10:37 (* Laplace expansion *) temp1=15; A=N@Table[Tan[m+2n]+Cot[m+2n]z,{m,1,temp1},{n,1,temp1}]; myminors[mymatrix_?MatrixQ]:=Block[{dim}, 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] -- 養花種魚數月亮賞星星 http://chungyuandye.twbbs.org -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.173.140.113
candy88257:感謝!!! 12/15 19:42
candy88257:大大,雖然您新寫的語法比較快,但是... 12/20 11:57
candy88257:你新寫的語法只能用在您設定的矩陣吧@@ 12/20 11:58
candy88257:而我現在既定的矩陣沒辦法像您那個矩陣一樣那麼有規律. 12/20 11:59
candy88257:也就是Z沒辦法像那樣直接分開... 12/20 12:02
candy88257:請問有解決方法嗎@@? 12/20 12:02
candy88257:補充: 雖然矩陣很複雜,但是都可寫成a+bZ的形式 12/20 13:41
candy88257:是22*22的矩陣 12/20 13:42
candy88257:會有Z^2 12/20 13:42
candy88257:求神手幫忙想一下 感謝! 12/20 13:43
candy88257:請問大大ans1的原理為何@@? 12/21 13:56
candy88257:我會了@@ 其實是很簡單的轉換... 沒稍微動一下頭腦不 12/21 14:35
candy88257:行了 12/21 14:35