public GaSymMultivectorBinaryTree3D(int domainVSpaceDimension1, int domainVSpaceDimension2, int domainVSpaceDimension3, int targetVSpaceDimension) { RootNode = new GMacBinaryTree <GaSymMultivectorBinaryTree2D>(domainVSpaceDimension1); DomainVSpaceDimension2 = domainVSpaceDimension2; DomainVSpaceDimension3 = domainVSpaceDimension3; TargetVSpaceDimension = targetVSpaceDimension; }
internal static GaNumMultivector CreateCopy(GMacBinaryTree <double> termsTree) { var resultMv = new GaNumMultivector(termsTree.TreeDepth.ToGaSpaceDimension()); resultMv.TermsTree.FillFromTree(termsTree); return(resultMv); }
public static GaSymMultivector CreateCopy(GMacBinaryTree <Expr> termsTree) { var gaSpaceDimension = termsTree.TreeDepth.ToGaSpaceDimension(); var resultMv = new GaSymMultivector(gaSpaceDimension); resultMv.TermsTree.FillFromTree(termsTree); return(resultMv); }
public static IGaNumMultivectorTemp MapToTemp(this GMacBinaryTree <IGaNumMapUnilinear> mappingTree, GaNumMultivector mv1, GaNumMultivector mv2, int targetGaSpaceDimension) { if (mv1.GaSpaceDimension != mappingTree.TreeDepth.ToGaSpaceDimension()) { throw new GMacNumericException("Multivector size mismatch"); } var resultMv = GaNumMultivector.CreateZeroTemp(targetGaSpaceDimension); var nodeStack1 = mappingTree.CreateNodesStack(); var nodeStack2 = mv1.TermsTree.CreateNodesStack(); while (nodeStack1.Count > 0) { var node1 = nodeStack1.Pop(); var node2 = nodeStack2.Pop(); if (node1.IsLeafNode && !ReferenceEquals(node1.Value, null)) { var leafScalar = node2.Value; var leafMv = node1.Value.MapToTemp(mv2); resultMv.AddFactors( leafScalar, leafMv ); continue; } if (node1.HasChildNode0 && node2.HasChildNode0) { nodeStack1.Push(node1.ChildNode0); nodeStack2.Push(node2.ChildNode0); } if (node1.HasChildNode1 && node2.HasChildNode1) { nodeStack1.Push(node1.ChildNode1); nodeStack2.Push(node2.ChildNode1); } } return(resultMv); }
//public static BinaryTreeNode<MathematicaScalar> ComputeBasisBladesSignatures(this IReadOnlyList<MathematicaScalar> basisVectorsSignaturesList) //{ // var vSpaceDim = basisVectorsSignaturesList.Count; // var bbsList = new BinaryTreeNode<MathematicaScalar>(vSpaceDim); // bbsList.SetValue(0ul, Constants.One); // for (var m = 0; m < vSpaceDim; m++) // { // var bvs = basisVectorsSignaturesList[m]; // if (bvs.IsNullOrZero()) continue; // bbsList.SetValue(1ul << m, bvs); // } // var idsSeq = FrameUtils.BasisBladeIDsSortedByGrade(vSpaceDim, 2); // foreach (var id in idsSeq) // { // int id1, id2; // id.SplitBySmallestBasisVectorId(out id1, out id2); // var bvs1 = bbsList.GetValue((ulong)id1); // if (bvs1.IsNullOrZero()) continue; // var bvs2 = bbsList.GetValue((ulong)id2); // if (bvs2.IsNullOrZero()) continue; // bbsList.SetValue((ulong)id, bvs1 * bvs2); // } // return bbsList; //} public static GMacBinaryTree <int> ComputeBasisBladesSignatures(this IReadOnlyList <int> basisVectorsSignaturesList) { var vSpaceDim = basisVectorsSignaturesList.Count; var bbsList = new GMacBinaryTree <int>(vSpaceDim); bbsList.SetLeafValue(0ul, 1); for (var m = 0; m < vSpaceDim; m++) { var bvs = basisVectorsSignaturesList[m]; if (bvs == 0) { continue; } bbsList.SetLeafValue(1ul << m, bvs); } var idsSeq = GMacMathUtils.BasisBladeIDsSortedByGrade(vSpaceDim, 2); foreach (var id in idsSeq) { int id1, id2; id.SplitBySmallestBasisVectorId(out id1, out id2); var bvs1 = bbsList.GetLeafValue((ulong)id1); if (bvs1 == 0) { continue; } var bvs2 = bbsList.GetLeafValue((ulong)id2); if (bvs2 == 0) { continue; } bbsList.SetLeafValue((ulong)id, bvs1 * bvs2); } return(bbsList); }
private GaSymMapUnilinearTree(int domainVSpaceDim, int targetVSpaceDim) { DomainVSpaceDimension = domainVSpaceDim; _basisBladeMaps = new GMacBinaryTree <IGaSymMultivector>(targetVSpaceDim); }
private GaSymMultivector(int gaSpaceDim) { CasInterface = SymbolicUtils.Cas; VSpaceDimension = gaSpaceDim.ToVSpaceDimension(); TermsTree = new GMacBinaryTree <Expr>(VSpaceDimension); }
public GaSymMultivectorBinaryTree1D(int domainVSpaceDimension, int targetVSpaceDimension) { RootNode = new GMacBinaryTree <IGaSymMultivector>(domainVSpaceDimension); TargetVSpaceDimension = targetVSpaceDimension; }
private GaSymMultivectorTempTree(int gaSpaceDim) { _termsTree = new GMacBinaryTree <List <Expr> >(gaSpaceDim.ToVSpaceDimension()); }
private GaNumMetricOrthogonal(int vSpaceDim) { RootNode = new GMacBinaryTree <double>(vSpaceDim); }
private GaSymMetricOrthogonal(int vSpaceDim) { RootNode = new GMacBinaryTree <Expr>(vSpaceDim); }
private GaNumMultivector(int gaSpaceDim) { VSpaceDimension = gaSpaceDim.ToVSpaceDimension(); TermsTree = new GMacBinaryTree <double>(VSpaceDimension); }
public GaSymScalarBinaryTree2D(int vSpaceDimension) { RootNode = new GMacBinaryTree <GaSymScalarBinaryTree1D>(vSpaceDimension); }
public static GMacBinaryTree <MathematicaScalar> ToSymbolicTree(this GMacBinaryTree <double> rootTreeNode) { return(rootTreeNode?.MapLeafValues( i => MathematicaScalar.Create(Cas, i) )); }
private GaNumMapUnilinearTree(int targetVSpaceDim) { DomainVSpaceDimension = targetVSpaceDim; BasisBladesMapTree = new GMacBinaryTree <IGaNumMultivector>(targetVSpaceDim); }