ダイアゴナルというのは斜め、という意味らしいですが、APL/J言語に/.(スラッシュドット、ダイアゴナル)という副詞があります。直前の動詞に作用して、動詞をマトリックスの斜めに作用させます。
Math for the Layman by Kenneth Iversonに次のような例が載っていました。
diag=: /. c=: 1 2 1 d=: 1 3 3 1 t=: c */d t 1 3 3 1 2 6 6 2 1 3 3 1 sum diag t 1 5 10 10 5 1
(1 2 1)とか(1 3 3 1)とか(1 5 10 10 5 1)とかどこかで見たことある数列だと思ったら、パスカルの三角形に出てきますね。(1 2 1)は2乗、(1 3 3 1)は3乗、(1 5 10 10 5 1)は5乗の係数です。(1 2 1)と(1 3 3 1)の掛け算マトリックスを斜めに足した結果が(1 5 10 10 5 1)でこれが2+3の合計の5乗の係数になっている。
(1 2 1)&p. i.4 1 4 9 16 ^&2 >:i.4 1 4 9 16 (1 3 3 1)&p. i.4 1 8 27 64 ^&3 >:i.4 1 8 27 64 (1 5 10 10 5 1)&p.i.4 1 32 243 1024 ^&5 >:i.4 1 32 243 1024
ということは(1 2 1)と(1 2 1)の掛け算マトリックスの結果は4乗の係数、(1 3 3 1)と(1 3 3 1)の掛け算マトリックスの結果は6乗の係数になるはずだ。やってみよう。
(1 2 1)*/(1 2 1) 1 2 1 2 4 2 1 2 1 sum diag (1 2 1)*/(1 2 1) 1 4 6 4 1 (1 4 6 4 1)&p.i.4 1 16 81 256 ^&4 >:i.4 1 16 81 256 (1 3 3 1)*/(1 3 3 1) 1 3 3 1 3 9 9 3 3 9 9 3 1 3 3 1 sum diag (1 3 3 1)*/(1 3 3 1) 1 6 15 20 15 6 1 (1 6 15 20 15 6 1)&p.i.4 1 64 729 4096 ^&6 >:i.4 1 64 729 4096
なりましたね。成功。
以上