誤差のない音律データを求めて。
音律計算やその他について、気になった事をまったりと書いていこうと思います。
(元ブログ(goo)からの引越し。電波度を減らそうと試みた事もあるがちょっと難しそうだ。)

配列・ベクトル・行列(8)

エクセルで順列列挙(順列の書き出し)の補足

順列の偶置換、奇置換等について

 

前頁「配列・ベクトル・行列(7)」の3番目画像のQ11等について事後説明

 Q11= {=-1^SUM(IF({1;2;3;4;5;6;7}<{1,2,3,4,5,6,7},1,0)*IF(TRANSPOSE($F11:$L11)>$F11:$L11,1,0))} (配列数式)

 Q11:Q733= Q11をコピペ

行列式から余因子を求める時に対応する順列が偶置換か奇置換かで符号が決まる。その実装方法が分からず苦戦するかと思われた。しかし検索したら意外に簡単に解決した。

 https://oshiete.goo.ne.jp/qa/9042882.html 代数学の質問です(偶置換と奇置換の判別)

 > No.3

 > 回答者: tknakamuri 回答日時:2015/08/12 22:17
 > 転倒数(逆転数?)に関して調べてみましたが
 > 転倒数が偶数なら遇置換、奇数なら奇置換で良いようです。

 > 転倒数の定義

 > iくjでかつσ(i)>σ(j)の数。

 (以下略)

引用した最後の1行をエクセル式にしたのがQ11のsum関数内の部分。別問題の質問と答え等の検証もしたので合っていると考えられる。「転倒数」という単語は初めて知った。(r070411「Q11の式」を「Q11のsum関数内の部分」に修正)

 

4x4の行列式に関わる順列について作業セルを使って転倒数を計算した様子(順列部分は画面外) リブレオフィスカルクにて (r070407 「4x4の順列」を「4x4の行列式に関わる順列」に変更)

 AB74:AE77= {=IF({1;2;3;4}<{1,2,3,4},1,0)*IF(TRANSPOSE($C74:$F74)>$C74:$F74,1,0)} (配列数式)

 AF74= =SUM(AB74:AE77)

 AG75:AJ78= {=IF({1;2;3;4}<{1,2,3,4},1,0)*IF(TRANSPOSE($C75:$F75)>$C75:$F75,1,0)} (配列数式)

 AK75= =SUM(AG75:AJ78)

 以下同様

 

(r070611追加) AK75を作業セルなしで計算した数式の数式 (配列数式が必要かどうか今回は確認省略)

 

余談1

 「行列の積」ではなく「配列の積」(そんな単語あるのか?)を利用しているのが肝だと思う。