Java examples for java.lang:Math Calculation
Gets the gaussian pdf value log.
/**// w ww .j a va 2 s . c o m * Copyright 2004-2006 DFKI GmbH. * All Rights Reserved. Use is subject to license terms. * * Permission is hereby granted, free of charge, to use and distribute * this software and its documentation without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of this work, and to * permit persons to whom this work is furnished to do so, subject to * the following conditions: * * 1. The code must retain the above copyright notice, this list of * conditions and the following disclaimer. * 2. Any modifications must be clearly marked as such. * 3. Original authors' names are not deleted. * 4. The authors' names are not used to endorse or promote products * derived from this software without specific prior written * permission. * * DFKI GMBH AND THE CONTRIBUTORS TO THIS WORK DISCLAIM ALL WARRANTIES WITH * REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL DFKI GMBH NOR THE * CONTRIBUTORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF * THIS SOFTWARE. */ //package com.java2s; public class Main { /** * Gets the gaussian pdf value log. * * @param x the x * @param meanVector the mean vector * @param covarianceMatrix the covariance matrix * @param constantTermLog the constant term log * @return the gaussian pdf value log */ public static double getGaussianPdfValueLog(double[] x, double[] meanVector, double[] covarianceMatrix, double constantTermLog) { double P = Double.MIN_VALUE; int i; double z; for (i = 0; i < x.length; i++) { z = (x[i] - meanVector[i]) * (x[i] - meanVector[i]); P = logAdd(P, Math.log(z) - Math.log(covarianceMatrix[i])); } P *= -0.5; P = constantTermLog + P; return P; } /** * Log add. * * @param x the x * @param y the y * @return the double */ public static double logAdd(double x, double y) { if (y > x) { double temp = x; x = y; y = temp; } if (x == Double.NEGATIVE_INFINITY) return x; double negDiff = y - x; if (negDiff < -20) return x; return x + Math.log(1.0 + Math.exp(negDiff)); } /** * Log. * * @param a the a * @return the double[] */ public static double[] log(double[] a) { double[] c = new double[a.length]; for (int i = 0; i < a.length; i++) { c[i] = Math.log(a[i]); } return c; } /** * Log. * * @param a the a * @param minimumValue the minimum value * @param fixedValue the fixed value * @return the double[] */ public static double[] log(double[] a, double minimumValue, double fixedValue) { double[] c = new double[a.length]; for (int i = 0; i < a.length; i++) { if (a[i] > minimumValue) c[i] = Math.log(a[i]); else c[i] = fixedValue; } return c; } /** * Exp. * * @param a the a * @return the double[] */ public static double[] exp(double[] a) { double[] c = new double[a.length]; for (int i = 0; i < a.length; i++) { c[i] = Math.exp(a[i]); } return c; } }