template<class Type>
Type objective_function<Type>::operator() ()
{
int i,j;
Type g=0;
for(j=0;j<p;j++)
tmp(j) = sigma(j)/sqrt(Type(1.0)-phi(j)*phi(j));
g -=
sum(
dnorm(h.col(0).vec(), Type(0), tmp,
true));
for(i=1;i<n;i++)
{
for(j=0;j<p;j++)
tmp2(j) = phi(j)*h(j,i-1);
g -=
sum(
dnorm(h.col(i).vec(), tmp2, sigma,
true));
}
L.setIdentity();
int k=0;
for(i=1;i<p;i++)
{
Type Norm2=L(i,i);
for(j=0;j<=i-1;j++)
{
L(i,j) = off_diag_x(k++);
Norm2 += L(i,j)*L(i,j);
}
for(j=0;j<=i;j++)
L(i,j) /= sqrt(Norm2);
}
for(i=0;i<n;i++)
{
vector<Type> sigma_y = exp( Type(0.5) * ( mu_x + h.col(i).vec() ));
for(int i2=0;i2<p;i2++)
for(j=0;j<p;j++)
Sigma_y(i2,j) = Sigma(i2,j)*sigma_y(i2)*sigma_y(j);
g +=
MVNORM(Sigma_y,
false )( y.col(i).vec() );
}
return g;
}
License: