public GaNumMultivector GetNumBlade(int gaSpaceDim, int grade) { var vSpaceDim = gaSpaceDim.ToVSpaceDimension(); if (grade < 0 || grade > vSpaceDim) { return(GaNumMultivector.CreateZero(gaSpaceDim)); } if (grade <= 1 || grade >= vSpaceDim - 1) { return(GetNumKVector(gaSpaceDim, grade)); } var mv = GetNumVector(gaSpaceDim); grade--; while (grade > 0) { var v = GetNumVector(gaSpaceDim); var mv1 = mv.Op(v); if (mv1.IsZero()) { continue; } mv = mv1; grade--; } return(mv); }
public GaNumMultivector GetNumTerm(int gaSpaceDim, int basisBladeId, double minValue, double maxValue) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); mv.SetTermCoef(basisBladeId, GetScalar(minValue, maxValue)); return(mv); }
public GaNumMultivector GetNumTerm(int gaSpaceDim, int grade, int index, double minValue, double maxValue) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); var basisBladeId = GMacMathUtils.BasisBladeId(grade, index); mv.SetTermCoef(basisBladeId, GetScalar(minValue, maxValue)); return(mv); }
public GaNumMultivector ToMultivector() { var mv = GaNumMultivector.CreateZero(GaSpaceDimension); foreach (var term in _termsDictionary.Where(p => !p.Value.IsNearZero())) { mv.SetTermCoef(term.Key, term.Value); } return(mv); }
public override IGaNumMultivector this[int id1] { get { IGaNumMultivector basisBladeMv; _basisBladeMaps.TryGetValue(id1, out basisBladeMv); return(basisBladeMv ?? GaNumMultivector.CreateZero(TargetGaSpaceDimension)); } }
public override IGaNumMultivector this[int id1, int id2, int id3] { get { IGaNumMultivector basisBladeMv; return (!_basisBladesMaps.TryGetValue(id1, id2, id3, out basisBladeMv) || ReferenceEquals(basisBladeMv, null) ? GaNumMultivector.CreateZero(TargetGaSpaceDimension) : basisBladeMv); } }
public GaNumMultivector GetNumVector(int gaSpaceDim) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); foreach (var basisBladeId in GMacMathUtils.BasisBladeIDsOfGrade(mv.VSpaceDimension, 1)) { mv.SetTermCoef(basisBladeId, GetScalar()); } return(mv); }
public GaNumMultivector GetNumKVector(int gaSpaceDim, int grade, double minValue, double maxValue) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); foreach (var basisBladeId in GMacMathUtils.BasisBladeIDsOfGrade(mv.VSpaceDimension, grade)) { mv.SetTermCoef(basisBladeId, GetScalar(minValue, maxValue)); } return(mv); }
public GaNumMultivector GetNumMultivectorByTerms(int gaSpaceDim, IEnumerable <int> basisBladeIDs) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); foreach (var basisBladeId in basisBladeIDs) { mv.SetTermCoef(basisBladeId, GetScalar()); } return(mv); }
public GaNumMultivector GetNumMultivectorFull(int gaSpaceDim, double minValue, double maxValue) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); for (var basisBladeId = 0; basisBladeId < gaSpaceDim; basisBladeId++) { mv.SetTermCoef(basisBladeId, GetScalar(minValue, maxValue)); } return(mv); }
public override IGaNumMultivector this[int id1, int id2] { get { IGaNumMultivector resultMv; _basisBladesMaps.TryGetValue(id1, id2, out resultMv); return(resultMv ?? GaNumMultivector.CreateZero(TargetGaSpaceDimension)); } }
public void Setup() { _randGen = new GMacRandomGenerator(10); _frame = GaNumFrame.CreateConformal(5); //_frame.SelectBilinearProductsImplementation(ProductsImplementation); _mv1 = _randGen.GetNumMultivectorFull(_frame.GaSpaceDimension); _mv2 = _mv1.Terms.ToDictionary(t => t.Key, t => t.Value); _mv3 = GaNumMultivector.CreateZero(_frame.GaSpaceDimension); //_mv4 = new Dictionary<int, double>(); //_mv5 = new double[_frame.GaSpaceDimension]; }
public GaNumMultivector GetVectorPart() { var mv = GaNumMultivector.CreateZero(GaSpaceDimension); foreach (var id in GMacMathUtils.BasisVectorIDs(VSpaceDimension)) { var coef = this[id]; if (!coef.IsNearZero()) { mv.SetTermCoef(id, coef); } } return(mv); }
public GaNumMultivector GetNumMultivectorByGrades(int gaSpaceDim, params int[] grades) { var mv = GaNumMultivector.CreateZero(gaSpaceDim); var basisBladeIDs = GMacMathUtils.BasisBladeIDsOfGrades( mv.VSpaceDimension, grades ); foreach (var basisBladeId in basisBladeIDs) { mv.SetTermCoef(basisBladeId, GetScalar()); } return(mv); }
public static Dictionary <int, GaNumMultivector> ToOutermorphismDictionary(this Dictionary <int, IGaNumMultivector> linearVectorMaps, int domainVSpaceDim, int targetVSpaceDim) { var domainGaSpaceDim = domainVSpaceDim.ToGaSpaceDimension(); var targetGaSpaceDim = targetVSpaceDim.ToGaSpaceDimension(); var omMapDict = new Dictionary <int, GaNumMultivector>(); //Add unit scalar as the image of the 0-basis blade omMapDict.Add(0, GaNumMultivector.CreateUnitScalar(targetGaSpaceDim)); for (var id = 1; id <= domainGaSpaceDim - 1; id++) { GaNumMultivector basisBladeImage; if (id.IsValidBasisVectorId()) { //Add images of vector basis blades IGaNumMultivector mv; linearVectorMaps.TryGetValue(id.BasisBladeIndex(), out mv); basisBladeImage = mv?.GetVectorPart() ?? GaNumMultivector.CreateZero(targetGaSpaceDim); } else { //Add images of a higher dimensional basis blade using the outer product //of the images of two lower dimensional basis blades int id1, id2; id.SplitBySmallestBasicPattern(out id1, out id2); basisBladeImage = omMapDict[id1].Op(omMapDict[id2]); } if (!basisBladeImage.IsZero()) { omMapDict.Add(id, basisBladeImage); } } return(omMapDict); }
public GaNumMultivector ToMultivector() { var mv = GaNumMultivector.CreateZero(GaSpaceDimension); var id = 0; foreach (var coef in _termsArray) { if (!coef.IsNearZero()) { mv.SetTermCoef(id, coef); } id++; } return(mv); }