Changeset 16543 for trunk/HeuristicLab.Problems.DataAnalysis.Symbolic
- Timestamp:
- 01/21/19 18:07:37 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Converters/DerivativeCalculator.cs
r16294 r16543 48 48 private static readonly Cosine cosSy = new Cosine(); 49 49 private static readonly Square sqrSy = new Square(); 50 private static readonly Absolute absSy = new Absolute(); 51 private static readonly SquareRoot sqrtSy = new SquareRoot(); 50 52 51 53 public static ISymbolicExpressionTreeNode Derive(ISymbolicExpressionTreeNode branch, string variableName) { … … 138 140 return Product(Div(CreateConstant(1.0), Product(CreateConstant(2.0), f)), Derive(u, variableName)); 139 141 } 142 if (branch.Symbol is CubeRoot) { 143 var f = (ISymbolicExpressionTreeNode)branch.Clone(); 144 var u = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone(); 145 return Product(Div(CreateConstant(1.0), Product(CreateConstant(3.0), Square(f))), Derive(u, variableName)); 146 } 147 if (branch.Symbol is Cube) { 148 var f = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone(); 149 return Product(Product(CreateConstant(3.0), Square(f)), Derive(f, variableName)); 150 } 151 if (branch.Symbol is Absolute) { 152 var f = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone(); 153 var absf = Abs((ISymbolicExpressionTreeNode)f.Clone()); 154 return Product(Div(f, absf), Derive(f, variableName)); 155 } 156 if (branch.Symbol is AnalyticQuotient) { 157 // aq(a(x), b(x)) = a(x) / sqrt(b(x)²+1) 158 var a = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone(); 159 var b = (ISymbolicExpressionTreeNode)branch.GetSubtree(1).Clone(); 160 161 var definition = Div(a, SquareRoot(Sum(Square(b), CreateConstant(1.0)))); 162 return Derive(definition, variableName); 163 } 140 164 if (branch.Symbol is Sine) { 141 165 var u = (ISymbolicExpressionTreeNode)branch.GetSubtree(0).Clone(); … … 195 219 return cos; 196 220 } 221 private static ISymbolicExpressionTreeNode Abs(ISymbolicExpressionTreeNode f) { 222 var abs = absSy.CreateTreeNode(); 223 abs.AddSubtree(f); 224 return abs; 225 } 197 226 private static ISymbolicExpressionTreeNode Square(ISymbolicExpressionTreeNode f) { 198 227 var sqr = sqrSy.CreateTreeNode(); 199 228 sqr.AddSubtree(f); 200 229 return sqr; 230 } 231 private static ISymbolicExpressionTreeNode SquareRoot(ISymbolicExpressionTreeNode f) { 232 var sqrt = sqrtSy.CreateTreeNode(); 233 sqrt.AddSubtree(f); 234 return sqrt; 201 235 } 202 236 … … 221 255 !(n.Symbol is Square) && 222 256 !(n.Symbol is SquareRoot) && 257 !(n.Symbol is Cube) && 258 !(n.Symbol is CubeRoot) && 259 !(n.Symbol is Absolute) && 260 !(n.Symbol is AnalyticQuotient) && 223 261 !(n.Symbol is Sine) && 224 262 !(n.Symbol is Cosine) &&
Note: See TracChangeset
for help on using the changeset viewer.