blob: e15b9a9f99710769f0874d01701eb8b4c41deca8 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.math;
/**
* Provide a default implementation for several functions useful to generic
* converging algorithms.
*
* @version $Revision: 1062691 $ $Date: 2011-01-24 10:12:47 +0100 (lun. 24 janv. 2011) $
* @since 2.0
* @deprecated in 2.2 (to be removed in 3.0).
*/
public abstract class ConvergingAlgorithmImpl implements ConvergingAlgorithm {
/** Maximum absolute error. */
protected double absoluteAccuracy;
/** Maximum relative error. */
protected double relativeAccuracy;
/** Maximum number of iterations. */
protected int maximalIterationCount;
/** Default maximum absolute error. */
protected double defaultAbsoluteAccuracy;
/** Default maximum relative error. */
protected double defaultRelativeAccuracy;
/** Default maximum number of iterations. */
protected int defaultMaximalIterationCount;
/** The last iteration count. */
protected int iterationCount;
/**
* Construct an algorithm with given iteration count and accuracy.
*
* @param defaultAbsoluteAccuracy maximum absolute error
* @param defaultMaximalIterationCount maximum number of iterations
* @throws IllegalArgumentException if f is null or the
* defaultAbsoluteAccuracy is not valid
* @deprecated in 2.2. Derived classes should use the "setter" methods
* in order to assign meaningful values to all the instances variables.
*/
@Deprecated
protected ConvergingAlgorithmImpl(final int defaultMaximalIterationCount,
final double defaultAbsoluteAccuracy) {
this.defaultAbsoluteAccuracy = defaultAbsoluteAccuracy;
this.defaultRelativeAccuracy = 1.0e-14;
this.absoluteAccuracy = defaultAbsoluteAccuracy;
this.relativeAccuracy = defaultRelativeAccuracy;
this.defaultMaximalIterationCount = defaultMaximalIterationCount;
this.maximalIterationCount = defaultMaximalIterationCount;
this.iterationCount = 0;
}
/**
* Default constructor.
*
* @since 2.2
* @deprecated in 2.2 (to be removed as soon as the single non-default one
* has been removed).
*/
@Deprecated
protected ConvergingAlgorithmImpl() {}
/** {@inheritDoc} */
public int getIterationCount() {
return iterationCount;
}
/** {@inheritDoc} */
public void setAbsoluteAccuracy(double accuracy) {
absoluteAccuracy = accuracy;
}
/** {@inheritDoc} */
public double getAbsoluteAccuracy() {
return absoluteAccuracy;
}
/** {@inheritDoc} */
public void resetAbsoluteAccuracy() {
absoluteAccuracy = defaultAbsoluteAccuracy;
}
/** {@inheritDoc} */
public void setMaximalIterationCount(int count) {
maximalIterationCount = count;
}
/** {@inheritDoc} */
public int getMaximalIterationCount() {
return maximalIterationCount;
}
/** {@inheritDoc} */
public void resetMaximalIterationCount() {
maximalIterationCount = defaultMaximalIterationCount;
}
/** {@inheritDoc} */
public void setRelativeAccuracy(double accuracy) {
relativeAccuracy = accuracy;
}
/** {@inheritDoc} */
public double getRelativeAccuracy() {
return relativeAccuracy;
}
/** {@inheritDoc} */
public void resetRelativeAccuracy() {
relativeAccuracy = defaultRelativeAccuracy;
}
/**
* Reset the iterations counter to 0.
*
* @since 2.2
*/
protected void resetIterationsCounter() {
iterationCount = 0;
}
/**
* Increment the iterations counter by 1.
*
* @throws MaxIterationsExceededException if the maximal number
* of iterations is exceeded.
* @since 2.2
*/
protected void incrementIterationsCounter()
throws MaxIterationsExceededException {
if (++iterationCount > maximalIterationCount) {
throw new MaxIterationsExceededException(maximalIterationCount);
}
}
}