/// <summary> /// \/ * value operation is called gradient /// gradient over scalar field generate a vector /// </summary> /// <param name="value"></param> /// <returns></returns> public override QsValue MultiplyOperation(QsValue value) { var fscalar = value as QsScalar; if (!Object.ReferenceEquals(fscalar, null)) { // Here we will multiply the nabla \/ * with @function if (!Object.ReferenceEquals(fscalar.FunctionQuantity, null)) { var f = fscalar.FunctionQuantity.Value; string[] prms = f.ParametersNames; SymbolicVariable fsv = f.ToSymbolicVariable(); QsVector GradientResult = new QsVector(); // we loop through the symbolic body and differentiate it with respect to the function parameters. // then accumulate the foreach (string prm in prms) { GradientResult.AddComponent(fsv.Differentiate(prm).ToQuantity().ToScalar()); } return(GradientResult); } } if (value is QsVector) { return(this.DelVector.MultiplyVector((QsVector)value)); } throw new NotImplementedException(@"Multiplication of \/ * " + value.GetType().Name + " Not implemented yet"); }
/// <summary> /// \/ x F is called curl of vector /// </summary> /// <param name="value"></param> /// <returns></returns> public override QsValue CrossProductOperation(QsValue value) { if (value is QsVector) { return(this.DelVector.CrossProductOperation((QsVector)value)); } throw new NotImplementedException(@"\/ x " + value.GetType().Name + " not implemented"); }