• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package org.apache.commons.math;
19 
20 /**
21  * Provide a default implementation for several functions useful to generic
22  * converging algorithms.
23  *
24  * @version $Revision: 1062691 $ $Date: 2011-01-24 10:12:47 +0100 (lun. 24 janv. 2011) $
25  * @since 2.0
26  * @deprecated in 2.2 (to be removed in 3.0).
27  */
28 public abstract class ConvergingAlgorithmImpl implements ConvergingAlgorithm {
29 
30     /** Maximum absolute error. */
31     protected double absoluteAccuracy;
32 
33     /** Maximum relative error. */
34     protected double relativeAccuracy;
35 
36     /** Maximum number of iterations. */
37     protected int maximalIterationCount;
38 
39     /** Default maximum absolute error. */
40     protected double defaultAbsoluteAccuracy;
41 
42     /** Default maximum relative error. */
43     protected double defaultRelativeAccuracy;
44 
45     /** Default maximum number of iterations. */
46     protected int defaultMaximalIterationCount;
47 
48     /** The last iteration count. */
49     protected int iterationCount;
50 
51     /**
52      * Construct an algorithm with given iteration count and accuracy.
53      *
54      * @param defaultAbsoluteAccuracy maximum absolute error
55      * @param defaultMaximalIterationCount maximum number of iterations
56      * @throws IllegalArgumentException if f is null or the
57      * defaultAbsoluteAccuracy is not valid
58      * @deprecated in 2.2. Derived classes should use the "setter" methods
59      * in order to assign meaningful values to all the instances variables.
60      */
61     @Deprecated
ConvergingAlgorithmImpl(final int defaultMaximalIterationCount, final double defaultAbsoluteAccuracy)62     protected ConvergingAlgorithmImpl(final int defaultMaximalIterationCount,
63                                       final double defaultAbsoluteAccuracy) {
64         this.defaultAbsoluteAccuracy = defaultAbsoluteAccuracy;
65         this.defaultRelativeAccuracy = 1.0e-14;
66         this.absoluteAccuracy = defaultAbsoluteAccuracy;
67         this.relativeAccuracy = defaultRelativeAccuracy;
68         this.defaultMaximalIterationCount = defaultMaximalIterationCount;
69         this.maximalIterationCount = defaultMaximalIterationCount;
70         this.iterationCount = 0;
71     }
72 
73     /**
74      * Default constructor.
75      *
76      * @since 2.2
77      * @deprecated in 2.2 (to be removed as soon as the single non-default one
78      * has been removed).
79      */
80     @Deprecated
ConvergingAlgorithmImpl()81     protected ConvergingAlgorithmImpl() {}
82 
83     /** {@inheritDoc} */
getIterationCount()84     public int getIterationCount() {
85         return iterationCount;
86     }
87 
88     /** {@inheritDoc} */
setAbsoluteAccuracy(double accuracy)89     public void setAbsoluteAccuracy(double accuracy) {
90         absoluteAccuracy = accuracy;
91     }
92 
93     /** {@inheritDoc} */
getAbsoluteAccuracy()94     public double getAbsoluteAccuracy() {
95         return absoluteAccuracy;
96     }
97 
98     /** {@inheritDoc} */
resetAbsoluteAccuracy()99     public void resetAbsoluteAccuracy() {
100         absoluteAccuracy = defaultAbsoluteAccuracy;
101     }
102 
103     /** {@inheritDoc} */
setMaximalIterationCount(int count)104     public void setMaximalIterationCount(int count) {
105         maximalIterationCount = count;
106     }
107 
108     /** {@inheritDoc} */
getMaximalIterationCount()109     public int getMaximalIterationCount() {
110         return maximalIterationCount;
111     }
112 
113     /** {@inheritDoc} */
resetMaximalIterationCount()114     public void resetMaximalIterationCount() {
115         maximalIterationCount = defaultMaximalIterationCount;
116     }
117 
118     /** {@inheritDoc} */
setRelativeAccuracy(double accuracy)119     public void setRelativeAccuracy(double accuracy) {
120         relativeAccuracy = accuracy;
121     }
122 
123     /** {@inheritDoc} */
getRelativeAccuracy()124     public double getRelativeAccuracy() {
125         return relativeAccuracy;
126     }
127 
128     /** {@inheritDoc} */
resetRelativeAccuracy()129     public void resetRelativeAccuracy() {
130         relativeAccuracy = defaultRelativeAccuracy;
131     }
132 
133     /**
134      * Reset the iterations counter to 0.
135      *
136      * @since 2.2
137      */
resetIterationsCounter()138     protected void resetIterationsCounter() {
139         iterationCount = 0;
140     }
141 
142     /**
143      * Increment the iterations counter by 1.
144      *
145      * @throws MaxIterationsExceededException if the maximal number
146      * of iterations is exceeded.
147      * @since 2.2
148      */
incrementIterationsCounter()149     protected void incrementIterationsCounter()
150         throws MaxIterationsExceededException {
151         if (++iterationCount > maximalIterationCount) {
152             throw new MaxIterationsExceededException(maximalIterationCount);
153         }
154     }
155 }
156