예제 #1
0
파일: CovProd.hpp 프로젝트: kanster/OpenGP
	static MatrixPtr K(const Hyp							&logHyp, 
							 GeneralTrainingData<Scalar>	&generalTrainingData, 
							 const int							pdHypIndex = -1) 
	{
		// Assertions only in the begining of the public static member functions which can be accessed outside.
		// The hyparparameter index should be less than the number of hyperparameters
		assert(pdHypIndex < logHyp.size());

		// copy hyperparameters
		Cov1::Hyp	logHyp1;
		Cov2::Hyp	logHyp2;
		copy(logHyp, logHyp1, logHyp2);

		// output
		MatrixPtr pK;

		// covariance matrix
		if(pdHypIndex < 0)
		{
			// Cov = Cov1 * Cov2
			pK = Cov1::K(logHyp1, generalTrainingData, pdHypIndex);											// Cov1
			pK->noalias() = pK->cwiseProduct(*Cov2::K(logHyp2, generalTrainingData, pdHypIndex));	// Cov2
		}

		// partial derivatives of covariance matrix 
		else
		{
			// dCov1
			if(pdHypIndex < Cov1::N - 1)
			{
				// dCov = dCov1*Cov2
				pK = Cov1::K(logHyp1, generalTrainingData, pdHypIndex);									// dCov1
				pK->noalias() = pK->cwiseProduct(*Cov2::K(logHyp2, generalTrainingData, -1));		// Cov2
			}
			else if(pdHypIndex == N - 1)
			{
				// dCov = dCov1*dCov2
				pK = Cov1::K(logHyp1, generalTrainingData, logHyp1.size()-1);											// dCov1
				pK->noalias() = pK->cwiseProduct(*Cov2::K(logHyp2, generalTrainingData, logHyp2.size()-1));	// dCov2
			}
			// dCov2
			else
			{
				// dCov = Cov1*dCov2
				pK = Cov1::K(logHyp1, generalTrainingData, -1);																			// Cov1
				pK->noalias() = pK->cwiseProduct(*Cov2::K(logHyp2, generalTrainingData, pdHypIndex - Cov1::N - 1));	// dCov2
			}
		}
		
		return pK;
	}
예제 #2
0
파일: CovProd.hpp 프로젝트: kanster/OpenGP
	static MatrixPtr Ks(const Hyp										&logHyp, 
							  const GeneralTrainingData<Scalar>		&generalTrainingData, 
							  const TestData<Scalar>					&testData)
	{
		// copy hyperparameters
		Cov1::Hyp	logHyp1;
		Cov2::Hyp	logHyp2;
		copy(logHyp, logHyp1, logHyp2);

		// Cov = Cov1 * Cov2
		MatrixPtr pKs = Cov1::Ks(logHyp1, generalTrainingData, testData);							// Cov1
		pKs->noalias() = pKs->cwiseProduct(*Cov2::Ks(logHyp2, generalTrainingData, testData));	// Cov2

		return pKs;
	}
예제 #3
0
파일: CovProd.hpp 프로젝트: kanster/OpenGP
	static MatrixPtr Kss(const Hyp						&logHyp, 
								const TestData<Scalar>		&testData, 
								const bool						fVarianceVector = true)
	{
		// copy hyperparameters
		Cov1::Hyp	logHyp1;
		Cov2::Hyp	logHyp2;
		copy(logHyp, logHyp1, logHyp2);

		// Cov = Cov1 * Cov2
		MatrixPtr pKss = Cov1::Kss(logHyp1, testData, fVarianceVector);								// Cov1
		pKss->noalias() = pKss->cwiseProduct(*Cov2::Kss(logHyp2, testData, fVarianceVector));	// Cov2

		return pKss;
	}