1function of = a0asfun(x,s,nobs,nvar,a0indx)
2% General program to setup A0 matrix with asymmetric prior (as) and compute the posterior
3%     function of = a0asfun(x,s,nobs,nvar,a0indx) -- negative logPosterior
4%        Note: columns correspond to equations
5%  x (parameter vector),
6%  s (diag(S1,...,Sm)): note, as in "a0lhfun", already divided by "nobs"
7%  nobs (no of obs),
8%  nvar (no of variables),
9%  a0indx (matrix indicating the free parameters in A0, and each column in A0 corresponds
10%                    to an equation)
11%
12%
13% Copyright (C) 1997-2012 Tao Zha
14%
15% This free software: you can redistribute it and/or modify
16% it under the terms of the GNU General Public License as published by
17% the Free Software Foundation, either version 3 of the License, or
18% (at your option) any later version.
19%
20% It is distributed in the hope that it will be useful,
21% but WITHOUT ANY WARRANTY; without even the implied warranty of
22% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23% GNU General Public License for more details.
24%
25% If you did not received a copy of the GNU General Public License
26% with this software, see <http://www.gnu.org/licenses/>.
27%
28
29a0 = zeros(nvar);
30a0(a0indx) = x;
31% Note: each column in a0 corresponds to an equation!!
32%
33%%ada = chol(a0'*a0);
34%%ada = log(abs(diag(ada)));
35%%ada = sum(ada);
36% **  TZ, 10/15/96, the above two lines can be improved by the following three lines
37[a0l,a0u] = lu(a0);
38%ada=diag(abs(a0u));
39%ada=sum(log(ada));
40ada = sum(log(abs(diag(a0u))));
41
42%
43%tra = sum(i=1:m){a0(:,i)'*Si*a0(:,i)}
44tra = 0.0;
45for i=1:nvar
46   tra = tra + a0(:,i)'*s{i}*a0(:,i);
47end
48
49of = -nobs*ada + nobs*.5*tra;
50