EvolutionOfCapital.java

package net.finmath.climate.models.dice.submodels;

import java.util.function.BiFunction;
import java.util.function.Function;

import net.finmath.time.TimeDiscretization;

/**
 * the evolution of the capital (economy)
 * \(
 * 	K(t_{i+1}) = (1-delta) K(t_{i}) + investment
 * \)
 *
 * @author Christian Fries
 */
public class EvolutionOfCapital implements Function<Integer, BiFunction<Double, Double, Double>> {

	private final TimeDiscretization timeDiscretization;
	private final double capitalDeprecation;

	public EvolutionOfCapital(TimeDiscretization timeDiscretization, double capitalDeprecation) {
		super();
		this.timeDiscretization = timeDiscretization;
		this.capitalDeprecation = capitalDeprecation;
	}

	public EvolutionOfCapital(TimeDiscretization timeDiscretization) {
		// capital deprecation per 1 year
		this(timeDiscretization, -Math.log(1-0.1));
	}

	@Override
	public BiFunction<Double, Double, Double> apply(Integer timeIndex) {
		final double timeStep = timeDiscretization.getTimeStep(timeIndex);
		return (Double capital, Double investment) -> capital * Math.exp(-capitalDeprecation * timeStep) + investment * timeStep;
	}
}