public static QsValue InvertedQuantityName(QsParameter value) { QsScalar s = value.QsNativeValue as QsScalar; if (s != null) { var InvertedDimension = s.Unit.UnitDimension.Invert(); var qp = QsParameter.MakeParameter(null, InvertedDimension.ToString()); return(Quantity.FromDimension(qp)); } return(new QsText("Works on scalar quantities")); }
public static QsValue Log(QsParameter val, QsParameter newBase) { if (val.IsQsValue) { if (val.ParameterValue is QsScalar) { AnyQuantity <double> q = ((QsScalar)val.ParameterValue).NumericalQuantity; if (q.Dimension.IsDimensionless) { double r = System.Math.Log(q.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value); return(r.ToQuantity().ToScalarValue()); } else { throw new QsInvalidInputException("Non dimensionless number"); } } else if (val.ParameterValue is QsVector) { QsVector vec = (QsVector)val.ParameterValue; QsVector rv = new QsVector(vec.Count); foreach (QsScalar var in vec) { if (var.NumericalQuantity.Dimension.IsDimensionless) { double r = System.Math.Log(var.NumericalQuantity.Value, ((QsScalar)newBase.ParameterValue).NumericalQuantity.Value); rv.AddComponent(r.ToQuantity().ToScalar()); } else { throw new QsInvalidInputException("Non dimensionless component"); } } return(rv); } else if (val.ParameterValue is QsMatrix) { QsMatrix mat = (QsMatrix)val.ParameterValue; QsMatrix rm = new QsMatrix(); foreach (var vec in mat.Rows) { rm.AddVector((QsVector)Log(QsParameter.MakeParameter(vec, string.Empty))); } return(rm); } else { return(null); } } else { //not known may be ordinary string return(null); } }