/*
* HuberEstimator.java
*
* Created on April 5, 2005, 8:40 AM
*/
package ika.transformation.robustestimator;
/**
* Robust estimator according to Huber
* @author Bernhard Jenny, Institute of Cartography, ETH Zurich
*/
public class HuberEstimator extends RobustEstimator implements java.io.Serializable {
private static final long serialVersionUID = 7601561936358246963L;
/**
* Tuning constant k. Estimates the qualtiy of the dataset.<br>
* As with the value of the standard deviation:<br>
* k = 1: 66% of all points are compensated with least squares estimation, <br>
* the error on the other 34% has a lesser wheight.
* k = 3: 99.5%
*/
private double k = 1.5;
private double minK = 0.0;
private double maxK = 4.0;
/** Creates a new instance of HuberEstimator */
public HuberEstimator() {
}
/**
* Returns a description of the estimator.
* The description does not contain any numerical values.
* @return The description.
*/
public String getDescription() {
String str = "Robust Huber-Estimator\n";
str += "Split Point k\n";
return str;
}
/**
* Returns the name of this robust estimator.
* @return Returns a String
*/
public String getName(){
String str = "Huber Estimator";
return str;
}
/**
* Returns a description of the estimator.
* The description does contain numerical values.
* @return The description.
*/
public String getDescriptionOfValues() {
return "Split Point k:\t" + this.k + "\n";
}
/**
* weight function of the estimator
* @param u residual scaled by s.
* @return The weight for u.
*/
public double w(double u) {
final double u_abs = Math.abs(u);
return u_abs < this.k ? 1. : this.k / u_abs;
}
/**
* Returns the tuning constant k.
* @return The tuning constant k.
*/
public double getK() {
return k;
}
/**
* Sets the tuning constant k.
* @param k The new value of the tuning constant k.
*/
public void setK(double k) {
if (k <= 0.)
throw new IllegalArgumentException();
this.k = k;
}
public String getShortReport(){
String str = "Huber Estimator\n";
str += this.getK();
return str;
}
public double getMinK() {
return minK;
}
public double getMaxK() {
return maxK;
}
}