Douglas Blumeyer's RTT How-To: Difference between revisions

Cmloegcmluin (talk | contribs)
multimaps: outer product explanation of wedge product
Cmloegcmluin (talk | contribs)
more on duals: use multiDual here for later compatibility with full set where the (anti-)null-space will be plain dual
Line 1,538: Line 1,538:
!output
!output
|-
|-
|<code>eaIndices[d_,g_] := Subsets[Range[d],{g}]</code>
|<code>multiIndices[d_,g_] := Subsets[Range[d],{g}]</code>




Line 1,544: Line 1,544:




<code>eaFormToTensorForm[{w_, d_, g_}] := SymmetrizedArray[MapThread[Rule[#1,#2]&,{eaIndices[d,g],w}],ConstantArray[d,g],Antisymmetric[All]]</code>
<code>multiFormToTensorForm[{w_, d_, g_}] := SymmetrizedArray[MapThread[Rule[#1,#2]&,{multiIndices[d,g],w}],ConstantArray[d,g],Antisymmetric[All]]</code>




<code>tensorFormToEaForm[{m_, d_, g_}]:= Module[{assoc},</code>
<code>tensorFormToMultiForm[{m_, d_, g_}]:= Module[{assoc},</code>


<code>  assoc = Association[SymmetrizedArrayRules[m]];</code>
<code>  assoc = Association[SymmetrizedArrayRules[m]];</code>


<code>  Map[If[KeyExistsQ[assoc, #],assoc[#], 0]&,eaIndices[d,g]]</code>
<code>  Map[If[KeyExistsQ[assoc, #],assoc[#], 0]&,multiIndices[d,g]]</code>


<code>]</code>
<code>]</code>




<code>dual[{w_, g_}, inputDualG_:0] :=Module[{d, absG,signG, absDualG, dualG, signTweak},</code>
<code>multiDual[{w_, g_}, inputDualG_:0] :=Module[{d, absG, signG, absDualG, dualG, signTweak},</code>


<code>  absG = Abs[g];</code>
<code>  absG = Abs[g];</code>
Line 1,570: Line 1,570:
<code>  signTweak = If[signG==1&&Mod[absG(d-absG),2]==1,-1,1];</code>
<code>  signTweak = If[signG==1&&Mod[absG(d-absG),2]==1,-1,1];</code>


<code>  If[g==0,{w,dualG},{signTweak*tensorFormToEaForm[{HodgeDual[eaFormToTensorForm[{w,d,absG}]],d,absDualG}], dualG}]</code>
<code>  If[g==0,{w,dualG},{signTweak*tensorFormToMultiForm[{HodgeDual[multiFormToTensorForm[{w,d,absG}]],d,absDualG}], dualG}]</code>


<code>]</code>
<code>]</code>




<code>dual[{{107,-87,72,-49,31},4}]</code>
<code>multiDual[{{107,-87,72,-49,31},4}]</code>


<code>dual[{{31,49,72,87,107},-1}]</code>
<code>multiDual[{{31,49,72,87,107},-1}]</code>
|{{31,49,72,87,107},-1}
|{{31,49,72,87,107},-1}
{{107,-87,72,-49,31},4}
{{107,-87,72,-49,31},4}