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> | |<code>multiIndices[d_,g_] := Subsets[Range[d],{g}]</code> | ||
Line 1,544: | Line 1,544: | ||
<code> | <code>multiFormToTensorForm[{w_, d_, g_}] := SymmetrizedArray[MapThread[Rule[#1,#2]&,{multiIndices[d,g],w}],ConstantArray[d,g],Antisymmetric[All]]</code> | ||
<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]&, | <code> Map[If[KeyExistsQ[assoc, #],assoc[#], 0]&,multiIndices[d,g]]</code> | ||
<code>]</code> | <code>]</code> | ||
<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* | <code> If[g==0,{w,dualG},{signTweak*tensorFormToMultiForm[{HodgeDual[multiFormToTensorForm[{w,d,absG}]],d,absDualG}], dualG}]</code> | ||
<code>]</code> | <code>]</code> | ||
<code> | <code>multiDual[{{107,-87,72,-49,31},4}]</code> | ||
<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} |