public virtual IAlgebraicExpression InnerProduct(TVector other) { if (other is IExplicitVectorValue <TVector, TBasis> v) { IList <IAlgebraicExpression> squares = new List <IAlgebraicExpression>(); foreach (var term in this) { if (v.ContainsBasisTerm(term.BasisVector)) { squares.Add(term.Coefficient.Multiply(v[term.BasisVector])); } } return(IAlgebraicExpression.Sum(squares)); } return(IExplicitGeneralizedVector <TVector, TBasis> .InnerProductOperation(this.AsExpressionType(), other)); }