Example #1
0
void jeffrey(const Ty* X1, const Ty* X2, Ty* M, int d, int n1, int n2)
{
    // compute xlogx and ylogy
    Ty* xs1 = new Ty[n1];
    Ty* xs2 = new Ty[n2];
    
    sum_xlogx(X1, d, n1, xs1);
    sum_xlogx(X2, d, n2, xs2);    
    
    // compute metrics
    const Ty* v2 = X2;
    for (int j = 0; j < n2; ++j, v2 += d)
    {
        const Ty* v1 = X1;
        for (int i = 0; i < n1; ++i, v1 += d)
        {
            Ty sa = 0;
            
            for (int k = 0; k < d; ++k)
            {             
                Ty ua = (v1[k] + v2[k]) * 0.5;                                
                sa += (ua > 0 ? ua * log(ua) : 0);
            }
            
            *M++ = xs1[i] + xs2[j] - 2 * sa;
        }
    }
    
    // release memory
    delete[] xs1;
    delete[] xs2;
}
Example #2
0
void kldiv(const Ty* X1, const Ty* X2, Ty* M, int d, int n1, int n2)
{
    // compute xlogx
    Ty* xs = new Ty[n1];
    sum_xlogx(X1, d, n1, xs);
    
    // compute metrics
    const Ty* v2 = X2;
    for (int j = 0; j < n2; ++j, v2 += d)
    {
        const Ty* v1 = X1;
        for (int i = 0; i < n1; ++i, v1 += d)
        {
            Ty sa = 0;
            
            for (int k = 0; k < d; ++k)
            {
                Ty u1 = v1[k];
                Ty u2 = v2[k];
                sa += (u1 > 0 ? u1 * log(u2) : 0);
            }
            
            *M++ = xs[i] - sa;
        }
    }
    
    // release memory
    delete[] xs;
    
}
Example #3
0
doublereal IdealGasPhase::entropy_mole() const
{
    return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx() - std::log(pressure() / m_spthermo->refPressure()));
}
doublereal LatticePhase::entropy_mole() const
{
    return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx());
}
Example #5
0
 doublereal ConstDensityThermo::entropy_mole() const {
     return GasConstant * (mean_X(&entropy_R()[0]) -
         sum_xlogx());
 }
doublereal IdealSolidSolnPhase::gibbs_mole() const
{
    return GasConstant * temperature() * (mean_X(gibbs_RT_ref()) + sum_xlogx());
}
doublereal IdealSolidSolnPhase::entropy_mole() const
{
    return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx());
}
Example #8
0
  /// Molar entropy. Units: J/kmol/K. 
  doublereal IdealSolnGasVPSS::entropy_mole() const {
    updateStandardStateThermo();
    const vector_fp &entrop_R = m_VPSS_ptr->entropy_R();
    return GasConstant * (mean_X(DATA_PTR(entrop_R)) - sum_xlogx());

  }