MAXIMAat SIM
MAXIMA - 暇つぶし2ch89:GO MAXIMA
02/07/29 01:20
(続き)
ではまず簡単なclifford代数の計算例をだしにこの手のルールによる計算を示す。
URLリンク(groups.google.co.jp)
十年前のnewsgroupでの問題ここにはmathematicaやreduceやmacsyma(商用)の
解が載っているが この解はMAXIMAでは実行できないのでここに示す。
=========================================================================
Consider the Clifford algebra in 10 variables, that is the
complex algebra with ten generators, s0,...,s9 obeying
si sj + sj si = 0 if i is different from j
si si = 1
Compute (s0+s1+....+s9)^5
==========================================================================
MAXIMAによる解
(C1) matchdeclare([i,j],integerp)$
(C2) tellsimpafter(s[i]^^2,1)$
(C3) defrule(tama,s[i].s[j],if (i>j) then -s[j].s[i] else (if (i=j) then 1 else s[i].s[j]));
(D3) tama : s[i] . s[j] -> (IF i > j THEN - s[j] . s[i] ELSE s[i] . s[j] )
(C4) apply1(expand((sum(s[i],i,0,9))^^2),tama);
(D4) 10
(C7) apply1(sum(s[i],i,0,9).expand((sum(s[i],i,0,9))^^2).expand((sum(s[i],i,0,9))^^2),tama);
(D7) 100*(s[9]+s[8]+s[7]+s[6]+s[5]+s[4]+s[3]+s[2]+s[1]+s[0])

まとめ
スループットのないルールは tellsimpafterまたはtellsimpで書ける。無限適
用の可能性がなければ 条件もtellsimp(マッチ元、変更結果)の変更結果の部
分にかける。これが別解、これは商用のものとほとんど同じ。
(C3)の変わりに
(C3)tellsimpafter(s[i].s[j],if (i>j) then -s[j].s[i] else s[i].s[j]);
(D3) [".RULE1",?SIMPNCT]で
(C4) expand((sum(s[i],i,0,9))^^2);
(D4) 10
(C6) sum(s[i],i,0,9).expand((sum(s[i],i,0,9))^^2).expand((sum(s[i],i,0,9))^^2);
(D6) 100*(s[9]+s[8]+s[7]+s[6]+s[5]+s[4]+s[3]+s[2]+s[1]+s[0])
ただし一般に条件によってマッチ元と同じものを返さねばならないルールのと
きは defrule とapply1のスタイルがよい。
この例題はおもちゃであるが 似たような例は研究ではしばしばある。
3章のletとletsimpとともにこれらのマスターは仕事に使えるかどうかの大事
なところだろう。



次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch