private static Function _mul(FunctionElement e1, FunctionElement e2) { return e1.ToVariableMultiplication() * e2; }
private static Function _mul(FunctionElement e, double d) { return e.ToVariableMultiplication() * d; }
public VariablesMulriplication AddVariable(FunctionElement variable) { if (this.HasVariable(variable.Name)) { var v = this.GetVariableByName(variable.Name); if (variable.MathFunctions.Count == 0 && v.MathFunctions.Count == 0) { // x * x v.ApplyFunction("power", new Function(2)); } else { if (variable.MathFunctions.Count == 1 && variable.MathFunctions.Last() == Function.GetMathFunction("power") && v.MathFunctions.Count == 1 && v.MathFunctions.Last() == Function.GetMathFunction("power")) { // sum powers v.MathFunctions[0] = new Tuple<MathFunctions.IMathFunction, FunctionElement[]>(Function.GetMathFunction("power"), new FunctionElement[] { v.MathFunctions[0].Item2[0] + variable.MathFunctions[0].Item2[0] }); } else { if (variable.MathFunctions.Count == 0 && v.MathFunctions.Count == 1 && v.MathFunctions[0] == Function.GetMathFunction("power")) { variable.ApplyFunction("power", v.MathFunctions[0].Item2[0] + 1); } else { if (v.MathFunctions.Count == 0 && variable.MathFunctions.Count == 1 && variable.MathFunctions[0] == Function.GetMathFunction("power")) { variable.MathFunctions[0] = new Tuple<MathFunctions.IMathFunction, FunctionElement[]>(Function.GetMathFunction("power"), new FunctionElement[] { variable.MathFunctions[0].Item2[0] + 1 }); } else { this.variables.Add(variable); } } } } } else { if (variable.IsDouble()) { if (this.variables.Count == 0) { this.variables.Add(new Variable("")); } this.Constant *= variable.ToDouble(); } else { if (variable is Function && variable.IsVariableMultiplication()) { var temp = variable.ToVariableMultiplication(); temp.variables.ForEach(v => this.AddVariable(v)); this.Constant *= temp.Constant; } else { this.variables.Add(variable); } } } return this; }