Class InverseLaplace2

  • Direct Known Subclasses:
    AlgorithmFRAP.FitFullModel2, AlgorithmFRAP.FitSineModel, InverseLaplaceTest.FitPiessens1, InverseLaplaceTest.FitPiessens10, InverseLaplaceTest.FitPiessens11, InverseLaplaceTest.FitPiessens12, InverseLaplaceTest.FitPiessens13, InverseLaplaceTest.FitPiessens14, InverseLaplaceTest.FitPiessens15, InverseLaplaceTest.FitPiessens16, InverseLaplaceTest.FitPiessens2, InverseLaplaceTest.FitPiessens3, InverseLaplaceTest.FitPiessens4, InverseLaplaceTest.FitPiessens5, InverseLaplaceTest.FitPiessens6, InverseLaplaceTest.FitPiessens7, InverseLaplaceTest.FitPiessens8, InverseLaplaceTest.FitPiessens9

    public abstract class InverseLaplace2
    extends java.lang.Object
    This is a port of the numerical inverse Laplace transform found as the FORTRAN implementation of Algorithm 619 from the collected algorithms from the ACM found at http://www.netlib.org/toms/619. Ths inversion of the Laplace transform is done using the Durbin formula in combination with the Epsilon Algorithm. This algorithm by R. Piessens and R. Huysmans appeared in ACM Trans. Math. Software, Vol. 10, No. 3, Sep., 1984, pp. 348-353.

    From the ACM website:

     ACM Software License Agreement
     
      All software, both binary and source published by the Association for Computing Machinery (hereafter, Software) is copyrighted by the Association (hereafter, ACM) and ownership of all right, title and interest in and to the Software remains with ACM. By using or copying the Software, User agrees to abide by the terms of this Agreement.
      Noncommercial Use
     
      The ACM grants to you (hereafter, User) a royalty-free, nonexclusive right to execute, copy, modify and distribute both the binary and source code solely for academic, research and other similar noncommercial uses, subject to the following conditions:
     
      1. User acknowledges that the Software is still in the development stage and that it is being supplied "as is," without any support services from ACM. Neither ACM nor the author makes any representations or warranties, express or implied, including, without limitation, any representations or warranties of the merchantability or fitness for any particular purpose, or that the application of the software, will not infringe on any patents or other proprietary rights of others.
      2. ACM shall not be held liable for direct, indirect, incidental or consequential damages arising from any claim by User or any third party with respect to uses allowed under this Agreement, or from any use of the Software.
      3. User agrees to fully indemnify and hold harmless ACM and/or the author(s) of the original work from and against any and all claims, demands, suits, losses, damages, costs and expenses arising out of the User's use of the Software, including, without limitation, arising out of the User's modification of the Software.
      4. User may modify the Software and distribute that modified work to third parties provided that: (a) if posted separately, it clearly acknowledges that it contains material copyrighted by ACM (b) no charge is associated with such copies, (c) User agrees to notify ACM and the Author(s) of the distribution, and (d) User clearly notifies secondary users that such modified work is not the original Software.
      5. User agrees that ACM, the authors of the original work and others may enjoy a royalty-free, non-exclusive license to use, copy, modify and redistribute these modifications to the Software made by the User and distributed to third parties as a derivative work under this agreement.
      6. This agreement will terminate immediately upon User's breach of, or non-compliance with, any of its terms. User may be held liable for any copyright infringement or the infringement of any other proprietary rights in the Software that is caused or facilitated by the User's failure to abide by the terms of this agreement.
      7. This agreement will be construed and enforced in accordance with the law of the state of New York applicable to contracts performed entirely within the State. The parties irrevocably consent to the exclusive jurisdiction of the state or federal courts located in the City of New York for all disputes concerning this agreement. 
     
      Commercial Use
     
      Any User wishing to make a commercial use of the Software must contact ACM at permissions@acm.org to arrange an appropriate license. Commercial use includes (1) integrating or incorporating all or part of the source code into a product for sale or license by, or on behalf of, User to third parties, or (2) distribution of the binary or source code to third parties for use with a commercial product sold or licensed by, or on behalf of, User.
     
      Revised 6/98
     

    • Field Summary

      Fields 
      Modifier and Type Field Description
      private double abscissa
      abscissa of convergence of the Laplace transform.
      private double absEps
      absolute accuracy requested.
      private double epsilon
      D1MACH(4).
      private int[] errStatus
      Parameter giving information on the termination of the algorithm errStatus[0] = 0 normal and reliable termination of the routine errStatus[0] = 1 The computations are terminated because the bound on the number of evaluations of the user supplied Laplace function has been achieved.
      private double[] estErr
      Estimate of the absolute error abs(f(t) - result[0]).
      private int[] evaluations
      Number of evaluations of user supplied Laplace function.
      private int it
      index of the time variable being used.
      private int maxBound
      maxBound is a bound on the number of terms used in the Durbin formula.
      private int nex
      DOCUMENT ME!
      private int nres
      DOCUMENT ME!
      private double oflow
      emax = 1024, the largest exponent E for double precision, is I1MACH(16) D1MACH(2) = 2**(emax)*(1 - 2**(-doubleDigits)) = 2**1024*(1 - 2**-53) D1MACH(2) = Double.MAX_VALUE.
      private double relEps
      relative accuracy requested.
      private double[] res3la
      DOCUMENT ME!
      private double[] result
      The routine tries to satisfy the least stringent of both accuracy requirements.
      private double[] rex
      DOCUMENT ME!
      private double[] time
      Independent variable for which the inverse Laplace transform has to be computed. time value should be greater than zero.
    • Constructor Summary

      Constructors 
      Constructor Description
      InverseLaplace2​(double[] time, double abscissa, double relEps, double absEps, double[] result, double[] estErr, int[] evaluations, int[] errStatus)
      Creates a new InverseLaplace2 object.
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      private void dqext()
      DOCUMENT ME!
      void driver()
      driver.
      abstract void fitToLaplace​(double realIn, double imagIn, double[] realOut, double[] imagOut)
      DOCUMENT ME!
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • abscissa

        private final double abscissa
        abscissa of convergence of the Laplace transform.
      • absEps

        private final double absEps
        absolute accuracy requested.
      • epsilon

        private double epsilon
        D1MACH(4).
      • errStatus

        private final int[] errStatus
        Parameter giving information on the termination of the algorithm errStatus[0] = 0 normal and reliable termination of the routine errStatus[0] = 1 The computations are terminated because the bound on the number of evaluations of the user supplied Laplace function has been achieved. This bound is equal to 8*maxBound+ 5. One can allow more Laplace function evalutions by increasing the value of maxBound. errStatus[0] = 2 An input time value is less than or equal to zero
      • estErr

        private final double[] estErr
        Estimate of the absolute error abs(f(t) - result[0]).
      • evaluations

        private final int[] evaluations
        Number of evaluations of user supplied Laplace function.
      • it

        private int it
        index of the time variable being used.
      • maxBound

        private final int maxBound
        maxBound is a bound on the number of terms used in the Durbin formula.
        See Also:
        Constant Field Values
      • nex

        private int nex
        DOCUMENT ME!
      • nres

        private int nres
        DOCUMENT ME!
      • oflow

        private final double oflow
        emax = 1024, the largest exponent E for double precision, is I1MACH(16) D1MACH(2) = 2**(emax)*(1 - 2**(-doubleDigits)) = 2**1024*(1 - 2**-53) D1MACH(2) = Double.MAX_VALUE.
        See Also:
        Constant Field Values
      • relEps

        private final double relEps
        relative accuracy requested.
      • res3la

        private final double[] res3la
        DOCUMENT ME!
      • result

        private final double[] result
        The routine tries to satisfy the least stringent of both accuracy requirements. That is, the routine tries to satisfy: ABS(f(t) - result[0]) <= max(absEps, relEps*ABS(f(t))) where f(t) is the actual time function Inverse Laplace transform
      • rex

        private final double[] rex
        DOCUMENT ME!
      • time

        private final double[] time
        Independent variable for which the inverse Laplace transform has to be computed. time value should be greater than zero.
    • Constructor Detail

      • InverseLaplace2

        public InverseLaplace2​(double[] time,
                               double abscissa,
                               double relEps,
                               double absEps,
                               double[] result,
                               double[] estErr,
                               int[] evaluations,
                               int[] errStatus)
        Creates a new InverseLaplace2 object.
        Parameters:
        time - double[]
        abscissa - double
        relEps - double
        absEps - double
        result - double[]
        estErr - double[]
        evaluations - int[]
        errStatus - int[]
    • Method Detail

      • fitToLaplace

        public abstract void fitToLaplace​(double realIn,
                                          double imagIn,
                                          double[] realOut,
                                          double[] imagOut)
        DOCUMENT ME!
        Parameters:
        realIn - double real part of independent variable of Laplace transform
        imagIn - double imag part of independent varialbe of Laplace transform
        realOut - double[] real part of Laplace transform output
        imagOut - double[] imag part of Laplace transform output
      • driver

        public void driver()
        driver.
      • dqext

        private void dqext()
        DOCUMENT ME!