Class DerivationTree
- java.lang.Object
-
- org.spaceroots.rkcheck.DerivationTree
-
- All Implemented Interfaces:
- java.lang.Comparable
public class DerivationTree extends java.lang.Object implements java.lang.ComparableThis class implements rooted trees for determining order conditions in Runge-Kutta integrators.The determination of order conditions for Runge-Kutta integrators involves identifying all the terms of two developments:
- the Taylor serie of the continuous flow (the theoretical solution)
- the Taylor serie of the discrete flow (the Runge-Kutta process)
According to a theorem from Butcher (1963), this identification can be done using rooted trees representing the multilinear derivations of the Runge-Kutta process. This class implements this computation process for one term, as explained in the paper Runge-Kutta Methods, Trees, and Maple by Folkmar Bornemann, Center of Mathematical Sciences, Munich University of Technology, February 9, 2001.
The nodes in such trees are either leaf nodes without any subtree or nodes with subtrees. Leaf nodes represent the basic function f by itself. Nodes with subtrees represent an elementary differential written for example f'''(f'(f), f'(f), f), which means we compute the third order derivative according to three arguments which themselves represent other elementary differentials.
Only the derivation structure is considered, there is no reference to the base function f which should be differentiated according to this structure (it remains an unknown througout the order conditions determination process). This means the nodes do not contain data per se, so these trees should not be confused with trees used as containers (such as AVL trees or red-black trees).
-
-
Constructor Summary
Constructors Constructor and Description DerivationTree()Simple constructor.DerivationTree(DerivationTree tree)Copy constructor.DerivationTree(DerivationTree[] trees)Build a derivation tree from an array of sub-trees.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description intcompareTo(java.lang.Object o)Compares this tree with the specified object for order.booleanequals(java.lang.Object o)Check if the instance is equal to another tree.QuadraticSurdgetAlpha()Get the alpha factor of the tree.intgetDepth()Get the depth of the tree.longgetFactorial()Get the factorial of the tree.intgetOrder()Get the order of the tree.inthashCode()Returns the hash code value for this tree.booleanisLeaf()Check if a tree is a leaf.java.util.VectorlistUpperTrees()List one order upper trees.java.lang.StringorderConditionAsMaximaString(boolean interpolatorCondition)Get a Maxima string representation of the order condition of this derivation tree.java.lang.StringorderConditionAsTeXString(boolean interpolatorCondition)Get a TeX string representation of the order condition of this derivation tree.QuadraticSurdorderConditionResidual(QuadraticSurd[] c, QuadraticSurd[][] a, QuadraticSurd[] b)Compute the residual on an order conditionjava.lang.StringtoString()Get a string representation of this tree.
-
-
-
Constructor Detail
-
DerivationTree
public DerivationTree()
Simple constructor. Build a derivation tree of order 0 (i.e. no derivation at all).
-
DerivationTree
public DerivationTree(DerivationTree tree)
Copy constructor. Build a derivation tree from another one. This is a deep copy, no data is shared between the original tree and the instance.- Parameters:
tree- derivation tree to copy
-
DerivationTree
public DerivationTree(DerivationTree[] trees)
Build a derivation tree from an array of sub-trees.- Parameters:
trees- array of sub-trees (null elements will be skipped)
-
-
Method Detail
-
listUpperTrees
public java.util.Vector listUpperTrees()
List one order upper trees. This method lists all the derivation trees which have an order exactly one unit larger than the order of this tree.- Returns:
- a vector of derivation trees
-
isLeaf
public boolean isLeaf()
Check if a tree is a leaf. A tree is a leaf if it is an order 1 tree (i.e. it represents the base function f itself, not any of its derivatives).- Returns:
- true if the tree is a leaf
-
equals
public boolean equals(java.lang.Object o)
Check if the instance is equal to another tree. Two different trees are considered equals if the same derivations are performed in a similar structure. As an example f'''(f'(f), f'(f), f) is the same as f'''(f'(f), f, f'(f)) due to the multilinearity.- Overrides:
equalsin classjava.lang.Object- Parameters:
o- object against which we want to check equality- Returns:
- true if o is a derivation tree having the same structure as the instance
-
hashCode
public int hashCode()
Returns the hash code value for this tree.- Overrides:
hashCodein classjava.lang.Object- Returns:
- the hash code value for this tree.
-
compareTo
public int compareTo(java.lang.Object o)
Compares this tree with the specified object for order. Comparison is done with respect to the order first, then to the number of subtrees, then using lexicographic order of subtrees.- Specified by:
compareToin interfacejava.lang.Comparable- Parameters:
o- the Object to be compared.- Returns:
- a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
- Throws:
java.lang.ClassCastException- if the specified object's type prevents it from being compared to this Object.
-
getDepth
public int getDepth()
Get the depth of the tree. The depth is recursively computed as one plus the maximum of the depths of all subtrees. The depth of a leaf tree is 0.- Returns:
- order of the tree
-
getOrder
public int getOrder()
Get the order of the tree. The order of the tree is the parameter #beta in Folkmar Bornemann's paper. It is recursively computed as one plus the sum of the orders of all subtrees. The order of a leaf tree is 1.- Returns:
- order of the tree
-
getFactorial
public long getFactorial()
Get the factorial of the tree. The factorial of the tree is the parameter beta! in Folkmar Bornemann's paper. It is recursively computed as the order of the tree times the factorial of all subtrees. The factorial of a leaf tree is 1.- Returns:
- factorial of the tree
-
getAlpha
public QuadraticSurd getAlpha()
Get the alpha factor of the tree. The alpha factor of the tree is the parameter alpha_beta in Folkmar Bornemann's paper (note that it is not used for the computation of order conditions, it has been added in the paper and in this class only for completeness). It is recursively computed as delta_beta/n! times the alpha factor of all subtrees. The alpha factor of a leaf tree is 1. Quoting the paper of Folkmar Bornemann, by delta_beta we denote the number of different ordered tuples (beta_1, ..., beta_n) which correspond to the same unordered list beta= [beta_1, ... beta_n].- Returns:
- alpha factor of the tree
-
orderConditionResidual
public QuadraticSurd orderConditionResidual(QuadraticSurd[] c, QuadraticSurd[][] a, QuadraticSurd[] b)
Compute the residual on an order condition- Parameters:
c- time steps arraya- internal weights arrayb- estimation weights array- Returns:
- order condition residual (should be null if condition is fulfilled)
-
orderConditionAsTeXString
public java.lang.String orderConditionAsTeXString(boolean interpolatorCondition)
Get a TeX string representation of the order condition of this derivation tree.- Parameters:
interpolatorCondition- indicator if the condition should be displayed for an interpolator (using a theta parameter between 0 and 1) or for an integrator (with the constant 1)- Returns:
- a string representation (using TeX) of the order condition of the instance
-
orderConditionAsMaximaString
public java.lang.String orderConditionAsMaximaString(boolean interpolatorCondition)
Get a Maxima string representation of the order condition of this derivation tree.- Parameters:
interpolatorCondition- indicator if the condition should be displayed for an interpolator (using a theta parameter between 0 and 1) or for an integrator (with the constant 1)- Returns:
- a string representation (using Maxima) of the order condition of the instance
-
toString
public java.lang.String toString()
Get a string representation of this tree. The string representation is a parenthesized expression including the derivation order at the tree level with primes charaters and the arguments like this : f'''(f, f''(f, f'(f)), f''(f, f'(f)))- Overrides:
toStringin classjava.lang.Object- Returns:
- a string representation of the tree.
-
-
DataMelt 3.0 © DataMelt by jWork.ORG