view src/samer/functions/BiLaplacianBlend.java @ 5:b67a33c44de7

Remove some crap, etc
author samer
date Fri, 05 Apr 2019 21:34:25 +0100
parents bf79fb79ee13
children
line wrap: on
line source
/*
 *	Copyright (c) 2000, Samer Abdallah, King's College London.
 *	All rights reserved.
 *
 *	This software is provided AS iS and WITHOUT ANY WARRANTY; 
 *	without even the implied warranty of MERCHANTABILITY or 
 *	FITNESS FOR A PARTICULAR PURPOSE.
 */

package samer.functions;
import  samer.maths.*;

/**
	Log prior for an laplacian distribution with
	an extra mass at zero, eg a mixture of a laplacian
	with another much narrower laplacian. The log prior is
	basically an abs function with with a extra-deep pit at
	zero.
	Paramters control the width and depth of the pit.

	Two linear phases blended exponentially.
  */

public class BiLaplacianBlend extends Function
{
	double beta=1, A=1;

	public void setExponent(double b) { beta=b; }
	public void setStrength(double a) { A=a; }
	public double getJump() { return 1+A*beta; }

	public String format(String t) { return "SparseLaplacian("+t+")"; }

	public final double apply(double t) { 
		t = Math.abs(t);
		double s=beta*t;
		if  (s<24) return t-A*Math.exp(-s);
		else return t;
	}

	public Function derivative() { 
		return new Function() {
			public final double apply(double t) { 
				if (t>0) {
					double s=beta*t;
					if  (s>24) return 1;
					else return 1+A*beta*Math.exp(-s);
				} else if (t<0) {
					double s=-beta*t;
					if  (s>24) return -1;
					else return -1-A*beta*Math.exp(-s);
				} else return 0;
			}
			public String format(String t) { return "dBiLaplacian("+t+")"; }
		};
	}
}