作者ak075 (颗颗)
看板MATLAB
标题Re: [讨论] 请教一段程式写法
时间Thu Jul 5 18:48:25 2012
※ 引述《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)
1F:→ doom8199:直接点乘就好了, 转 3*3*N 是多余的 07/05 19:19
2F:→ ak075:对吼= =想太多了 07/05 19:28
3F:→ math99:谢谢 高手真多 感谢感谢 07/05 21:06