1 /* 2 * Copyright (C) 2023 Alberto Irurueta Carro (alberto@irurueta.com) 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.irurueta.numerical.integration; 17 18 import com.irurueta.algebra.WrongSizeException; 19 20 /** 21 * Computes function integration by using Simpson's method and double exponential quadrature. 22 * Double exponential quadrature allows improper integrands containing singularities to be 23 * integrated. 24 * 25 * @see DoubleExponentialRuleMatrixQuadrature 26 */ 27 public class SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator 28 extends SimpsonMatrixIntegrator<DoubleExponentialRuleMatrixQuadrature> { 29 30 /** 31 * Constructor. 32 * 33 * @param a Lower limit of integration. 34 * @param b Upper limit of integration. 35 * @param hmax Maximum step size. This quadrature transforms the range of integration to 36 * [-hmax, hmax]. 37 * @param listener listener to evaluate a single dimension matrix (multivariate) function at 38 * required points. 39 * @param eps required accuracy. 40 * @throws WrongSizeException if size notified by provided listener is invalid. 41 */ 42 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 43 final double a, final double b, final double hmax, 44 final MatrixSingleDimensionFunctionEvaluatorListener listener, final double eps) throws WrongSizeException { 45 super(new DoubleExponentialRuleMatrixQuadrature(listener, a, b, hmax), eps); 46 } 47 48 /** 49 * Constructor. 50 * 51 * @param a Lower limit of integration. 52 * @param b Upper limit of integration. 53 * @param listener listener to evaluate a single dimension matrix (multivariate) function at 54 * required points. 55 * @param eps required accuracy. 56 * @throws WrongSizeException if size notified by provided listener is invalid. 57 */ 58 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 59 final double a, final double b, final MatrixSingleDimensionFunctionEvaluatorListener listener, 60 final double eps) throws WrongSizeException { 61 super(new DoubleExponentialRuleMatrixQuadrature(listener, a, b), eps); 62 } 63 64 /** 65 * Constructor with default accuracy. 66 * 67 * @param a Lower limit of integration. 68 * @param b Upper limit of integration. 69 * @param hmax Maximum step size. This quadrature transforms the range of integration to 70 * [-hmax, hmax]. 71 * @param listener listener to evaluate a single dimension matrix (multivariate) function at 72 * required points. 73 * @throws WrongSizeException if size notified by provided listener is invalid. 74 */ 75 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 76 final double a, final double b, final double hmax, 77 final MatrixSingleDimensionFunctionEvaluatorListener listener) throws WrongSizeException { 78 this(a, b, hmax, listener, EPS); 79 } 80 81 /** 82 * Constructor with default accuracy and default maximum step size. 83 * 84 * @param a Lower limit of integration. 85 * @param b Upper limit of integration. 86 * @param listener listener to evaluate a single dimension matrix (multivariate) function at 87 * required points. 88 * @throws WrongSizeException if size notified by provided listener is invalid. 89 */ 90 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 91 final double a, final double b, final MatrixSingleDimensionFunctionEvaluatorListener listener) 92 throws WrongSizeException { 93 this(a, b, listener, EPS); 94 } 95 96 /** 97 * Constructor. 98 * 99 * @param a Lower limit of integration. 100 * @param b Upper limit of integration. 101 * @param hmax Maximum step size. This quadrature transforms the range of integration to 102 * [-hmax, hmax]. 103 * @param listener listener to evaluate a single dimension function at required points for 104 * double exponential quadrature to take into account any non-mild 105 * singularities. 106 * @param eps required accuracy. 107 * @throws WrongSizeException if size notified by provided listener is invalid. 108 */ 109 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 110 final double a, final double b, final double hmax, 111 final DoubleExponentialMatrixSingleDimensionFunctionEvaluatorListener listener, final double eps) 112 throws WrongSizeException { 113 super(new DoubleExponentialRuleMatrixQuadrature(listener, a, b, hmax), eps); 114 } 115 116 /** 117 * Constructor with default maximum step size. 118 * 119 * @param a Lower limit of integration. 120 * @param b Upper limit of integration. 121 * @param listener listener to evaluate a single dimension function at required points for 122 * double exponential quadrature to take into account any non-mild 123 * singularities. 124 * @param eps required accuracy. 125 * @throws WrongSizeException if size notified by provided listener is invalid. 126 */ 127 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 128 final double a, final double b, 129 final DoubleExponentialMatrixSingleDimensionFunctionEvaluatorListener listener, final double eps) 130 throws WrongSizeException { 131 super(new DoubleExponentialRuleMatrixQuadrature(listener, a, b), eps); 132 } 133 134 /** 135 * Constructor with default accuracy. 136 * 137 * @param a Lower limit of integration. 138 * @param b Upper limit of integration. 139 * @param hmax Maximum step size. This quadrature transforms the range of integration to 140 * [-hmax, hmax]. 141 * @param listener listener to evaluate a single dimension function at required points for 142 * double exponential quadrature to take into account any non-mild 143 * singularities. 144 * @throws WrongSizeException if size notified by provided listener is invalid. 145 */ 146 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 147 final double a, final double b, final double hmax, 148 final DoubleExponentialMatrixSingleDimensionFunctionEvaluatorListener listener) throws WrongSizeException { 149 this(a, b, hmax, listener, EPS); 150 } 151 152 /** 153 * Constructor with default accuracy and default maximum step size. 154 * 155 * @param a Lower limit of integration. 156 * @param b Upper limit of integration. 157 * @param listener listener to evaluate a single dimension function at required points for 158 * double exponential quadrature to take into account any non-mild 159 * singularities. 160 * @throws WrongSizeException if size notified by provided listener is invalid. 161 */ 162 public SimpsonDoubleExponentialRuleQuadratureMatrixIntegrator( 163 final double a, final double b, 164 final DoubleExponentialMatrixSingleDimensionFunctionEvaluatorListener listener) throws WrongSizeException { 165 this(a, b, listener, EPS); 166 } 167 168 /** 169 * Gets type of quadrature. 170 * 171 * @return type of quadrature. 172 */ 173 @Override 174 public QuadratureType getQuadratureType() { 175 return QuadratureType.DOUBLE_EXPONENTIAL_RULE; 176 } 177 }