看板 Mathematica 關於我們 聯絡資訊
※ 引述《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
candy88257:感謝!! 那我的AA行列式為0(沒有反矩陣)的話...,用BB 12/21 16:11
candy88257:去轉換也可吧?(變Det[BB]在最前面) 12/21 16:12
candy88257:另外,我的矩陣還有Z^2... 12/21 16:12
jurian0101:大冏 12/21 21:54