using System; namespace Science.Mathematics { /// /// A function is a relation that uniquely associates /// members of one set with members of another set. /// More formally, a function from A to B is an object f /// such that every a in A is uniquely associated with /// an object f(a) in B. A function is therefore /// a many-to-one (or sometimes one-to-one) relation. /// public class Function { public Function() { } public delegate void ToVoid(T x); public delegate void ToVoid(T x, U y); public delegate void ToVoid(T x, U y, V z); public delegate void ToVoid(T x, U y, V z, W t); public delegate R ToLastType(); public delegate R ToLastType(T x); public delegate R ToLastType(T x, U y); public delegate R ToLastType(T x, U y, V z); public delegate R ToLastType(T x, U y, V z, W t); // Old functions are following. public delegate int IntToInt(int x); public delegate int[] IntToIntA(int x); public delegate double IntToDouble(int x); public delegate double[] IntToDoubleA(int x); public delegate Complex IntToComplex(int x); public delegate Complex[] IntToComplexA(int x); public delegate int IntAToInt(int[] x); public delegate int[] IntAToIntA(int[] x); public delegate double IntAToDouble(int[] x); public delegate double[] IntAToDoubleA(int[] x); public delegate Complex IntAToComplex(int[] x); public delegate Complex[] IntAToComplexA(int[] x); public delegate int DoubleToInt(double x); public delegate int[] DoubleToIntA(double x); public delegate double DoubleToDouble(double x); public delegate double[] DoubleToDoubleA(double x); public delegate Complex DoubleToComplex(double x); public delegate Complex[] DoubleToComplexA(double x); public delegate int DoubleAToInt(double[] x); public delegate int[] DoubleAToIntA(double[] x); public delegate double DoubleAToDouble(double[] x); public delegate double[] DoubleAToDoubleA(double[] x); public delegate Complex DoubleAToComplex(double[] x); public delegate Complex[] DoubleAToComplexA(double[] x); public delegate int ComplexToInt(Complex x); public delegate int[] ComplexToIntA(Complex x); public delegate double ComplexToDouble(Complex x); public delegate double[] ComplexToDoubleA(Complex x); public delegate Complex ComplexToComplex(Complex x); public delegate Complex[] ComplexToComplexA(Complex x); public delegate int ComplexAToInt(Complex[] x); public delegate int[] ComplexAToIntA(Complex[] x); public delegate double ComplexAToDouble(Complex[] x); public delegate double[] ComplexAToDoubleA(Complex[] x); public delegate Complex ComplexAToComplex(Complex[] x); public delegate Complex[] ComplexAToComplexA(Complex[] x); public delegate double IntDoubleToDouble(int n, double x); public delegate double[] IntDoubleToDoubleA(int n, double x); public delegate double IntIntDoubleDoubleToDouble(int n, int m, double x, double y); public delegate double DoubleDoubleToDouble(double x, double y); public delegate double DoubleDoubleDoubleToDouble(double x, double y, double z); public delegate double[] DoubleDoubleToDoubleA(double x, double y); public delegate double[] DoubleDoubleADoubleAToDoubleA(double x, double[] y, double[] z); public delegate double[] DoubleDoubleAToDoubleA(double x, double[] y); public delegate double[] DoubleDoubleAIntToDoubleA(double x, double[] y, int n); public delegate double[] DoubleDoubleAIntIntToDoubleA(double x, double[] y, int n, int m); public delegate double[,] DoubleToDoubleM(double x); public delegate double[,] DoubleAToDoubleM(double[] x); public delegate double[,] DoubleDoubleAToDoubleM(double x, double[] y); } }