Re: [討論] 請教一段程式寫法

看板MATLAB作者 (顆顆)時間13年前 (2012/07/05 18:48), 編輯推噓0(003)
留言3則, 3人參與, 最新討論串4/4 (看更多)
※ 引述《sanzosaskura (巫師c的小弟)》之銘言: : ※ 引述《jeffppp (煩..)》之銘言: : : a1=[1 2 3 4 . . .]; : : a2=[5 2 5 1 . . .]; : : a3=[4 5 2 1 . . .]; : : . : : . : : a9=[1 4 5 8 . . .]; : : a = [a1;a2 ... ; a9]; : : B = zeros(size(a1)); : : for i=1:n : : B(i)=det(reshape(a(:,i),3,3)); : : end : : (如果你連這個for 都不想要,那可能還要再另請高人 XD) : 如果完全不想用迴圈的話可以從3*3的矩陣det公式下手 : ex: B(i)=det([a1 a2 a3; : a4 a5 a6; : a7 a8 a9]) : => B(i) = a1*a5*a9 + a2*a6+a7 + a3*a4*a8 : -a3*a5*a7 - a6*a8*a1 - a9*a2*a4 : 這樣就可以透過向量運算直接算出來 同上,不使用迴圈方法 先把a1,a2,.....,a9 (N*1) 改成 1*1*N 然後疊成 [a1,a2,a3;a4,a5,a6;a7,a8,a9] 變成3*3*N 可以想像成一座3*3*N積木塔 然後套det公式 B = a1.*a5.*a9 + a2.*a6.*a7 + a3.*a4.*a8 -a3.*a5.*a7 - a6.*a8.*a1 - a9.*a2.*a4 因為是積木塔內元素相乘加減,最後B維度會是1*1*N 最後可以把B轉回(N*1),即是答案 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.61.77 ※ 編輯: ak075 來自: 140.112.61.77 (07/05 18:53)

07/05 19:19, , 1F
直接點乘就好了, 轉 3*3*N 是多餘的
07/05 19:19, 1F

07/05 19:28, , 2F
對吼= =想太多了
07/05 19:28, 2F

07/05 21:06, , 3F
謝謝 高手真多 感謝感謝
07/05 21:06, 3F
文章代碼(AID): #1FzN3yLL (MATLAB)
文章代碼(AID): #1FzN3yLL (MATLAB)