示例#1
0
		/// <summary>
		/// Quadrature nodes for Gamma expectations
		/// </summary>
		/// <param name="precision">'precision' message</param>
		/// <param name="nodes">Place to put the nodes</param>
		/// <param name="weights">Place to put the weights</param>
		public static void QuadratureNodesAndWeights(Gamma precision, double[] nodes, double[] weights)
		{
#if KeepLastMessage
			if (LastPrecisionMessage != null) {
				Gamma PrecisionPosterior = precision * LastPrecisionMessage;
				Quadrature.GammaNodesAndWeights(PrecisionPosterior.Precision, PrecisionPosterior.PrecisionOverMean, nodes, weights);
				// modify the weights to include q(prec)/Ga(prec;a,b)
				for (int i = 0; i < weights.Length; i++) {
					weights[i] *= Math.Exp(precision.EvaluateLn(nodes[i]) - Gamma.EvaluateLn(nodes[i], PrecisionPosterior.Precision, PrecisionPosterior.PrecisionOverMean));
				}
				return;
			}
#endif
			Quadrature.GammaNodesAndWeights(precision.Shape - 1, precision.Rate, nodes, weights);
		}