fortran66のブログ

fortran について書きます。

メモ帳 S-function の正規化 2

Littlewood の S-function の standardization 2

夏休みの勉強のつづき
fortran66.hatenablog.com


分割{λ}= [\lambda_1,\lambda_2,..., \lambda_p] を S-function とみて、{λ}が弱い減少列になっていない時に弱い減少列に直す。

規則1 尻の 0 は取り去る。
規則2 尻に負数が出たら 0。(ここでは係数項 0 とする)
規則3 隣り合う数の入れ替えは\{...\lambda_i,\lambda_{i+1},...\}=−\{...\lambda_{i+1}−1,\lambda_i+1,...\}


規則3 より  \lambda_i = \lambda_{i+1} - 1 になっているところがあると、\{\lambda\}=-\{\lambda\}となって S-function は 0 になる。

ソース・プログラム

書き直したプログラム

main = print (standard (1, [-5,1,1,1,1,1])) 

type Partition = [Int]
type PartitionF = (Int, Partition) -- Partition with a (phase)factor


standard :: PartitionF -> PartitionF
standard (f, xs) = if is_std xs then (f, xs)
                                else (standard . std) (f, xs)

is_std :: Partition -> Bool 
is_std []  = True
is_std xs  = if last xs <= 0 then False 
                             else and [x >= y|(x,y) <- zip xs (tail xs)]

std :: PartitionF -> PartitionF
std (f, [])= (f, [])
std (f, xs) = if (last xs) <  0  then (0, [])
         else if (last xs) == 0  then standard (f, init xs)
         else std' (f, xs)

std' :: PartitionF -> PartitionF                           
std' (f, []) = (f, [])
std' (f, [x]) = (f, [x])
std' (f, x:y:xs) = if x == (y-1) then (0, [])
              else if x < y      then (-f, (y-1):(x+1):xs) 
              else (f', x:xs')
    where 
        (f', xs') = std' (f, y:xs)

実行結果

[-5,1,1,1,1,1] = -[0]= -[] = -1

sh-4.3$ main                                                                                                                                                                 
(-1,[])    

対称群の指標を目指して (マーナハン・中山方式)

Murnaghan-Nakayama の式の部品

チェック用
\chi^{\{31^3\}}_{(6)}=-1, \chi^{\{21^4\}}_{(6)}=+1

生意気に Maybe モナドを使ってみましたが、くるんだ数値を取り出すのに一苦労w

ソース・プログラム

import Data.Maybe

xs3111_6  = [[-3,1,1,1], [3,-5,1,1], [3,1,-5,1], [3,1,1,-5]]
xs21111_6 = [[-4,1,1,1,1], [2,-5,1,1,1], [2,1,-5,1,1], [2,1,1,-5,1], [2,1,1,1,-5]]

main = print ((cmn . mn') xs3111_6) --xs21111_6) 

type Partition = [Int]
type PartitionF = (Int, Partition) -- Partition with a (phase)factor

mn' :: [Partition] -> [PartitionF]
mn' xss = map (\xs -> standard (1, xs)) xss 

cmn :: [PartitionF] -> Int
cmn []   = 0
cmn (x:xs) =  fromJust (ipf0 x)  +  (cmn xs)

ipf0 :: PartitionF -> Maybe Int
ipf0 (f, []) = Just f
ipf0 (f, _)  = Nothing 

実行結果

sh-4.3$ main                                                                                                                                                                 
-1     

amazon AA この Hutton の本は薄くて例題の話題は豊富で面白い。みなまで言わない典型的英国風の教科書か。