/*
 Copyright (C) 2009 Ueli Hofstetter

 This source code is release under the BSD License.

 This file is part of JQuantLib, a free-software/open-source library
 for financial quantitative analysts and developers - http://jquantlib.org/

 JQuantLib is free software: you can redistribute it and/or modify it
 under the terms of the JQuantLib license.  You should have received a
 copy of the license along with this program; if not, please email
 . The license is also available online at
 .

 This program is distributed in the hope that it will be useful, but WITHOUT
 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 FOR A PARTICULAR PURPOSE.  See the license for more details.

 JQuantLib is based on QuantLib. http://quantlib.org/
 When applicable, the original copyright notice follows this notice.
 */
package org.jquantlib.math.optimization;

import org.jquantlib.math.matrixutilities.Array;

public class ProjectedCostFunction extends CostFunction {

    private int numberOfFreeParameters;
    private final Array fixedParameters;
    private final Array actualParameters;
    private final boolean [] parametersFreedoms_;
    private final CostFunction costFunction;


    public ProjectedCostFunction(final CostFunction costFunction, final Array parameterValues, final boolean [] parametersFreedoms) {
        if (System.getProperty("EXPERIMENTAL") == null)
            throw new UnsupportedOperationException("Work in progress");
        this.numberOfFreeParameters = 0;
        // TODO: code review :: use of clone()
        this.fixedParameters  = parameterValues.clone();
        this.actualParameters = parameterValues.clone();
        this.parametersFreedoms_ = parametersFreedoms; // TODO: clone() ?
        this.costFunction = costFunction;

        if (fixedParameters.size() != parametersFreedoms_.length)
            throw new IllegalArgumentException("fixedParameters_.size()!=parametersFreedoms_.size()");
        for(int i = 0; i0))
                throw new ArithmeticException("numberOfFreeParameters==0");
        }
    }

    public void mapFreeParameters(final Array parametersValues){
        if(!(parametersValues.size() == numberOfFreeParameters))
            throw new IllegalArgumentException("parametersValues.size()!=numberOfFreeParameters");
        int i = 0;
        for(int j = 0; j 

Ads help maintain this website.