|
|
| Line 1: |
Line 1: |
| <h2>IMPORTED REVISION FROM WIKISPACES</h2>
| | (code language: [http://en.wikipedia.org/wiki/Maple_%28software%29 Maple]) |
| This is an imported revision from Wikispaces. The revision metadata is included below for reference:<br>
| |
| : This revision was by author [[User:spt3125|spt3125]] and made on <tt>2014-05-01 22:30:57 UTC</tt>.<br>
| |
| : The original revision id was <tt>505938090</tt>.<br>
| |
| : The revision comment was: <tt></tt><br>
| |
| The revision contents are below, presented both in the original Wikispaces Wikitext format, and in HTML exactly as Wikispaces rendered it.<br>
| |
| <h4>Original Wikitext content:</h4>
| |
| <div style="width:100%; max-height:400pt; overflow:auto; background-color:#f8f9fa; border: 1px solid #eaecf0; padding:0em"><pre style="margin:0px;border:none;background:none;word-wrap:break-word;white-space: pre-wrap ! important" class="old-revision-html">(code language: [[http://en.wikipedia.org/wiki/Maple_%28software%29|Maple]])
| |
|
| |
|
| ---- | | ----- |
|
| |
|
| | ech := proc(l) |
| | |
| | <ol><li>reduced row echelon form of listlist l</li></ol>local M; |
|
| |
|
| ech := proc(l)
| |
| # reduced row echelon form of listlist l
| |
| local M;
| |
| M := Matrix(l); | | M := Matrix(l); |
| | |
| convert(LinearAlgebra[ReducedRowEchelonForm](M), listlist) end: | | convert(LinearAlgebra[ReducedRowEchelonForm](M), listlist) end: |
|
| |
|
| relpar := proc(u, v) | | relpar := proc(u, v) |
| # relative parity of two permutations
| | |
| local t; | | <ol><li>relative parity of two permutations</li></ol>local t; |
| | |
| t := table('antisymmetric'); | | t := table('antisymmetric'); |
| | |
| t[op(u)] := 1; | | t[op(u)] := 1; |
| | |
| t[op(v)]; | | t[op(v)]; |
| | |
| end: | | end: |
|
| |
|
| pari := proc(u) | | pari := proc(u) |
| # parity of permutation u
| | |
| local v; | | <ol><li>parity of permutation u</li></ol>local v; |
| | |
| v := sort(u); | | v := sort(u); |
| | |
| relpar(u, v) end: | | relpar(u, v) end: |
|
| |
|
| zerlist := proc(n) | | zerlist := proc(n) |
| # list of n 0s
| | |
| local i, u; | | <ol><li>list of n 0s</li></ol>local i, u; |
| | |
| u := NULL; | | u := NULL; |
| | |
| for i from 1 to n do | | for i from 1 to n do |
| | |
| u := u,0 od; | | u := u,0 od; |
| | |
| [u] end: | | [u] end: |
|
| |
|
| denomlist := proc(w) | | denomlist := proc(w) |
| | |
| map(denom, w) end: | | map(denom, w) end: |
|
| |
|
| cleardenom := proc(w) | | cleardenom := proc(w) |
| | |
| local n; | | local n; |
| | |
| n := ilcm(op(denomlist(w))); | | n := ilcm(op(denomlist(w))); |
| | |
| n * w end: | | n * w end: |
|
| |
|
| vec2e := proc(w) | | vec2e := proc(w) |
| # rref temperament identifier from val list or projection matrix w
| | |
| local i, u, v, z; | | <ol><li>rref temperament identifier from val list or projection matrix w</li></ol>local i, u, v, z; |
| | |
| u := ech(w); | | u := ech(w); |
| | |
| z := NULL; | | z := NULL; |
| | |
| for i from 1 to nops(u) do | | for i from 1 to nops(u) do |
| | |
| v := u[i]; | | v := u[i]; |
| | |
| if not convert(v, set)={0} then | | if not convert(v, set)={0} then |
| | |
| z := z,v fi od: | | z := z,v fi od: |
| | |
| [z] end: | | [z] end: |
|
| |
|
| wedgie := proc(w) | | wedgie := proc(w) |
| # reduction of multivector w to wedgie
| | |
| local i, n, u; | | <ol><li>reduction of multivector w to wedgie</li></ol>local i, n, u; |
| | |
| u := cleardenom(w); | | u := cleardenom(w); |
| | |
| n := igcd(op(u)); | | n := igcd(op(u)); |
| | |
| if n=0 then RETURN(w) fi; | | if n=0 then RETURN(w) fi; |
| | |
| u := u/n; | | u := u/n; |
| | |
| for i from 1 to nops(w) do | | for i from 1 to nops(w) do |
| | |
| if not u[i]=0 then | | if not u[i]=0 then |
| | |
| if u[i]>0 then RETURN(u) fi; | | if u[i]>0 then RETURN(u) fi; |
| | |
| RETURN(-u) fi od end: | | RETURN(-u) fi od end: |
|
| |
|
| mvec := proc(l) | | mvec := proc(l) |
| # multivector wedge product of vector list l
| | |
| local c, i, j, k, q, r, t, u, v, w; | | <ol><li>multivector wedge product of vector list l</li></ol>local c, i, j, k, q, r, t, u, v, w; |
| | |
| u := combinat[permute](nops(l)); | | u := combinat[permute](nops(l)); |
| | |
| c := combinat[choose](nops(l[1]), nops(l)); | | c := combinat[choose](nops(l[1]), nops(l)); |
| | |
| w := zerlist(nops(c)); | | w := zerlist(nops(c)); |
| | |
| for i from 1 to nops(c) do | | for i from 1 to nops(c) do |
| | |
| t := c[i]; | | t := c[i]; |
| | |
| r := 0; | | r := 0; |
| | |
| for j from 1 to nops(u) do | | for j from 1 to nops(u) do |
| | |
| v := u[j]; | | v := u[j]; |
| | |
| q := pari(v); | | q := pari(v); |
| | |
| for k from 1 to nops(v) do | | for k from 1 to nops(v) do |
| | |
| q := q * l[v[k], t[k]] od; | | q := q * l[v[k], t[k]] od; |
| | |
| r := r+q od; | | r := r+q od; |
| | |
| w[i] := w[i]+r od; | | w[i] := w[i]+r od; |
| | |
| w end: | | w end: |
|
| |
|
| wedgie2e := proc(w, n, p) | | wedgie2e := proc(w, n, p) |
| # rank n p-limit multival to rref
| | |
| local b, c, i, j, k, m, u, v, x, y, z; | | <ol><li>rank n p-limit multival to rref</li></ol>local b, c, i, j, k, m, u, v, x, y, z; |
| | |
| m := numtheory[pi](p); | | m := numtheory[pi](p); |
| | |
| b := combinat[choose](m, n); | | b := combinat[choose](m, n); |
| | |
| c := combinat[choose](m, n-1); | | c := combinat[choose](m, n-1); |
| | |
| z := NULL; | | z := NULL; |
| | |
| for i from 1 to nops(c) do | | for i from 1 to nops(c) do |
| | |
| u := c[i]; | | u := c[i]; |
| | |
| v := NULL; | | v := NULL; |
| | |
| for j from 1 to m do | | for j from 1 to m do |
| | |
| y := [op(u), j]; | | y := [op(u), j]; |
| | |
| if nops(convert(y, set))<n then v:=v,0 fi; | | if nops(convert(y, set))<n then v:=v,0 fi; |
| | |
| x := sort(y); | | x := sort(y); |
| | |
| for k from 1 to nops(b) do | | for k from 1 to nops(b) do |
| | |
| if x=b[k] then v := v,relpar(b[k], y)*w[k] fi od od; | | if x=b[k] then v := v,relpar(b[k], y)*w[k] fi od od; |
| | |
| v := [v]; | | v := [v]; |
| | |
| z := z,v od; | | z := z,v od; |
| | |
| vec2e([z]) end: | | vec2e([z]) end: |
|
| |
|
| e2wedgie := proc(l) | | e2wedgie := proc(l) |
| # rref l to wedgie
| | |
| wedgie(mvec(l)) end: | | <ol><li>rref l to wedgie</li></ol>wedgie(mvec(l)) end: |
|
| |
|
| e2frob := proc(l) | | e2frob := proc(l) |
| # rref or normal val list to Frobenius projection map
| | |
| local U, V; | | <ol><li>rref or normal val list to Frobenius projection map</li></ol>local U, V; |
| | |
| U := Matrix(l); | | U := Matrix(l); |
| | |
| V := LinearAlgebra[Transpose](U); | | V := LinearAlgebra[Transpose](U); |
| | |
| convert(V.(U.V)^(-1).U, listlist) end: | | convert(V.(U.V)^(-1).U, listlist) end: |
|
| |
|
| dualproj := proc(w) | | dualproj := proc(w) |
| # dual projection map
| | |
| convert(LinearAlgebra[IdentityMatrix](nops(w[1])), listlist)-w end: | | <ol><li>dual projection map</li></ol>convert(LinearAlgebra[IdentityMatrix](nops(w[1])), listlist)-w end: |
|
| |
|
| norc2e := proc(l) | | norc2e := proc(l) |
| # normal comma list to rref
| | |
| local M, N; | | <ol><li>normal comma list to rref</li></ol>local M, N; |
| | |
| M := Matrix(l); | | M := Matrix(l); |
| | |
| N := LinearAlgebra[NullSpace](M); | | N := LinearAlgebra[NullSpace](M); |
| | |
| N := convert(N, list); | | N := convert(N, list); |
| | |
| N := Matrix(N); | | N := Matrix(N); |
| | |
| N := LinearAlgebra[Transpose](N); | | N := LinearAlgebra[Transpose](N); |
| ech(convert(N, listlist)) end:</pre></div> | | |
| <h4>Original HTML content:</h4>
| | ech(convert(N, listlist)) end: |
| <div style="width:100%; max-height:400pt; overflow:auto; background-color:#f8f9fa; border: 1px solid #eaecf0; padding:0em"><pre style="margin:0px;border:none;background:none;word-wrap:break-word;width:200%;white-space: pre-wrap ! important" class="old-revision-html"><html><head><title>Basic abstract temperament translation code</title></head><body>(code language: <a class="wiki_link_ext" href="http://en.wikipedia.org/wiki/Maple_%28software%29" rel="nofollow">Maple</a>)<br />
| | [[Category:algorithm]] |
| <br />
| | [[Category:code]] |
| <hr />
| | [[Category:maple]] |
| <br />
| |
| <br />
| |
| ech := proc(l)<br />
| |
| <ol><li>reduced row echelon form of listlist l</li></ol>local M;<br />
| |
| M := Matrix(l);<br />
| |
| convert(LinearAlgebra[ReducedRowEchelonForm](M), listlist) end:<br />
| |
| <br />
| |
| relpar := proc(u, v)<br />
| |
| <ol><li>relative parity of two permutations</li></ol>local t;<br />
| |
| t := table('antisymmetric');<br />
| |
| t[op(u)] := 1;<br />
| |
| t[op(v)];<br />
| |
| end:<br />
| |
| <br />
| |
| pari := proc(u)<br />
| |
| <ol><li>parity of permutation u</li></ol>local v;<br />
| |
| v := sort(u);<br />
| |
| relpar(u, v) end:<br />
| |
| <br />
| |
| zerlist := proc(n)<br />
| |
| <ol><li>list of n 0s</li></ol>local i, u;<br />
| |
| u := NULL;<br />
| |
| for i from 1 to n do<br />
| |
| u := u,0 od;<br />
| |
| [u] end:<br />
| |
| <br />
| |
| denomlist := proc(w)<br />
| |
| map(denom, w) end:<br />
| |
| <br />
| |
| cleardenom := proc(w)<br />
| |
| local n;<br />
| |
| n := ilcm(op(denomlist(w)));<br />
| |
| n * w end:<br />
| |
| <br />
| |
| vec2e := proc(w)<br />
| |
| <ol><li>rref temperament identifier from val list or projection matrix w</li></ol>local i, u, v, z;<br />
| |
| u := ech(w);<br />
| |
| z := NULL;<br />
| |
| for i from 1 to nops(u) do<br />
| |
| v := u[i];<br />
| |
| if not convert(v, set)={0} then<br />
| |
| z := z,v fi od:<br />
| |
| [z] end:<br /> | |
| <br />
| |
| wedgie := proc(w)<br />
| |
| <ol><li>reduction of multivector w to wedgie</li></ol>local i, n, u;<br />
| |
| u := cleardenom(w);<br />
| |
| n := igcd(op(u));<br />
| |
| if n=0 then RETURN(w) fi;<br />
| |
| u := u/n;<br />
| |
| for i from 1 to nops(w) do<br />
| |
| if not u[i]=0 then<br />
| |
| if u[i]&gt;0 then RETURN(u) fi;<br />
| |
| RETURN(-u) fi od end:<br />
| |
| <br />
| |
| mvec := proc(l)<br />
| |
| <ol><li>multivector wedge product of vector list l</li></ol>local c, i, j, k, q, r, t, u, v, w;<br />
| |
| u := combinat[permute](nops(l));<br />
| |
| c := combinat[choose](nops(l[1]), nops(l));<br />
| |
| w := zerlist(nops(c));<br />
| |
| for i from 1 to nops(c) do<br />
| |
| t := c[i];<br />
| |
| r := 0;<br />
| |
| for j from 1 to nops(u) do<br />
| |
| v := u[j];<br />
| |
| q := pari(v);<br />
| |
| for k from 1 to nops(v) do<br />
| |
| q := q * l[v[k], t[k]] od;<br />
| |
| r := r+q od;<br />
| |
| w[i] := w[i]+r od;<br />
| |
| w end:<br />
| |
| <br />
| |
| wedgie2e := proc(w, n, p)<br />
| |
| <ol><li>rank n p-limit multival to rref</li></ol>local b, c, i, j, k, m, u, v, x, y, z;<br />
| |
| m := numtheory[pi](p);<br />
| |
| b := combinat[choose](m, n);<br />
| |
| c := combinat[choose](m, n-1);<br />
| |
| z := NULL;<br />
| |
| for i from 1 to nops(c) do<br />
| |
| u := c[i];<br />
| |
| v := NULL;<br />
| |
| for j from 1 to m do<br />
| |
| y := [op(u), j];<br />
| |
| if nops(convert(y, set))&lt;n then v:=v,0 fi;<br />
| |
| x := sort(y);<br />
| |
| for k from 1 to nops(b) do<br />
| |
| if x=b[k] then v := v,relpar(b[k], y)*w[k] fi od od;<br />
| |
| v := [v];<br />
| |
| z := z,v od;<br />
| |
| vec2e([z]) end:<br />
| |
| <br />
| |
| e2wedgie := proc(l)<br />
| |
| <ol><li>rref l to wedgie</li></ol>wedgie(mvec(l)) end:<br />
| |
| <br />
| |
| e2frob := proc(l)<br />
| |
| <ol><li>rref or normal val list to Frobenius projection map</li></ol>local U, V;<br />
| |
| U := Matrix(l);<br />
| |
| V := LinearAlgebra[Transpose](U);<br />
| |
| convert(V.(U.V)^(-1).U, listlist) end:<br />
| |
| <br />
| |
| dualproj := proc(w)<br />
| |
| <ol><li>dual projection map</li></ol>convert(LinearAlgebra[IdentityMatrix](nops(w[1])), listlist)-w end:<br />
| |
| <br />
| |
| norc2e := proc(l)<br />
| |
| <ol><li>normal comma list to rref</li></ol>local M, N;<br />
| |
| M := Matrix(l);<br />
| |
| N := LinearAlgebra[NullSpace](M);<br />
| |
| N := convert(N, list);<br />
| |
| N := Matrix(N);<br />
| |
| N := LinearAlgebra[Transpose](N);<br />
| |
| ech(convert(N, listlist)) end:</body></html></pre></div>
| |